From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oa1-x2b.google.com (mail-oa1-x2b.google.com [IPv6:2001:4860:4864:20::2b]) by sourceware.org (Postfix) with ESMTPS id A80E9385BAF9 for ; Mon, 31 Oct 2022 19:55:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A80E9385BAF9 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-oa1-x2b.google.com with SMTP id 586e51a60fabf-13bef14ea06so14645459fac.3 for ; Mon, 31 Oct 2022 12:55:36 -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 :cc:to:content-language:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=bTDSlPHhVU9GS6yd15j94M1f17Az4DxelkOXAZBm1Ls=; b=IxTb05IWVYwikIit/XJijA2UDI7o7DvQp7pYt3ThoJ23Iah9RRqVtWmeL122Og6SPo 3vI9BbgKJTit8uIc9Xl40c78tyUOIrtyBbAOaJIwZpJsMXsRqq2+mkYh+JYwa14HUpHk dbslefS7/92A8+gtTpxJ7byFsUBAszQDAdMs1o8fLpx0jcWt267YRN5GnYnUTGCOqZq3 LKEdTVJj+/KPx5QOjLspLQP7EVpoBRbFfMEGzhnNL+Hqbu+gWm4dEkuhpqwOgDVinsQI dvh9A1w8YKRVwWhs+gyi4T04dNxQpTXElr/FeFjVjlv/rykpzRM1oxmQ/dLn7CbWz3s3 CtjQ== 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 :cc:to:content-language:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=bTDSlPHhVU9GS6yd15j94M1f17Az4DxelkOXAZBm1Ls=; b=sqa8UYqTs1yIJZDQ6u3u+oWKQ3ABuUGtZgL4rLLRGEcbdytmRkprgMl5fXbhUSqMe4 T6DgocoA44N/7fldPyycZTsEr22q9l5wqSkvM2a68OMWYjcwxqwvx2sUXt8VsJS5J080 PrxLrCB5MrXh+dldR+vJahS5ROHWbpotSaa5qmY0KQ44mtWmbwy81qEs34wV+C1VkqPG Am2Lvexht/y8R2ueGqjQ05FnQhutkJoKIL2OSIkY0M8OENvc6kNFexQItVV8n38qEl/f ykywL8WR2wYgQaS0qnx1/9Kvhtx1Zy/GO58uE6m1w2X32CIlV5DL4O7Vq8lEL5pu1Ojg PvIg== X-Gm-Message-State: ACrzQf2lt9l+1/p67I+A1KByXdGlRiEGSC2Ox6erG+9Cx0efH3j15XDw HVazv3quwbguNPFEwKTQ3+YFzRYCuBbQ35zi X-Google-Smtp-Source: AMsMyM7UWEJPdnzKmXxYcKiDxv/SJnCmsnlYbmHLS1B3Qw/oJEUxz8v6Bp/GagzIqZaj8E4y8M2M1A== X-Received: by 2002:a05:6870:5249:b0:13c:84e6:95b8 with SMTP id o9-20020a056870524900b0013c84e695b8mr8864853oai.132.1667246135973; Mon, 31 Oct 2022 12:55:35 -0700 (PDT) Received: from ?IPV6:2804:1b3:a7c0:17c8:29c8:c66:a795:b2b1? ([2804:1b3:a7c0:17c8:29c8:c66:a795:b2b1]) by smtp.gmail.com with ESMTPSA id g52-20020a0568080df400b00359f96eeb47sm1988128oic.49.2022.10.31.12.55.34 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 31 Oct 2022 12:55:35 -0700 (PDT) Message-ID: <8441cc58-6e63-47f6-c5a7-a1f91c313758@linaro.org> Date: Mon, 31 Oct 2022 16:55:33 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.4.0 Subject: Re: [PATCH 07/11] stdlib: Move attribute_hidden definition to function prototype at gmp.h Content-Language: en-US To: Fangrui Song Cc: libc-alpha@sourceware.org References: <20221028173532.876027-1-adhemerval.zanella@linaro.org> <20221028173532.876027-8-adhemerval.zanella@linaro.org> <20221029043741.6nlh3nwuz6j2oe2y@google.com> From: Adhemerval Zanella Netto Organization: Linaro In-Reply-To: <20221029043741.6nlh3nwuz6j2oe2y@google.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00,BODY_8BITS,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 29/10/22 01:37, Fangrui Song wrote: > On 2022-10-28, Adhemerval Zanella via Libc-alpha wrote: >> clang does not allow to redefine attributes after function declaration, >> so move the hidden attribute on function prototype if _LIBC is defined. > > I guess glibc is using an ancient gmp, probably 2.0? > > > "does not allow" is not precise. > >   void f(); >   void g() { f(); } >   __attribute__((visibility("hidden"))) void f() asm("xxx") ; > > For the redeclaration after the first use, the visibility attribute is > silently ignored (symbol is STV_DEFAULT) while the asm label attribute > causes an error. > >> --- >> include/gmp.h | 12 --------- >> stdlib/gmp.h  | 72 ++++++++++++++++++++++++++++----------------------- >> 2 files changed, 39 insertions(+), 45 deletions(-) >> >> diff --git a/include/gmp.h b/include/gmp.h >> index 657c7a0148..791900b2cb 100644 >> --- a/include/gmp.h >> +++ b/include/gmp.h >> @@ -41,18 +41,6 @@ extern _Float128 __mpn_construct_float128 (mp_srcptr frac_ptr, int expt, >>                        int sign) attribute_hidden; >> #endif >> >> -extern __typeof (mpn_add_1) mpn_add_1 attribute_hidden; >> -extern __typeof (mpn_addmul_1) mpn_addmul_1 attribute_hidden; >> -extern __typeof (mpn_add_n) mpn_add_n attribute_hidden; >> -extern __typeof (mpn_cmp) mpn_cmp attribute_hidden; >> -extern __typeof (mpn_divrem) mpn_divrem attribute_hidden; >> -extern __typeof (mpn_lshift) mpn_lshift attribute_hidden; >> -extern __typeof (mpn_mul) mpn_mul attribute_hidden; >> -extern __typeof (mpn_mul_1) mpn_mul_1 attribute_hidden; >> -extern __typeof (mpn_rshift) mpn_rshift attribute_hidden; >> -extern __typeof (mpn_sub_1) mpn_sub_1 attribute_hidden; >> -extern __typeof (mpn_submul_1) mpn_submul_1 attribute_hidden; >> -extern __typeof (mpn_sub_n) mpn_sub_n attribute_hidden; >> #endif > > Here are 12 declarations, but below there are more. From commit a2ca165230cfa951605e5904be838c3e3e04be0b `Mark internal gmp functions with attribute_hidden [BZ #18822]`, > I think we do want to make more functions hidden. The commit message probably needs to be changed. I thinking marking more functio hidden is a different problems, if there still function now marked as hidden (which will most likely introduce PLT issue). I have changed the commit message to: -- Apply asm redirection in gmp.h before first use For clang the redeclaration after the first use, the visibility attribute is silently ignored (symbol is STV_DEFAULT) while the asm label attribute causes an error. -- > > >> #endif >> diff --git a/stdlib/gmp.h b/stdlib/gmp.h >> index a206e36cf8..ca9ebd2bc9 100644 >> --- a/stdlib/gmp.h >> +++ b/stdlib/gmp.h >> @@ -48,6 +48,12 @@ along with the GNU MP Library; see the file COPYING.LIB.  If not, see >> #endif >> #endif >> >> +#ifdef _LIBC >> +#define _ATTRIBUTE_HIDDEN attribute_hidden >> +#else >> +#define _ATTRIBUTE_HIDDEN >> +#endif >> + >> #ifdef _SHORT_LIMB >> typedef unsigned int        mp_limb_t; >> typedef int            mp_limb_signed_t; >> @@ -389,39 +395,39 @@ void mpf_ui_sub _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); >> #if defined (__cplusplus) >> extern "C" { >> #endif >> -mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); >> -mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); >> -mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); >> -mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); >> -mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int)); >> -int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t)); >> -mp_limb_t mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); >> -mp_limb_t mpn_divrem _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t)); >> -mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t)); >> -void mpn_dump _PROTO ((mp_srcptr, mp_size_t)); >> -mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); >> -mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t)); >> -mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); >> -size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t)); >> -unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t)); >> -mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); >> -mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t)); >> -mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); >> -mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); >> -void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); >> -int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t)); >> -unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t)); >> -mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)); >> -void mpn_random2 _PROTO ((mp_ptr, mp_size_t)); >> -mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); >> -unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int)); >> -unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int)); >> -mp_size_t mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int)); >> -mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t)); >> -mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); >> -mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); >> -mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); >> -mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); >> +mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int)) _ATTRIBUTE_HIDDEN; >> +int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_divrem _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t)) _ATTRIBUTE_HIDDEN; >> +void mpn_dump _PROTO ((mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t)) _ATTRIBUTE_HIDDEN; >> +mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) _ATTRIBUTE_HIDDEN; >> +void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)) _ATTRIBUTE_HIDDEN; >> +void mpn_random2 _PROTO ((mp_ptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)) _ATTRIBUTE_HIDDEN; >> +unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int)) _ATTRIBUTE_HIDDEN; >> +unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int)) _ATTRIBUTE_HIDDEN; >> +mp_size_t mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int)) _ATTRIBUTE_HIDDEN; >> +mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)) _ATTRIBUTE_HIDDEN; >> +mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)) _ATTRIBUTE_HIDDEN; >> #if defined (__cplusplus) >> } >> #endif >> --  >> 2.34.1 >>