summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--Makerules21
-rw-r--r--aclocal.m42
-rw-r--r--config.make.in1
-rwxr-xr-xconfigure3
5 files changed, 34 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 77941b09eb..2ef1710c3c 100644
--- 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.
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