Add +link-pie?

H.J. Lu hjl.tools@gmail.com
Tue Jun 2 19:39:00 GMT 2009


On Tue, Jun 2, 2009 at 10:58 AM, Roland McGrath <roland@redhat.com> wrote:
>> We have +link and +link-static. But we don't have +link-pie.
>> We have to duplicate the same rule for PIE. I can submit
>> a patch to add +link-pie.
>
> If it consolidates copies, that's good.
>

Here is a patch.

-- 
H.J.
---
2009-06-02  H.J. Lu  <hongjiu.lu@intel.com>

	* Makeconfig (+link-pie): New.
	(prectorS): Likewise.
	(postctorS): Likewise.

	* elf/Makefile ($(objpfx)tst-pie1): Use $(+link-pie).
	* nscd/Makefile ($(objpfx)nscd): Likewise.
-------------- next part --------------
2009-06-02  H.J. Lu  <hongjiu.lu@intel.com>

	* Makeconfig (+link-pie): New.
	(prectorS): Likewise.
	(postctorS): Likewise.

	* elf/Makefile ($(objpfx)tst-pie1): Use $(+link-pie).
	* nscd/Makefile ($(objpfx)nscd): Likewise.
 
diff --git a/Makeconfig b/Makeconfig
index 875fb67..7eaacc3 100644
--- a/Makeconfig
+++ b/Makeconfig
@@ -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,8 @@ ifeq ($(elf),yes)
 +postinit = $(addprefix $(csu-objpfx),crtn.o)
 +prector = `$(CC) --print-file-name=crtbegin.o`
 +postctor = `$(CC) --print-file-name=crtend.o`
++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/
diff --git a/elf/Makefile b/elf/Makefile
index 94b9d06..19f4b5f 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -826,14 +826,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
diff --git a/nscd/Makefile b/nscd/Makefile
index 364ddfe..ca83dad 100644
--- a/nscd/Makefile
+++ b/nscd/Makefile
@@ -128,13 +128,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.


More information about the Libc-alpha mailing list