Re: [LTO merge][0/15] Description of the final 15 patches
Ian Lance Taylor <[email protected]>
| Newsgroups | gmane.comp.gcc.devel,gmane.comp.gcc.java.devel,gmane.comp.gcc.fortran |
|---|---|
| Message-ID | <[email protected]> |
"Joseph S. Myers" <[email protected]> writes: > On Mon, 28 Sep 2009, Diego Novillo wrote: > >> - libiberty >> I need help with this one. When the linker plugin is >> enabled (if GCC is configured to use gold), LTO can >> detect LTO objects inside archives via the callbacks it >> gets from the linker. Since the linker plugin is a >> shared object, and it uses libiberty functions, it needs >> to use a shared libiberty. >> >> Currently, we just force --enable-shared on libiberty, >> but I would only want to do that if gold and lto are >> enabled. We detect gold and lto support in the top >> configure script, but how do I send that down to >> libiberty's configure? > > Shared libiberty seems like a bad idea as you then need to deal with > soname allocation and changing the soname whenever an ABI-incompatible > change is made. What you actually need is a PIC libiberty to link into > the plugin (and avoiding using any global data in libiberty that needs a > single copy in any program; hopefully it doesn't have any), not a shared > one. Yes. Fortunately there is no such thing as a shared libiberty. If you configure libiberty with --enable-shared, what you get is a PIC libiberty (libiberty/pic/libiberty.a) alongside the non-PIC one (libiberty/libiberty.a). So all Diego needs to do is pass --enable-shared down to libiberty when --enable-lto/--enable-gold. The way to do that is something like the appended. Ian
foo.patch
(text/x-diff, 1.1 KB)
Index: configure.ac
===================================================================
--- configure.ac (revision 152253)
+++ configure.ac (working copy)
@@ -2495,6 +2495,11 @@ case $enable_bootstrap in
;;
esac
+extra_host_libiberty_configure_flags=
+if test "$enable_gold" = "yes" -a "$enable_lto" = "yes"; then
+ extra_host_libiberty_configure_flags=--enable-shared
+fi
+
AC_MSG_CHECKING(for default BUILD_CONFIG)
AC_ARG_WITH([build-config],
Index: Makefile.def
===================================================================
--- Makefile.def (revision 152253)
+++ Makefile.def (working copy)
@@ -97,7 +97,8 @@ host_modules= { module= ld; bootstrap=tr
host_modules= { module= libcpp; bootstrap=true; };
host_modules= { module= libdecnumber; bootstrap=true; };
host_modules= { module= libgui; };
-host_modules= { module= libiberty; bootstrap=true; };
+host_modules= { module= libiberty; bootstrap=true;
+ extra_configure_flags='@extra_host_libiberty_configure_flags@'};
// We abuse missing to avoid installing anything for libiconv.
host_modules= { module= libiconv;
extra_configure_flags='--disable-shared';