about summary refs log tree commit diff
path: root/configure
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2022-01-15 14:23:20 -0800
committerH.J. Lu <hjl.tools@gmail.com>2022-01-17 07:27:25 -0800
commitded3aeb2025c6686956eb10125aacb9a6e7c298e (patch)
tree66efc42730938c9345eae35648db5da733c23e49 /configure
parent9fe6f6363886aae6b2b210cae3ed1f5921299083 (diff)
downloadglibc-ded3aeb2025c6686956eb10125aacb9a6e7c298e.tar.gz
glibc-ded3aeb2025c6686956eb10125aacb9a6e7c298e.tar.xz
glibc-ded3aeb2025c6686956eb10125aacb9a6e7c298e.zip
Properly handle --disable-default-pie [BZ #28780]
When --disable-default-pie is used, all glibc programs and the testsuite
should be built as position dependent executables (non-PIE), regardless
if the build compiler supports PIE or static PIE.

When --disable-default-pie is used, don't build static PIE by default.

This fixes BZ #28780.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Diffstat (limited to 'configure')
-rwxr-xr-xconfigure47
1 files changed, 29 insertions, 18 deletions
diff --git a/configure b/configure
index 6a7e5c6164..8e5bee775a 100755
--- a/configure
+++ b/configure
@@ -7035,32 +7035,35 @@ cc-pie-default = $libc_cv_cc_pie_default"
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can build programs as PIE" >&5
 $as_echo_n "checking if we can build programs as PIE... " >&6; }
-if test "x$default_pie" != xno; then
-  # Disable build-pie-default if target does not support it.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifdef PIE_UNSUPPORTED
 # error PIE is not supported
 #endif
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  libc_cv_pie_default=yes
+  libc_cv_pie_supported=yes
 else
-  libc_cv_pie_default=no
+  libc_cv_pie_supported=no
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_pie_supported" >&5
+$as_echo "$libc_cv_pie_supported" >&6; }
+# Disable build-pie-default if target does not support it or glibc is
+# configured with --disable-default-pie.
+if test "x$default_pie" = xno; then
+  build_pie_default=no
+else
+  build_pie_default=$libc_cv_pie_supported
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_pie_default" >&5
-$as_echo "$libc_cv_pie_default" >&6; }
 config_vars="$config_vars
-build-pie-default = $libc_cv_pie_default"
+build-pie-default = $build_pie_default"
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can build static PIE programs" >&5
 $as_echo_n "checking if we can build static PIE programs... " >&6; }
-libc_cv_static_pie=$libc_cv_pie_default
-if test "x$libc_cv_pie_default" != xno \
+libc_cv_static_pie_supported=$libc_cv_pie_supported
+if test "x$libc_cv_pie_supported" != xno \
    -a "$libc_cv_no_dynamic_linker" = yes; then
-  # Enable static-pie if available
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 #ifndef SUPPORT_STATIC_PIE
@@ -7068,18 +7071,26 @@ if test "x$libc_cv_pie_default" != xno \
 #endif
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  libc_cv_static_pie=yes
+  libc_cv_static_pie_supported=yes
 else
-  libc_cv_static_pie=no
+  libc_cv_static_pie_supported=no
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  if test "$libc_cv_static_pie" = "yes"; then
-    $as_echo "#define ENABLE_STATIC_PIE 1" >>confdefs.h
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_static_pie_supported" >&5
+$as_echo "$libc_cv_static_pie_supported" >&6; }
+
+# Enable static-pie only if it is available and glibc isn't configured
+# with --disable-default-pie.
+if test "x$default_pie" = xno; then
+  libc_cv_static_pie=no
+else
+  libc_cv_static_pie=$libc_cv_static_pie_supported
+fi
+if test "$libc_cv_static_pie" = "yes"; then
+  $as_echo "#define ENABLE_STATIC_PIE 1" >>confdefs.h
 
-  fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_static_pie" >&5
-$as_echo "$libc_cv_static_pie" >&6; }
 config_vars="$config_vars
 enable-static-pie = $libc_cv_static_pie"