From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gainsboro.ash.relay.mailchannels.net (gainsboro.ash.relay.mailchannels.net [23.83.222.65]) by sourceware.org (Postfix) with ESMTPS id 548013858019 for ; Mon, 17 Jan 2022 15:22:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 548013858019 X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 59FFC821F5F; Mon, 17 Jan 2022 15:22:15 +0000 (UTC) Received: from pdx1-sub0-mail-a306.dreamhost.com (unknown [127.0.0.6]) (Authenticated sender: dreamhost) by relay.mailchannels.net (Postfix) with ESMTPA id C6709822308; Mon, 17 Jan 2022 15:22:14 +0000 (UTC) X-Sender-Id: dreamhost|x-authsender|siddhesh@gotplt.org Received: from pdx1-sub0-mail-a306.dreamhost.com (pop.dreamhost.com [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.121.92.82 (trex/6.4.3); Mon, 17 Jan 2022 15:22:15 +0000 X-MC-Relay: Neutral X-MailChannels-SenderId: dreamhost|x-authsender|siddhesh@gotplt.org X-MailChannels-Auth-Id: dreamhost X-Stretch-Chemical: 000dc3636becdd00_1642432935245_91340844 X-MC-Loop-Signature: 1642432935245:1594332414 X-MC-Ingress-Time: 1642432935245 Received: from [192.168.1.174] (unknown [1.186.224.209]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: siddhesh@gotplt.org) by pdx1-sub0-mail-a306.dreamhost.com (Postfix) with ESMTPSA id 4Jcwcj28LJz1JL; Mon, 17 Jan 2022 07:22:12 -0800 (PST) Message-ID: Date: Mon, 17 Jan 2022 20:52:07 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 Subject: Re: [PATCH v2] Properly handle --disable-default-pie [BZ #28780] Content-Language: en-US To: "H.J. Lu" , libc-alpha@sourceware.org References: <20220117151959.3190299-1-hjl.tools@gmail.com> From: Siddhesh Poyarekar In-Reply-To: <20220117151959.3190299-1-hjl.tools@gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-3493.5 required=5.0 tests=BAYES_00, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_DMARC_NONE, KAM_DMARC_STATUS, NICE_REPLY_A, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_NEUTRAL, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 17 Jan 2022 15:22:21 -0000 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 > 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.