public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Siddhesh Poyarekar <siddhesh@sourceware.org>
To: "H.J. Lu" <hjl.tools@gmail.com>, libc-alpha@sourceware.org
Subject: Re: [PATCH v2] Properly handle --disable-default-pie [BZ #28780]
Date: Mon, 17 Jan 2022 20:52:07 +0530	[thread overview]
Message-ID: <deee45be-5c42-ec75-725b-8042a4e8ba5e@sourceware.org> (raw)
In-Reply-To: <20220117151959.3190299-1-hjl.tools@gmail.com>

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.


      reply	other threads:[~2022-01-17 15:22 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-17 15:19 H.J. Lu
2022-01-17 15:22 ` Siddhesh Poyarekar [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=deee45be-5c42-ec75-725b-8042a4e8ba5e@sourceware.org \
    --to=siddhesh@sourceware.org \
    --cc=hjl.tools@gmail.com \
    --cc=libc-alpha@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).