diff --git a/ChangeLog b/ChangeLog index 77941b09eb..2ef1710c3c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2011-07-02 Roland McGrath + * 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. diff --git a/Makerules b/Makerules index 23d9f1c166..3234fc23ce 100644 --- 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) diff --git a/aclocal.m4 b/aclocal.m4 index 6ad3c87af2..d226e77a9e 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -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, diff --git a/config.make.in b/config.make.in index 34842bfcd6..6e876ebece 100644 --- a/config.make.in +++ b/config.make.in @@ -116,6 +116,7 @@ PWD_P = @PWD_P@ BISON = @BISON@ AUTOCONF = @AUTOCONF@ OBJDUMP = @OBJDUMP@ +OBJCOPY = @OBJCOPY@ # Installation tools. INSTALL = @INSTALL@ diff --git a/configure b/configure index e8ad775e4d..936dbf1a0a 100755 --- 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