From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x22f.google.com (mail-oi1-x22f.google.com [IPv6:2607:f8b0:4864:20::22f]) by sourceware.org (Postfix) with ESMTPS id 934373858400 for ; Thu, 22 Sep 2022 18:32:38 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 934373858400 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-oi1-x22f.google.com with SMTP id n124so13469253oih.7 for ; Thu, 22 Sep 2022 11:32:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=content-transfer-encoding:in-reply-to:organization:from:references :to:content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date; bh=tpJdzayiyczJvyy07CBWl2oZ0a4kSuu2TDSbDs+Khxo=; b=NiqjUMs8hz4F5BALNyG40VRbiWMDv3trUdAlZv5kbpkFyTbpwmn7aPnZ+ut92xFkh7 vBIb2xSBJaA4Jv2muNtKlEgGTwsg09H5cHzk7si/G3vSzTpFrqB+wpWRbji1FKItAI3p 1K+53D6BrDp8jixhJKOAojsn7/HAncgYCNmB87MGaPi8FUKzcd0jxvcFWmsYukJapt73 jl4lOehvwcZQrKKkW/W+NRyn5LqaKvz7nsH6bF6uppSoLoamCEofhHi70kJ2eLR4Ddki rOz72uThZ0+8qFnTQsjhu0prSoMKpfNpb0MkzgBi89NtUTPhdj2efx+0gtFmCA9s03m6 PNZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:in-reply-to:organization:from:references :to:content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date; bh=tpJdzayiyczJvyy07CBWl2oZ0a4kSuu2TDSbDs+Khxo=; b=Clpnps1kQ8CwRN+/aKYCKLVWGzt3J+ilS/zXI2iXTWB1flLB5zaZr9x4eijzQ4mUMi X5YN/WJNRGbimCeuGmEY/EZVYkzV75heX/KO7qkR+JzWyjbYANa4rLdDItyv12e3kTiM qH66T0cztf8IYX2N/DkiPEpayXhA7CN9L+Nzye/CwWUH3lrfk2Qt+M3bbh0VojJUtC9I gOxyDEmXcHY3L8mGlhwsuSCF+RpPo8O5xbzZwXSyOtZ2DnifdnKb+u316ElCUkBLGVZS 02O84tdGL/QAFa5C3alPLZWMydT+qzmqqC9mOtR9pjqxU7qfENbZUg3pl0tfijjcSl/T Uk+A== X-Gm-Message-State: ACrzQf05b/i8+L2U3JBQ41A0JXJa00O77eWlOphZbSPJiY9ruEbhvGOQ dIJyNWzn4aX6z1KrYRK99jTyzzIE4tfm8s6T X-Google-Smtp-Source: AMsMyM4ViGny2bGB3j2+2ANXqQHDJIvX6Kz69wpFTzGzx3KcvuCCpUSz78cbPYw0hsqyEGrbBHCQCw== X-Received: by 2002:a05:6808:11c5:b0:34b:75dd:2ee9 with SMTP id p5-20020a05680811c500b0034b75dd2ee9mr2212955oiv.285.1663871557764; Thu, 22 Sep 2022 11:32:37 -0700 (PDT) Received: from ?IPV6:2804:1b3:a7c1:c266:202e:f71c:c0e7:6b4e? ([2804:1b3:a7c1:c266:202e:f71c:c0e7:6b4e]) by smtp.gmail.com with ESMTPSA id z7-20020a056870e30700b0012b2137fb3dsm3957287oad.40.2022.09.22.11.32.36 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 22 Sep 2022 11:32:37 -0700 (PDT) Message-ID: Date: Thu, 22 Sep 2022 15:32:35 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.3.0 Subject: Re: [PATCH 1/1] LoongArch: Add static PIE support Content-Language: en-US To: libc-alpha@sourceware.org References: <20220922091924.3033-1-xry111@xry111.site> <20220922091924.3033-2-xry111@xry111.site> From: Adhemerval Zanella Netto Organization: Linaro In-Reply-To: <20220922091924.3033-2-xry111@xry111.site> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 22/09/22 06:19, Xi Ruoyao via Libc-alpha wrote: > If the compiler is new enough, enable static PIE support. In the static > PIE version of _start (in rcrt1.o), use la.pcrel instead of la.got > because in a static PIE we cannot use GOT entries until the dynamic > relocations for GOT are resolved. > --- > sysdeps/loongarch/configure | 37 ++++++++++++++++++++++++++++++++++ > sysdeps/loongarch/configure.ac | 14 +++++++++++++ > sysdeps/loongarch/start.S | 14 ++++++++++--- > 3 files changed, 62 insertions(+), 3 deletions(-) > > diff --git a/sysdeps/loongarch/configure b/sysdeps/loongarch/configure > index 43b54d4965..7e671241a8 100644 > --- a/sysdeps/loongarch/configure > +++ b/sysdeps/loongarch/configure > @@ -3,3 +3,40 @@ > > $as_echo "#define HIDDEN_VAR_NEEDS_DYNAMIC_RELOC 1" >>confdefs.h > > + > + > + > +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC is sufficient to build static PIE on LoongArch" >&5 > +$as_echo_n "checking if $CC is sufficient to build static PIE on LoongArch... " >&6; } > +if ${libc_cv_static_pie_on_loongarch+:} false; then : > + $as_echo_n "(cached) " >&6 > +else > + > +cat confdefs.h - <<_ACEOF >conftest.$ac_ext > +/* end confdefs.h. */ > + > +int > +main () > +{ > + > +#if !defined __GNUC__ || __GNUC__ < 13 > +#error insufficient compiler for static PIE on LoongArch > +#endif > + > + ; > + return 0; > +} > +_ACEOF > +if ac_fn_c_try_cpp "$LINENO"; then : > + libc_cv_static_pie_on_loongarch=yes > +else > + libc_cv_static_pie_on_loongarch=no > +fi > +rm -f conftest.err conftest.i conftest.$ac_ext > +fi > +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_static_pie_on_loongarch" >&5 > +$as_echo "$libc_cv_static_pie_on_loongarch" >&6; } > +if test "$libc_cv_static_pie_on_loongarch" = yes; then > + $as_echo "#define SUPPORT_STATIC_PIE 1" >>confdefs.h > + > +fi > diff --git a/sysdeps/loongarch/configure.ac b/sysdeps/loongarch/configure.ac > index f744367bf3..624897bfb3 100644 > --- a/sysdeps/loongarch/configure.ac > +++ b/sysdeps/loongarch/configure.ac > @@ -4,3 +4,17 @@ GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. > dnl It is always possible to access static and hidden symbols in an > dnl position independent way. > AC_DEFINE(HIDDEN_VAR_NEEDS_DYNAMIC_RELOC) > + > +dnl test if GCC is new enough for static PIE. > +AC_CACHE_CHECK([if $CC is sufficient to build static PIE on LoongArch], > +libc_cv_static_pie_on_loongarch, [ > +AC_PREPROC_IFELSE([AC_LANG_PROGRAM([[]], [[ > +#if !defined __GNUC__ || __GNUC__ < 13 > +#error insufficient compiler for static PIE on LoongArch > +#endif > +]])], > + [libc_cv_static_pie_on_loongarch=yes], > + [libc_cv_static_pie_on_loongarch=no])]) > +if test "$libc_cv_static_pie_on_loongarch" = yes; then > + AC_DEFINE(SUPPORT_STATIC_PIE) > +fi I am not sure if checking compiler version is the best option, since this can backported without breaking ABI. Maybe a best check would be to see if -fpie/-fPIE and check if the required relocation if any is generated, as done by s390x with 728894dba4a19578bd803906de184a8dd51ed13c. > diff --git a/sysdeps/loongarch/start.S b/sysdeps/loongarch/start.S > index e66af16d57..05cabd9b96 100644 > --- a/sysdeps/loongarch/start.S > +++ b/sysdeps/loongarch/start.S > @@ -60,9 +60,17 @@ ENTRY (ENTRY_POINT) > cfi_undefined (1) > or a5, a0, zero /* rtld_fini */ > > +#if defined(PIC) && !defined(SHARED) > +/* For static PIE, the GOT cannot be used in _start because the GOT entries are > + offsets instead of real addresses before __libc_start_main. */ > +# define LA la.pcrel > +#else > /* We must get symbol main through GOT table, since main may not be local. > For instance: googletest defines main in dynamic library. */ > - la.got a0, t0, main > +# define LA la.got > +#endif > + > + LA a0, t0, main > REG_L a1, sp, 0 > ADDI a2, sp, SZREG > > @@ -73,9 +81,9 @@ ENTRY (ENTRY_POINT) > move a4, zero /* used to be fini */ > or a6, sp, zero /* stack_end */ > > - la.got ra, t0, __libc_start_main > + LA ra, t0, __libc_start_main > jirl ra, ra, 0 > > - la.got ra, t0, abort > + LA ra, t0, abort > jirl ra, ra, 0 > END (ENTRY_POINT)