Skip to content

Commit

Permalink
Add support for generated PIE link rules
Browse files Browse the repository at this point in the history
  • Loading branch information
Andreas Schwab authored and drepper committed May 14, 2011
1 parent 20030ae commit da62f81
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 95 deletions.
15 changes: 15 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,18 @@
2011-05-11 Andreas Schwab <[email protected]>

* Makeconfig (+link-pie): Indent.
* Rules (binaries-pie): Define if $(have-fpie) and
$(build-shared).
(binaries-shared): Also filter out $(binaries-pie).
($(addprefix $(objpfx),$(binaries-pie))): New rule.
* nscd/Makefile (others-pie): Add nscd.
(LDFLAGS-nscd): Set this instead of relro-LDFLAGS.
($(objpfx)nscd): Remove command override.
* login/Makefile (others-pie): Add pt_chown.
($(objpfx)pt_chown): Remove command override.
* elf/Makefile: Add PIE tests to tests and tests-pie variables and
remove command overrides.

2011-05-13 Ulrich Drepper <[email protected]>

* libio/tst_putwc.c: Fix error messages.
Expand Down
6 changes: 3 additions & 3 deletions Makeconfig
Original file line number Diff line number Diff line change
Expand Up @@ -450,9 +450,9 @@ ifndef +link-pie
$(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),$^) \
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.
Expand Down
18 changes: 16 additions & 2 deletions Rules
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 1991-2000,2002,2003,2004,2005,2006
# Copyright (C) 1991-2000,2002,2003,2004,2005,2006,2011
# Free Software Foundation, Inc.
# This file is part of the GNU C Library.

Expand Down Expand Up @@ -106,12 +106,19 @@ endif
ifeq ($(build-programs),yes)
binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
binaries-static = $(others-static) $(tests-static) $(xtests-static)
ifeq (yesyes,$(have-fpie)$(build-shared))
binaries-pie = $(others-pie) $(tests-pie) $(xtests-pie)
else
binaries-pie =
endif
else
binaries-all = $(tests) $(xtests) $(test-srcs)
binaries-static =
binaries-pie =
endif

binaries-shared = $(filter-out $(binaries-static), $(binaries-all))
binaries-shared = $(filter-out $(binaries-pie) $(binaries-static), \
$(binaries-all))

ifneq "$(strip $(binaries-shared))" ""
$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
Expand All @@ -120,6 +127,13 @@ $(addprefix $(objpfx),$(binaries-shared)): %: %.o \
$(+link)
endif

ifneq "$(strip $(binaries-pie))" ""
$(addprefix $(objpfx),$(binaries-pie)): %: %.o \
$(sort $(filter $(common-objpfx)lib%,$(link-libc))) \
$(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit)
$(+link-pie)
endif

ifneq "$(strip $(binaries-static))" ""
$(addprefix $(objpfx),$(binaries-static)): %: %.o \
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
Expand Down
90 changes: 10 additions & 80 deletions elf/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -213,9 +213,6 @@ ifeq (x86_64,$(config-machine))
tests += tst-audit3 tst-audit4 tst-audit5 tst-audit6 tst-audit7
endif
endif
ifeq (yesyes,$(have-fpie)$(build-shared))
tests: $(objpfx)tst-pie1.out
endif
tests: $(objpfx)tst-leaks1-mem $(objpfx)noload-mem
tlsmod17a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
tlsmod18a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Expand Down Expand Up @@ -268,8 +265,8 @@ modules-names += tst-array2dep tst-array5dep
endif
ifeq (yesyes,$(have-fpie)$(build-shared))
modules-names += tst-piemod1
extra-test-objs += tst-pie1.o
test-extras += tst-pie1
tests += tst-pie1
tests-pie += tst-pie1
endif
ifeq (x86_64,$(config-machine))
modules-names += tst-auditmod3a tst-auditmod3b \
Expand Down Expand Up @@ -306,9 +303,8 @@ test-extras += $(ifunc-test-modules)
ifeq (yes,$(have-fpie))
ifunc-pie-tests = ifuncmain1pie ifuncmain1vispie ifuncmain1staticpie \
ifuncmain5pie ifuncmain6pie ifuncmain7pie
tests: $(patsubst %,$(objpfx)%.out, $(ifunc-pie-tests))
extra-test-objs += $(ifunc-pie-tests:=.o)
test-extras += $(ifunc-pie-tests)
tests += $(ifunc-pie-tests)
tests-pie += $(ifunc-pie-tests)
endif
modules-names += ifuncmod1 ifuncmod3 ifuncmod5 ifuncmod6
endif
Expand Down Expand Up @@ -911,19 +907,9 @@ $(objpfx)tst-array5-static.out: $(objpfx)tst-array5-static
$(objpfx)tst-array5-static > $@
cmp $@ tst-array5-static.exp > /dev/null

ifeq (yesyes,$(have-fpie)$(build-shared))
CFLAGS-tst-pie1.c += $(pie-ccflag)

$(objpfx)tst-pie1.out: $(objpfx)tst-pie1
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$< > $@

$(objpfx)tst-pie1: $(objpfx)tst-pie1.o $(objpfx)tst-piemod1.so
$(+link-pie)

generated += tst-pie1 tst-pie1.out tst-pie1.o
endif
$(objpfx)tst-pie1: $(objpfx)tst-piemod1.so

check-textrel-CFLAGS = -O -Wall -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
$(objpfx)check-textrel: check-textrel.c
Expand Down Expand Up @@ -1086,74 +1072,18 @@ CFLAGS-ifuncmain7picstatic.c += $(pic-ccflag)

