mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-08 14:20:07 +00:00
Add support for generated PIE link rules
This commit is contained in:
parent
20030ae6d7
commit
da62f81bdd
15
ChangeLog
15
ChangeLog
@ -1,3 +1,18 @@
|
|||||||
|
2011-05-11 Andreas Schwab <schwab@redhat.com>
|
||||||
|
|
||||||
|
* 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 <drepper@gmail.com>
|
2011-05-13 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
* libio/tst_putwc.c: Fix error messages.
|
* libio/tst_putwc.c: Fix error messages.
|
||||||
|
@ -450,9 +450,9 @@ ifndef +link-pie
|
|||||||
$(addprefix $(csu-objpfx),S$(start-installed-name)) \
|
$(addprefix $(csu-objpfx),S$(start-installed-name)) \
|
||||||
$(+preinit) $(+prectorS) \
|
$(+preinit) $(+prectorS) \
|
||||||
$(filter-out $(addprefix $(csu-objpfx),start.o \
|
$(filter-out $(addprefix $(csu-objpfx),start.o \
|
||||||
S$(start-installed-name))\
|
S$(start-installed-name))\
|
||||||
$(+preinit) $(link-extra-libs) \
|
$(+preinit) $(link-extra-libs) \
|
||||||
$(common-objpfx)libc% $(+postinit),$^) \
|
$(common-objpfx)libc% $(+postinit),$^) \
|
||||||
$(link-extra-libs) $(link-libc) $(+postctorS) $(+postinit)
|
$(link-extra-libs) $(link-libc) $(+postctorS) $(+postinit)
|
||||||
endif
|
endif
|
||||||
# Command for statically linking programs with the C library.
|
# Command for statically linking programs with the C library.
|
||||||
|
18
Rules
18
Rules
@ -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.
|
# Free Software Foundation, Inc.
|
||||||
# This file is part of the GNU C Library.
|
# This file is part of the GNU C Library.
|
||||||
|
|
||||||
@ -106,12 +106,19 @@ endif
|
|||||||
ifeq ($(build-programs),yes)
|
ifeq ($(build-programs),yes)
|
||||||
binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
|
binaries-all = $(others) $(sysdep-others) $(tests) $(xtests) $(test-srcs)
|
||||||
binaries-static = $(others-static) $(tests-static) $(xtests-static)
|
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
|
else
|
||||||
binaries-all = $(tests) $(xtests) $(test-srcs)
|
binaries-all = $(tests) $(xtests) $(test-srcs)
|
||||||
binaries-static =
|
binaries-static =
|
||||||
|
binaries-pie =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
binaries-shared = $(filter-out $(binaries-static), $(binaries-all))
|
binaries-shared = $(filter-out $(binaries-pie) $(binaries-static), \
|
||||||
|
$(binaries-all))
|
||||||
|
|
||||||
ifneq "$(strip $(binaries-shared))" ""
|
ifneq "$(strip $(binaries-shared))" ""
|
||||||
$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
$(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
||||||
@ -120,6 +127,13 @@ $(addprefix $(objpfx),$(binaries-shared)): %: %.o \
|
|||||||
$(+link)
|
$(+link)
|
||||||
endif
|
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))" ""
|
ifneq "$(strip $(binaries-static))" ""
|
||||||
$(addprefix $(objpfx),$(binaries-static)): %: %.o \
|
$(addprefix $(objpfx),$(binaries-static)): %: %.o \
|
||||||
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
|
$(sort $(filter $(common-objpfx)lib%,$(link-libc-static))) \
|
||||||
|
90
elf/Makefile
90
elf/Makefile
@ -213,9 +213,6 @@ ifeq (x86_64,$(config-machine))
|
|||||||
tests += tst-audit3 tst-audit4 tst-audit5 tst-audit6 tst-audit7
|
tests += tst-audit3 tst-audit4 tst-audit5 tst-audit6 tst-audit7
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
|
||||||
tests: $(objpfx)tst-pie1.out
|
|
||||||
endif
|
|
||||||
tests: $(objpfx)tst-leaks1-mem $(objpfx)noload-mem
|
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
|
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
|
tlsmod18a-suffixes = 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
||||||
@ -268,8 +265,8 @@ modules-names += tst-array2dep tst-array5dep
|
|||||||
endif
|
endif
|
||||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||||
modules-names += tst-piemod1
|
modules-names += tst-piemod1
|
||||||
extra-test-objs += tst-pie1.o
|
tests += tst-pie1
|
||||||
test-extras += tst-pie1
|
tests-pie += tst-pie1
|
||||||
endif
|
endif
|
||||||
ifeq (x86_64,$(config-machine))
|
ifeq (x86_64,$(config-machine))
|
||||||
modules-names += tst-auditmod3a tst-auditmod3b \
|
modules-names += tst-auditmod3a tst-auditmod3b \
|
||||||
@ -306,9 +303,8 @@ test-extras += $(ifunc-test-modules)
|
|||||||
ifeq (yes,$(have-fpie))
|
ifeq (yes,$(have-fpie))
|
||||||
ifunc-pie-tests = ifuncmain1pie ifuncmain1vispie ifuncmain1staticpie \
|
ifunc-pie-tests = ifuncmain1pie ifuncmain1vispie ifuncmain1staticpie \
|
||||||
ifuncmain5pie ifuncmain6pie ifuncmain7pie
|
ifuncmain5pie ifuncmain6pie ifuncmain7pie
|
||||||
tests: $(patsubst %,$(objpfx)%.out, $(ifunc-pie-tests))
|
tests += $(ifunc-pie-tests)
|
||||||
extra-test-objs += $(ifunc-pie-tests:=.o)
|
tests-pie += $(ifunc-pie-tests)
|
||||||
test-extras += $(ifunc-pie-tests)
|
|
||||||
endif
|
endif
|
||||||
modules-names += ifuncmod1 ifuncmod3 ifuncmod5 ifuncmod6
|
modules-names += ifuncmod1 ifuncmod3 ifuncmod5 ifuncmod6
|
||||||
endif
|
endif
|
||||||
@ -911,19 +907,9 @@ $(objpfx)tst-array5-static.out: $(objpfx)tst-array5-static
|
|||||||
$(objpfx)tst-array5-static > $@
|
$(objpfx)tst-array5-static > $@
|
||||||
cmp $@ tst-array5-static.exp > /dev/null
|
cmp $@ tst-array5-static.exp > /dev/null
|
||||||
|
|
||||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
|
||||||
CFLAGS-tst-pie1.c += $(pie-ccflag)
|
CFLAGS-tst-pie1.c += $(pie-ccflag)
|
||||||
|
|
||||||
$(objpfx)tst-pie1.out: $(objpfx)tst-pie1
|
$(objpfx)tst-pie1: $(objpfx)tst-piemod1.so
|
||||||
$(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
|
|
||||||
|
|
||||||
check-textrel-CFLAGS = -O -Wall -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
|
check-textrel-CFLAGS = -O -Wall -D_XOPEN_SOURCE=600 -D_BSD_SOURCE
|
||||||
$(objpfx)check-textrel: check-textrel.c
|
$(objpfx)check-textrel: check-textrel.c
|
||||||
@ -1086,7 +1072,6 @@ CFLAGS-ifuncmain7picstatic.c += $(pic-ccflag)
|
|||||||
|
|
||||||
LDFLAGS-ifuncmain3 = -Wl,-export-dynamic
|
LDFLAGS-ifuncmain3 = -Wl,-export-dynamic
|
||||||
|
|
||||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
|
||||||
CFLAGS-ifuncmain1pie.c += $(pie-ccflag)
|
CFLAGS-ifuncmain1pie.c += $(pie-ccflag)
|
||||||
CFLAGS-ifuncmain1vispie.c += $(pie-ccflag)
|
CFLAGS-ifuncmain1vispie.c += $(pie-ccflag)
|
||||||
CFLAGS-ifuncmain1staticpie.c += $(pie-ccflag)
|
CFLAGS-ifuncmain1staticpie.c += $(pie-ccflag)
|
||||||
@ -1094,66 +1079,11 @@ CFLAGS-ifuncmain5pie.c += $(pie-ccflag)
|
|||||||
CFLAGS-ifuncmain6pie.c += $(pie-ccflag)
|
CFLAGS-ifuncmain6pie.c += $(pie-ccflag)
|
||||||
CFLAGS-ifuncmain7pie.c += $(pie-ccflag)
|
CFLAGS-ifuncmain7pie.c += $(pie-ccflag)
|
||||||
|
|
||||||
$(objpfx)ifuncmain1pie.out: $(objpfx)ifuncmain1pie
|
$(objpfx)ifuncmain1pie: $(objpfx)ifuncmod1.so
|
||||||
$(elf-objpfx)$(rtld-installed-name) \
|
$(objpfx)ifuncmain1staticpie: $(objpfx)ifuncdep1pic.o
|
||||||
--library-path $(rpath-link)$(patsubst %,:%,$(sysdep-library-path)) \
|
$(objpfx)ifuncmain1vispie: $(objpfx)ifuncmod1.so
|
||||||
$< > $@
|
$(objpfx)ifuncmain5pie: $(objpfx)ifuncmod5.so
|
||||||
|
$(objpfx)ifuncmain6pie: $(objpfx)ifuncmod6.so
|
||||||
$(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)ifuncmain1: $(addprefix $(objpfx),ifuncmod1.so)
|
$(objpfx)ifuncmain1: $(addprefix $(objpfx),ifuncmod1.so)
|
||||||
$(objpfx)ifuncmain1pic: $(addprefix $(objpfx),ifuncmod1.so)
|
$(objpfx)ifuncmain1pic: $(addprefix $(objpfx),ifuncmod1.so)
|
||||||
|
@ -30,6 +30,7 @@ routines := getutent getutent_r getutid getutline getutid_r getutline_r \
|
|||||||
CFLAGS-grantpt.c = -DLIBEXECDIR='"$(libexecdir)"'
|
CFLAGS-grantpt.c = -DLIBEXECDIR='"$(libexecdir)"'
|
||||||
|
|
||||||
others = utmpdump pt_chown
|
others = utmpdump pt_chown
|
||||||
|
others-pie = pt_chown
|
||||||
install-others-programs = $(inst_libexecdir)/pt_chown
|
install-others-programs = $(inst_libexecdir)/pt_chown
|
||||||
|
|
||||||
distribute := utmp-private.h utmp-equal.h pty-private.h
|
distribute := utmp-private.h utmp-equal.h pty-private.h
|
||||||
@ -67,9 +68,6 @@ CFLAGS-pt_chown.c = $(pt_chown-cflags)
|
|||||||
LDLIBS-pt_chown = $(libcap)
|
LDLIBS-pt_chown = $(libcap)
|
||||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||||
LDFLAGS-pt_chown = -Wl,-z,now
|
LDFLAGS-pt_chown = -Wl,-z,now
|
||||||
|
|
||||||
$(objpfx)pt_chown: $(objpfx)pt_chown.o
|
|
||||||
$(+link-pie)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# pt_chown needs to be setuid root.
|
# pt_chown needs to be setuid root.
|
||||||
|
@ -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.
|
# This file is part of the GNU C Library.
|
||||||
|
|
||||||
# The GNU C Library is free software; you can redistribute it and/or
|
# The GNU C Library is free software; you can redistribute it and/or
|
||||||
@ -38,9 +38,8 @@ nscd-modules := nscd connections pwdcache getpwnam_r getpwuid_r grpcache \
|
|||||||
|
|
||||||
ifeq ($(have-thread-library),yes)
|
ifeq ($(have-thread-library),yes)
|
||||||
|
|
||||||
ifneq (yesyes,$(have-fpie)$(build-shared))
|
|
||||||
others += nscd
|
others += nscd
|
||||||
endif
|
others-pie += nscd
|
||||||
install-sbin := nscd
|
install-sbin := nscd
|
||||||
|
|
||||||
extra-objs := $(nscd-modules:=.o)
|
extra-objs := $(nscd-modules:=.o)
|
||||||
@ -124,10 +123,7 @@ CFLAGS-getsrvbypt_r.c += $(nscd-cflags)
|
|||||||
CFLAGS-res_hconf.c += $(nscd-cflags)
|
CFLAGS-res_hconf.c += $(nscd-cflags)
|
||||||
|
|
||||||
ifeq (yesyes,$(have-fpie)$(build-shared))
|
ifeq (yesyes,$(have-fpie)$(build-shared))
|
||||||
relro-LDFLAGS += -Wl,-z,now
|
LDFLAGS-nscd = -Wl,-z,now
|
||||||
|
|
||||||
$(objpfx)nscd: $(addprefix $(objpfx),$(nscd-modules:=.o))
|
|
||||||
$(+link-pie)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# This makes sure -DNOT_IN_libc is passed for all these modules.
|
# This makes sure -DNOT_IN_libc is passed for all these modules.
|
||||||
|
Loading…
Reference in New Issue
Block a user