Explicitly remove .gnu.glibc-stub sections with objcopy when not using
authorRoland McGrath <roland@hack.frob.com>
Sat, 25 Jun 2011 07:06:42 +0000 (00:06 -0700)
committerRoland McGrath <roland@hack.frob.com>
Sat, 2 Jul 2011 22:21:27 +0000 (15:21 -0700)
linker script.

ChangeLog
Makerules
aclocal.m4
config.make.in
configure

index 77941b0..2ef1710 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,14 @@
 2011-07-02  Roland McGrath  <roland@hack.frob.com>
 
+       * Makerules [shlib-lds-flags empty]:
+       ($(common-objpfx)libc_pic.opts): New target.
+       ($(common-objpfx)libc_pic.os.clean): New target.
+       ($(common-objpfx)libc.so): Link it instead of libc_pic.os.
+
+       * config.make.in (OBJCOPY): New variable.
+       * aclocal.m4 (LIBC_PROG_BINUTILS): Substitute OBJCOPY too.
+       * configure: Regenerated.
+
        * config.make.in (use-default-link): New variable.
        * configure.in (use_default_link): Grok --with-default-link to set it.
        * configure: Regenerated.
index 23d9f1c..3234fc2 100644 (file)
--- a/Makerules
+++ b/Makerules
@@ -621,10 +621,27 @@ endif
 ifeq ($(elf),yes)
 $(common-objpfx)libc_pic.os: $(common-objpfx)libc_pic.a
        $(LINK.o) -nostdlib -nostartfiles -r -o $@ \
-       $(LDFLAGS-c_pic.os) -Wl,-d -Wl,--whole-archive $^
+       $(LDFLAGS-c_pic.os) -Wl,-d -Wl,--whole-archive $^ -o $@
+
+ifeq (,$(strip $(shlib-lds-flags)))
+# Generate a list of -R options to excise .gnu.glibc-stub.* sections.
+$(common-objpfx)libc_pic.opts: $(common-objpfx)libc_pic.os
+       $(OBJDUMP) -h $< | \
+       $(AWK) '$$2 ~ /\.gnu\.glibc-stub\./ { print "-R", $$2 }' \
+               > $@T
+       mv -f $@T $@
+# Apply those -R options.
+$(common-objpfx)libc_pic.os.clean: $(common-objpfx)libc_pic.opts \
+                                  $(common-objpfx)libc_pic.os
+       $(OBJCOPY) @$^ $@
+generated += libc_pic.opts libc_pic.os.clean
+
+libc_pic_clean := .clean
+endif
+
 # Use our own special initializer and finalizer files for libc.so.
 $(common-objpfx)libc.so: $(elfobjdir)/soinit.os \
-                        $(common-objpfx)libc_pic.os \
+                        $(common-objpfx)libc_pic.os$(libc_pic_clean) \
                         $(elfobjdir)/sofini.os \
                         $(elfobjdir)/interp.os $(elfobjdir)/ld.so \
                         $(shlib-lds)
index 6ad3c87..d226e77 100644 (file)
@@ -101,6 +101,8 @@ AR=`$CC -print-prog-name=ar`
 AC_SUBST(AR)
 OBJDUMP=`$CC -print-prog-name=objdump`
 AC_SUBST(OBJDUMP)
+OBJCOPY=`$CC -print-prog-name=objcopy`
+AC_SUBST(OBJCOPY)
 
 # Determine whether we are using GNU binutils.
 AC_CACHE_CHECK(whether $AS is GNU as, libc_cv_prog_as_gnu,
index 34842bf..6e876eb 100644 (file)
@@ -116,6 +116,7 @@ PWD_P = @PWD_P@
 BISON = @BISON@
 AUTOCONF = @AUTOCONF@
 OBJDUMP = @OBJDUMP@
+OBJCOPY = @OBJCOPY@
 
 # Installation tools.
 INSTALL = @INSTALL@
index e8ad775..936dbf1 100755 (executable)
--- a/configure
+++ b/configure
@@ -677,6 +677,7 @@ PWD_P
 LD
 AS
 MIG
+OBJCOPY
 OBJDUMP
 AR
 LN_S
@@ -4686,6 +4687,8 @@ AR=`$CC -print-prog-name=ar`
 
 OBJDUMP=`$CC -print-prog-name=objdump`
 
+OBJCOPY=`$CC -print-prog-name=objcopy`
+
 
 # Determine whether we are using GNU binutils.
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $AS is GNU as" >&5