diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2022-01-15 14:23:20 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2022-01-17 07:27:25 -0800 |
commit | ded3aeb2025c6686956eb10125aacb9a6e7c298e (patch) | |
tree | 66efc42730938c9345eae35648db5da733c23e49 /configure | |
parent | 9fe6f6363886aae6b2b210cae3ed1f5921299083 (diff) | |
download | glibc-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-x | configure | 47 |
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" |