From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) by sourceware.org (Postfix) with ESMTPS id 6F4C1385840B for ; Sat, 29 Oct 2022 04:37:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6F4C1385840B Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=google.com Received: by mail-pj1-x102a.google.com with SMTP id h14so6244735pjv.4 for ; Fri, 28 Oct 2022 21:37:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=KjNbE9LyW3Ki7BrifO0LIOmEajGIbSol9q/G5DoLps0=; b=lzVSzBoVC8gciGzNM+lRO5LJcRJGiaGxR/1TXJ8qlFtE1F1sB64JJyLl6YQ5MZEmEd yREU5VeeUcQE9xHMbBU381h2lEZcvsA2q0j8f15CC/1w30hsNomjwd8p8NBHU/tGLUPF k0j3iXl20YEr2kDeFqknqEtg5v/Qfb8HfEGrFflq/zP4ClwFVg/Jpr8/j6FBQkMkB/u2 uDnARDBdsrFSA7UwV2XQXg7kN+L5I9SyCsQAd/le6nZaYGi4LxwIgQl24T9+3ygXGPK9 d8tUcny1bRTo22UW8+s5MKlMepOp1eAPZdFSai99dQQr2utcV4UDAYwvpH+rHiuhC9J7 inuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=KjNbE9LyW3Ki7BrifO0LIOmEajGIbSol9q/G5DoLps0=; b=MqB1wFNNjpj3iMV0ukzN7SMFHQuzI6dt1hOK+LGc09spWvjezzcV1I9IUauScMTVPV 46Ekh0UsRarF4gJaX/Vb2wDmj9g/2Mi9i4KT2kDc9zzAGI7K+F1e5xtaraf+FWg7OQHg 6gP4HxjPHSyqoHykg3wvN4Ag6p35cPUqnuSVsP/xFi3f/pxqQTE90frSp2jtJiDHRUbb mRWOdoPHEWNS22IJNHjuCgUwZ1Cp/9KdwNe0dMjo3KkFaY0rcCOHcS0UGB2qTpLDLzR0 /xHc/si4kCgiudFUUxBgiVTudJvE6hW0reR5UV2jxGn/BZav6Vn2A82dWGGSJpjI5hWD 8TTQ== X-Gm-Message-State: ACrzQf3ugjPZqdcXc/fFfbAAjlGAXrnvPddLQck2A6DLJ+z/yM+AF4Kw FxhVpbMezZdYUj8IBKxGkFnJiO/cUI3gUw== X-Google-Smtp-Source: AMsMyM5C0ZkC0LAjVpLqrlQCoyDtupIeDVag2tQ/kwQ+owRhYTkh3nTJ5vYOvMrW4cvhy0b1nVJdKw== X-Received: by 2002:a17:902:7408:b0:186:88be:1cca with SMTP id g8-20020a170902740800b0018688be1ccamr2537804pll.155.1667018265319; Fri, 28 Oct 2022 21:37:45 -0700 (PDT) Received: from google.com ([2620:15c:2ce:200:8981:f21e:b257:256]) by smtp.gmail.com with ESMTPSA id a14-20020aa7970e000000b0056b6c7a17c6sm304698pfg.12.2022.10.28.21.37.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Oct 2022 21:37:44 -0700 (PDT) Date: Fri, 28 Oct 2022 21:37:41 -0700 From: Fangrui Song To: Adhemerval Zanella Cc: libc-alpha@sourceware.org Subject: Re: [PATCH 07/11] stdlib: Move attribute_hidden definition to function prototype at gmp.h Message-ID: <20221029043741.6nlh3nwuz6j2oe2y@google.com> References: <20221028173532.876027-1-adhemerval.zanella@linaro.org> <20221028173532.876027-8-adhemerval.zanella@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <20221028173532.876027-8-adhemerval.zanella@linaro.org> X-Spam-Status: No, score=-26.8 required=5.0 tests=BAYES_00,DKIMWL_WL_MED,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,ENV_AND_HDR_SPF_MATCH,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL 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 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. > #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 >