LDFLAGS-ifuncmain3 = -Wl,-export-dynamic

ifeq (yesyes,$(have-fpie)$(build-shared))
CFLAGS-ifuncmain1pie.c += $(pie-ccflag)
CFLAGS-ifuncmain1vispie.c += $(pie-ccflag)
CFLAGS-ifuncmain1staticpie.c += $(pie-ccflag)
CFLAGS-ifuncmain5pie.c += $(pie-ccflag)
CFLAGS-ifuncmain6pie.c += $(pie-ccflag)
CFLAGS-ifuncmain7pie.c += $(pie-ccflag)

$(objpfx)ifuncmain1pie.out: $(objpfx)ifuncmain1pie
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$< > $@

$(objpfx)ifuncmain1pie: $(objpfx)ifuncmain1pie.o $(objpfx)ifuncmod1.so
$(+link-pie)

generated += ifuncmain1pie ifuncmain1pie.out

$(objpfx)ifuncmain1staticpie.out: $(objpfx)ifuncmain1staticpie
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$< > $@

$(objpfx)ifuncmain1staticpie: $(objpfx)ifuncmain1staticpie.o $(objpfx)ifuncdep1pic.o
$(+link-pie)

generated += ifuncmain1staticpie ifuncmain1staticpie.out

$(objpfx)ifuncmain1vispie.out: $(objpfx)ifuncmain1vispie
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$< > $@

$(objpfx)ifuncmain1vispie: $(objpfx)ifuncmain1vispie.o $(objpfx)ifuncmod1.so
$(+link-pie)

generated += ifuncmain1vispie ifuncmain1vispie.out

$(objpfx)ifuncmain5pie.out: $(objpfx)ifuncmain5pie
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$< > $@

$(objpfx)ifuncmain5pie: $(objpfx)ifuncmain5pie.o $(objpfx)ifuncmod5.so
$(+link-pie)

generated += ifuncmain5pie ifuncmain5pie.out

$(objpfx)ifuncmain6pie.out: $(objpfx)ifuncmain6pie
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$< > $@

$(objpfx)ifuncmain6pie: $(objpfx)ifuncmain6pie.o $(objpfx)ifuncmod6.so
$(+link-pie)

generated += ifuncmain6pie ifuncmain6pie.out

$(objpfx)ifuncmain7pie.out: $(objpfx)ifuncmain7pie
$(elf-objpfx)$(rtld-installed-name) \
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
$< > $@

$(objpfx)ifuncmain7pie: $(objpfx)ifuncmain7pie.o
$(+link-pie)

generated += ifuncmain7pie ifuncmain7pie.out
endif
$(objpfx)ifuncmain1pie: $(objpfx)ifuncmod1.so
$(objpfx)ifuncmain1staticpie: $(objpfx)ifuncdep1pic.o
$(objpfx)ifuncmain1vispie: $(objpfx)ifuncmod1.so
$(objpfx)ifuncmain5pie: $(objpfx)ifuncmod5.so
$(objpfx)ifuncmain6pie: $(objpfx)ifuncmod6.so

$(objpfx)ifuncmain1: $(addprefix $(objpfx),ifuncmod1.so)
$(objpfx)ifuncmain1pic: $(addprefix $(objpfx),ifuncmod1.so)
Expand Down
4 changes: 1 addition & 3 deletions login/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ routines := getutent getutent_r getutid getutline getutid_r getutline_r \
CFLAGS-grantpt.c = -DLIBEXECDIR='"$(libexecdir)"'

others = utmpdump pt_chown
others-pie = pt_chown
install-others-programs = $(inst_libexecdir)/pt_chown

distribute := utmp-private.h utmp-equal.h pty-private.h
Expand Down Expand Up @@ -67,9 +68,6 @@ CFLAGS-pt_chown.c = $(pt_chown-cflags)
LDLIBS-pt_chown = $(libcap)
ifeq (yesyes,$(have-fpie)$(build-shared))
LDFLAGS-pt_chown = -Wl,-z,now

$(objpfx)pt_chown: $(objpfx)pt_chown.o
$(+link-pie)
endif

# pt_chown needs to be setuid root.
Expand Down
10 changes: 3 additions & 7 deletions nscd/Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (C) 1998,2000,2002-2009 Free Software Foundation, Inc.
# Copyright (C) 1998,2000,2002-2009,2011 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
Expand Down Expand Up @@ -38,9 +38,8 @@ nscd-modules := nscd connections pwdcache getpwnam_r getpwuid_r grpcache \

ifeq ($(have-thread-library),yes)

ifneq (yesyes,$(have-fpie)$(build-shared))
others += nscd
endif
others-pie += nscd
install-sbin := nscd

extra-objs := $(nscd-modules:=.o)
Expand Down Expand Up @@ -124,10 +123,7 @@ CFLAGS-getsrvbypt_r.c += $(nscd-cflags)
CFLAGS-res_hconf.c += $(nscd-cflags)

ifeq (yesyes,$(have-fpie)$(build-shared))
relro-LDFLAGS += -Wl,-z,now

$(objpfx)nscd: $(addprefix $(objpfx),$(nscd-modules:=.o))
$(+link-pie)
LDFLAGS-nscd = -Wl,-z,now
endif

# This makes sure -DNOT_IN_libc is passed for all these modules.
Expand Down

0 comments on commit da62f81

Please sign in to comment.