diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2015-01-14 06:29:04 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2015-03-07 05:51:18 -0800 |
commit | 1eac409fb6e772a505d45e65b413be1e258dac94 (patch) | |
tree | c82f6b5d55a2c23dda7c69ad90b38582d4320e62 | |
parent | 75adf430d2d7ee16eaf3166680de83b498444720 (diff) | |
download | glibc-1eac409fb6e772a505d45e65b413be1e258dac94.tar.gz glibc-1eac409fb6e772a505d45e65b413be1e258dac94.tar.xz glibc-1eac409fb6e772a505d45e65b413be1e258dac94.zip |
Support compilers defaulting to PIE
If PIE is the default, we need to build programs as PIE. [BZ #17841] * Makeconfig (no-pie-ldflag): New. (+link): Set to $(+link-pie) if default to PIE. (+link-tests): Set to $(+link-pie-tests) if default to PIE. * config.make.in (build-pie-default): New. * configure.ac (libc_cv_pie_default): New. Set to yes if -fPIE is default. AC_SUBST. * configure: Regenerated. * elf/Makefile (LDFLAGS-tst-dlopen-aout): New.
-rw-r--r-- | Makeconfig | 6 | ||||
-rw-r--r-- | config.make.in | 1 | ||||
-rwxr-xr-x | configure | 21 | ||||
-rw-r--r-- | configure.ac | 13 | ||||
-rw-r--r-- | elf/Makefile | 1 |
5 files changed, 42 insertions, 0 deletions
diff --git a/Makeconfig b/Makeconfig index 751e9ffa32..8e4c360c70 100644 --- a/Makeconfig +++ b/Makeconfig @@ -425,6 +425,11 @@ endif # Commands for linking programs with the C library. ifndef +link ifeq (yes,$(build-shared)) +ifeq (yes,$(build-pie-default)) +no-pie-ldflag = -no-pie ++link = $(+link-pie) ++link-tests = $(+link-pie-tests) +else +link-before-libc = $(CC) -nostdlib -nostartfiles -o $@ \ $(sysdep-LDFLAGS) $(LDFLAGS) $(LDFLAGS-$(@F)) \ $(combreloc-LDFLAGS) $(relro-LDFLAGS) $(hashstyle-LDFLAGS) \ @@ -440,6 +445,7 @@ ifeq (yes,$(build-shared)) $(+link-after-libc) +link-tests = $(+link-before-libc) $(rtld-tests-LDFLAGS) \ $(link-libc-tests) $(+link-after-libc) +endif else +link = $(+link-static) +link-tests = $(+link-static-tests) diff --git a/config.make.in b/config.make.in index ad4dd30607..635932f2c3 100644 --- a/config.make.in +++ b/config.make.in @@ -81,6 +81,7 @@ nss-crypt = @libc_cv_nss_crypt@ # Configuration options. build-shared = @shared@ build-pic-default= @libc_cv_pic_default@ +build-pie-default= @libc_cv_pie_default@ build-profile = @profile@ build-static-nss = @static_nss@ add-ons = @add_ons@ diff --git a/configure b/configure index ce0c6a01f1..3f5d20733a 100755 --- a/configure +++ b/configure @@ -596,6 +596,7 @@ mach_interface_list DEFINES static_nss profile +libc_cv_pie_default libc_cv_pic_default shared static @@ -7157,6 +7158,26 @@ fi $as_echo "$libc_cv_pic_default" >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fPIE is default" >&5 +$as_echo_n "checking whether -fPIE is default... " >&6; } +if ${libc_cv_pie_default+:} false; then : + $as_echo_n "(cached) " >&6 +else + libc_cv_pie_default=yes +cat > conftest.c <<EOF +#if defined __PIE__ || defined __pie__ || defined PIE || defined pie +# error PIE is default. +#endif +EOF +if eval "${CC-cc} -S conftest.c 2>&5 1>&5"; then + libc_cv_pie_default=no +fi +rm -f conftest.* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_pie_default" >&5 +$as_echo "$libc_cv_pie_default" >&6; } + + diff --git a/configure.ac b/configure.ac index d89aaf0cdf..cb37a83840 100644 --- a/configure.ac +++ b/configure.ac @@ -2019,6 +2019,19 @@ fi rm -f conftest.*]) AC_SUBST(libc_cv_pic_default) +AC_CACHE_CHECK([whether -fPIE is default], libc_cv_pie_default, +[libc_cv_pie_default=yes +cat > conftest.c <<EOF +#if defined __PIE__ || defined __pie__ || defined PIE || defined pie +# error PIE is default. +#endif +EOF +if eval "${CC-cc} -S conftest.c 2>&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then + libc_cv_pie_default=no +fi +rm -f conftest.*]) +AC_SUBST(libc_cv_pie_default) + AC_SUBST(profile) AC_SUBST(static_nss) diff --git a/elf/Makefile b/elf/Makefile index e5b142c7c6..fd2c3cf3b6 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -150,6 +150,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \ # reldep9 ifeq ($(build-hardcoded-path-in-tests),yes) tests += tst-dlopen-aout +LDFLAGS-tst-dlopen-aout = $(no-pie-ldflag) endif test-srcs = tst-pathopt selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null) |