summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2017-12-18 12:24:26 -0800
committerH.J. Lu <hjl.tools@gmail.com>2017-12-18 12:24:38 -0800
commit00c714df398b63934540d95ce3792596f7a94a6c (patch)
treef96ed5735a44f5a6afff6efafe5dc86f1b93fecb
parent8e1472d2c1e25e6eabc2059170731365f6d5b3d1 (diff)
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.
-rw-r--r--ChangeLog11
-rw-r--r--Makeconfig4
-rw-r--r--config.make.in1
-rwxr-xr-xconfigure13
-rw-r--r--configure.ac8
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 <hongjiu.lu@intel.com>
+
+ [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 <fweimer@redhat.com>
[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 <<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
+ 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 <<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
+ 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.