]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Consolidate PIE linking Makefile rules.
authorH.J. Lu <hongjiu.lu@intel.com>
Tue, 16 Jun 2009 16:19:59 +0000 (09:19 -0700)
committerUlrich Drepper <drepper@redhat.com>
Tue, 16 Jun 2009 16:19:59 +0000 (09:19 -0700)
ChangeLog
Makeconfig
elf/Makefile
nscd/Makefile

index a97b8bdb1ad422a28b6b90d963983bd35a4851dd..020b25f74ead91be3030301ab95163c0acbbbe2e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-06-02  H.J. Lu  <hongjiu.lu@intel.com>
+
+       * Makeconfig (+link-pie): Define.
+       (+prectorS): Define.
+       (+postctorS): Define.
+       * elf/Makefile ($(objpfx)tst-pie1): Use $(+link-pie).
+       * nscd/Makefile ($(objpfx)nscd): Likewise.
+
 2009-04-22  Ryan S. Arnold  <rsa@us.ibm.com>
 
        [BZ #10107]
index 875fb679aa31bdb17a2143aa65c039c32f790da4..9f134cc137771db7bc6ea8d0c5784387b6333eb5 100644 (file)
@@ -434,6 +434,19 @@ ifndef +link
                           $(common-objpfx)libc% $(+postinit),$^) \
              $(link-extra-libs) $(link-libc) $(+postctor) $(+postinit)
 endif
+# Command for linking PIE programs with the C library.
+ifndef +link-pie
++link-pie = $(CC) -pie -Wl,-O1 -nostdlib -nostartfiles -o $@ \
+            $(sysdep-LDFLAGS) $(config-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \
+            $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \
+            $(addprefix $(csu-objpfx),S$(start-installed-name)) \
+            $(+preinit) $(+prectorS) \
+            $(filter-out $(addprefix $(csu-objpfx),start.o \
+            S$(start-installed-name))\
+            $(+preinit) $(link-extra-libs) \
+            $(common-objpfx)libc% $(+postinit),$^) \
+            $(link-extra-libs) $(link-libc) $(+postctorS) $(+postinit)
+endif
 # Command for statically linking programs with the C library.
 ifndef +link-static
 +link-static = $(CC) -nostdlib -nostartfiles -static -o $@ \
@@ -538,6 +551,9 @@ ifeq ($(elf),yes)
 +postinit = $(addprefix $(csu-objpfx),crtn.o)
 +prector = `$(CC) --print-file-name=crtbegin.o`
 +postctor = `$(CC) --print-file-name=crtend.o`
+# Variants of the two previous definitions for linking PIE programs.
++prectorS = `$(CC) --print-file-name=crtbeginS.o`
++postctorS = `$(CC) --print-file-name=crtendS.o`
 +interp = $(addprefix $(elf-objpfx),interp.os)
 endif
 csu-objpfx = $(common-objpfx)csu/
index 6bcbb5142fbd4eb13853d55b88363009cd85ad0a..5973690be9732276b5a02bccd7825ef8d60577f0 100644 (file)
@@ -852,14 +852,7 @@ $(objpfx)tst-pie1.out: $(objpfx)tst-pie1
          $< > $@
 
 $(objpfx)tst-pie1: $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so
-       $(LINK.o) -pie -Wl,-O1 \
-         $(sysdep-LDFLAGS) $(config-LDFLAGS) \
-         $(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
-         $(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
-         $(LDFLAGS) $(LDFLAGS-$(@F)) \
-         -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
-         -o $@ $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so \
-         $(common-objpfx)libc_nonshared.a
+       $(+link-pie)
 
 generated += tst-pie1 tst-pie1.out tst-pie1.o
 endif
index 364ddfe8dde8df779ee53f9abba7cbe0c76de8d0..4abae8c6616c7636e97a7b1abaa4278e8fabb7b5 100644 (file)
@@ -1,5 +1,4 @@
-# Copyright (C) 1998,2000,2002,2003,2004,2005,2006,2007,2008
-#      Free Software Foundation, Inc.
+# Copyright (C) 1998,2000,2002-2009 Free Software Foundation, Inc.
 # This file is part of the GNU C Library.
 
 # The GNU C Library is free software; you can redistribute it and/or
@@ -128,13 +127,7 @@ ifeq (yesyes,$(have-fpie)$(build-shared))
 relro-LDFLAGS += -Wl,-z,now
 
 $(objpfx)nscd: $(addprefix $(objpfx),$(nscd-modules:=.o))
-       $(LINK.o) -pie -Wl,-O1 $(nscd-cflags) \
-         $(sysdep-LDFLAGS) $(config-LDFLAGS) $(relro-LDFLAGS) \
-         $(extra-B-$(@F:lib%.so=%).so) -B$(csu-objpfx) \
-         $(extra-B-$(@F:lib%.so=%).so) $(load-map-file) \
-         $(LDFLAGS) $(LDFLAGS-$(@F)) \
-         -L$(subst :, -L,$(rpath-link)) -Wl,-rpath-link=$(rpath-link) \
-         -o $@ $^ $(LDLIBS-nscd) $(common-objpfx)libc_nonshared.a
+       $(+link-pie)
 endif
 
 # This makes sure -DNOT_IN_libc is passed for all these modules.