From 00c714df398b63934540d95ce3792596f7a94a6c Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 18 Dec 2017 12:24:26 -0800 Subject: Pass -no-pie to GCC only if GCC defaults to PIE [BZ #22614] After --enable-static-pie is added to configure, libc_cv_pie_default is set to yes when either --enable-static-pie is used to configure glibc or GCC defaults to PIE. We should set no-pie-ldflag to -no-pie, which is supported on GCC 6 and later, only if GCC defaults to PIE, not when --enable-static-pie is used to configure glibc. Tested on x32 with --enable-static-pie using GCC 5 and without --enable-static-pie using GCC 7. [BZ #22614] * Makeconfig (no-pie-ldflag): Set to -no-pie only if $(cc-pie-default) == yes. * config.make.in (cc-pie-default): New. * configure.ac (libc_cv_pie_default): Renamed to ... (libc_cv_cc_pie_default): This. (libc_cv_pie_default): Set to $libc_cv_cc_pie_default. * configure: Regenerated. --- ChangeLog | 11 +++++++++++ Makeconfig | 4 +++- config.make.in | 1 + configure | 13 ++++++++----- configure.ac | 8 +++++--- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/ChangeLog b/ChangeLog index a46375fd56..e7d5d4b110 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2017-12-18 H.J. Lu + + [BZ #22614] + * Makeconfig (no-pie-ldflag): Set to -no-pie only if + $(cc-pie-default) == yes. + * config.make.in (cc-pie-default): New. + * configure.ac (libc_cv_pie_default): Renamed to ... + (libc_cv_cc_pie_default): This. + (libc_cv_pie_default): Set to $libc_cv_cc_pie_default. + * configure: Regenerated. + 2017-12-18 Florian Weimer [BZ #20204] diff --git a/Makeconfig b/Makeconfig index 99cc136bfa..80c498e33b 100644 --- a/Makeconfig +++ b/Makeconfig @@ -464,8 +464,10 @@ endif # Commands for linking programs with the C library. ifndef +link ifeq (yes,$(build-shared)) -ifeq (yes,$(build-pie-default)) +ifeq (yes,$(cc-pie-default)) no-pie-ldflag = -no-pie +endif +ifeq (yes,$(build-pie-default)) +link = $(+link-pie) +link-tests = $(+link-pie-tests) +link-printers-tests = $(+link-pie-printers-tests) diff --git a/config.make.in b/config.make.in index 04513dbb74..9e5e24b2c6 100644 --- a/config.make.in +++ b/config.make.in @@ -89,6 +89,7 @@ static-nss-crypt = @libc_cv_static_nss_crypt@ build-shared = @shared@ build-pic-default= @libc_cv_pic_default@ build-pie-default= @libc_cv_pie_default@ +cc-pie-default= @libc_cv_cc_pie_default@ build-profile = @profile@ build-static-nss = @static_nss@ cross-compiling = @cross_compiling@ diff --git a/configure b/configure index 9da9fb2736..7a8bd3f817 100755 --- a/configure +++ b/configure @@ -596,6 +596,7 @@ static_nss profile libc_cv_multidir libc_cv_pie_default +libc_cv_cc_pie_default libc_cv_pic_default shared static @@ -6748,22 +6749,24 @@ $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 : +if ${libc_cv_cc_pie_default+:} false; then : $as_echo_n "(cached) " >&6 else - libc_cv_pie_default=yes + libc_cv_cc_pie_default=yes cat > conftest.c <&5 1>&5"; then - libc_cv_pie_default=no + libc_cv_cc_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; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cc_pie_default" >&5 +$as_echo "$libc_cv_cc_pie_default" >&6; } +libc_cv_pie_default=$libc_cv_cc_pie_default + # Set the `multidir' variable by grabbing the variable from the compiler. diff --git a/configure.ac b/configure.ac index 8e4006f0a9..ca1282a6b3 100644 --- a/configure.ac +++ b/configure.ac @@ -1794,17 +1794,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 +AC_CACHE_CHECK([whether -fPIE is default], libc_cv_cc_pie_default, +[libc_cv_cc_pie_default=yes cat > conftest.c <&AS_MESSAGE_LOG_FD 1>&AS_MESSAGE_LOG_FD"; then - libc_cv_pie_default=no + libc_cv_cc_pie_default=no fi rm -f conftest.*]) +libc_cv_pie_default=$libc_cv_cc_pie_default +AC_SUBST(libc_cv_cc_pie_default) AC_SUBST(libc_cv_pie_default) # Set the `multidir' variable by grabbing the variable from the compiler. -- cgit 1.4.1