[v2] Properly handle --disable-default-pie [BZ #28780]
Checks
Context |
Check |
Description |
dj/TryBot-apply_patch |
success
|
Patch applied to master at the time it was sent
|
dj/TryBot-32bit |
success
|
Build for i686
|
Commit Message
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.
---
configure | 47 +++++++++++++++++++++++++++++------------------
configure.ac | 40 ++++++++++++++++++++++++++--------------
2 files changed, 55 insertions(+), 32 deletions(-)
Comments
On 17/01/2022 20:49, H.J. Lu wrote:
> 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.
> ---
> configure | 47 +++++++++++++++++++++++++++++------------------
> configure.ac | 40 ++++++++++++++++++++++++++--------------
> 2 files changed, 55 insertions(+), 32 deletions(-)
>
LGTM.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
> 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"
>
> diff --git a/configure.ac b/configure.ac
> index 40f2de1661..87f67d25ec 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1868,28 +1868,40 @@ rm -f conftest.*])
> LIBC_CONFIG_VAR([cc-pie-default], [$libc_cv_cc_pie_default])
>
> AC_MSG_CHECKING(if we can build programs as PIE)
> -if test "x$default_pie" != xno; then
> - # Disable build-pie-default if target does not support it.
> - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifdef PIE_UNSUPPORTED
> +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifdef PIE_UNSUPPORTED
> # error PIE is not supported
> -#endif]])], [libc_cv_pie_default=yes], [libc_cv_pie_default=no])
> +#endif]])], [libc_cv_pie_supported=yes], [libc_cv_pie_supported=no])
> +AC_MSG_RESULT($libc_cv_pie_supported)
> +# 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
> -AC_MSG_RESULT($libc_cv_pie_default)
> -LIBC_CONFIG_VAR([build-pie-default], [$libc_cv_pie_default])
> +LIBC_CONFIG_VAR([build-pie-default], [$build_pie_default])
>
> AC_MSG_CHECKING(if we can build static PIE programs)
> -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
> AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef SUPPORT_STATIC_PIE
> # error static PIE is not supported
> -#endif]])], [libc_cv_static_pie=yes], [libc_cv_static_pie=no])
> - if test "$libc_cv_static_pie" = "yes"; then
> - AC_DEFINE(ENABLE_STATIC_PIE)
> - fi
> +#endif]])], [libc_cv_static_pie_supported=yes],
> + [libc_cv_static_pie_supported=no])
> +fi
> +AC_MSG_RESULT($libc_cv_static_pie_supported)
> +
> +# 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
> + AC_DEFINE(ENABLE_STATIC_PIE)
> fi
> -AC_MSG_RESULT($libc_cv_static_pie)
> LIBC_CONFIG_VAR([enable-static-pie], [$libc_cv_static_pie])
>
> # Set the `multidir' variable by grabbing the variable from the compiler.
@@ -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"
@@ -1868,28 +1868,40 @@ rm -f conftest.*])
LIBC_CONFIG_VAR([cc-pie-default], [$libc_cv_cc_pie_default])
AC_MSG_CHECKING(if we can build programs as PIE)
-if test "x$default_pie" != xno; then
- # Disable build-pie-default if target does not support it.
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifdef PIE_UNSUPPORTED
+AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifdef PIE_UNSUPPORTED
# error PIE is not supported
-#endif]])], [libc_cv_pie_default=yes], [libc_cv_pie_default=no])
+#endif]])], [libc_cv_pie_supported=yes], [libc_cv_pie_supported=no])
+AC_MSG_RESULT($libc_cv_pie_supported)
+# 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
-AC_MSG_RESULT($libc_cv_pie_default)
-LIBC_CONFIG_VAR([build-pie-default], [$libc_cv_pie_default])
+LIBC_CONFIG_VAR([build-pie-default], [$build_pie_default])
AC_MSG_CHECKING(if we can build static PIE programs)
-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
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[#ifndef SUPPORT_STATIC_PIE
# error static PIE is not supported
-#endif]])], [libc_cv_static_pie=yes], [libc_cv_static_pie=no])
- if test "$libc_cv_static_pie" = "yes"; then
- AC_DEFINE(ENABLE_STATIC_PIE)
- fi
+#endif]])], [libc_cv_static_pie_supported=yes],
+ [libc_cv_static_pie_supported=no])
+fi
+AC_MSG_RESULT($libc_cv_static_pie_supported)
+
+# 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
+ AC_DEFINE(ENABLE_STATIC_PIE)
fi
-AC_MSG_RESULT($libc_cv_static_pie)
LIBC_CONFIG_VAR([enable-static-pie], [$libc_cv_static_pie])
# Set the `multidir' variable by grabbing the variable from the compiler.