mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 12:30:06 +00:00
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>
This commit is contained in:
parent
9fe6f63638
commit
ded3aeb202
49
configure
vendored
49
configure
vendored
@ -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
|
||||
fi
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_static_pie" >&5
|
||||
$as_echo "$libc_cv_static_pie" >&6; }
|
||||
{ $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
|
||||
config_vars="$config_vars
|
||||
enable-static-pie = $libc_cv_static_pie"
|
||||
|
||||
|
40
configure.ac
40
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.
|
||||
|
Loading…
Reference in New Issue
Block a user