From patchwork Wed Nov 2 14:55:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 59789 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id C617E3857371 for ; Wed, 2 Nov 2022 14:57:19 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C617E3857371 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1667401039; bh=lUjO3hVpbC0OIoRHy1nAQt1zI4GHPdtrzBee4KK7zmQ=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=oHwpKJx7TtrpsprpS1dq+VcBExhKG4acO/+WDmZGxC0DDVuI44AV0055Lad+Ni70B nIChMXWSzi7QEVrvpqrYJIJ4+cHwNxrvhBbu//2f43aA8rtcRREw0sVzup92JGcK/z HBNvNUlOoKUPQXSKsA9o0mJMUamLKmhhm6eU0EgA= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-ot1-x330.google.com (mail-ot1-x330.google.com [IPv6:2607:f8b0:4864:20::330]) by sourceware.org (Postfix) with ESMTPS id 3E583385782A for ; Wed, 2 Nov 2022 14:56:13 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3E583385782A Received: by mail-ot1-x330.google.com with SMTP id a13-20020a9d6e8d000000b00668d65fc44fso10410500otr.9 for ; Wed, 02 Nov 2022 07:56:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=lUjO3hVpbC0OIoRHy1nAQt1zI4GHPdtrzBee4KK7zmQ=; b=wF/ncLYKwMxil/oy6YDRslpGAdrH8r3A+vaKH5NWR6jFOu21NBSznVHsmwS9LAUv0w 3alCWIvK+TQz+Q7qckBetB2nkIPzk1vxrt+Cd+Lh1cQx69jUultUA6H6HkgZv7JstX2T rUdNRJTFg/SYvbddu84K8nhLH+QaxPvoQV221jP+qTguklm4HfEHbjNPCz7yovQrS4Hl RtEpYXxsMxuOu1elGWtR6aM68QiiXg3gAfgWGJzo5PGzjbJVkLdAIg4f1oX3ELRw+pxc VkPvUNEicKfDlPt1L+v25vP8rOPkVzZTYRcwfSg1lFWbhu+fGglPOgq5aO+KYHEfhSCV eL1g== X-Gm-Message-State: ACrzQf0RdQxJbMWXvNvFSsQDW++x7p7md9tNqdZByQvv2CArjFftGX8k JnfXeA8oI70WUa3w0DV3G/u03vH5HTM22cyC X-Google-Smtp-Source: AMsMyM6eqhw8kQRQnvPQ6pN5QW2Unh7L1EPbN1IpoD4hDeT7Gqt06UyGUE1NkoQOXedosHZMUQeVhA== X-Received: by 2002:a05:6830:368e:b0:660:d53a:1e95 with SMTP id bk14-20020a056830368e00b00660d53a1e95mr12565407otb.120.1667400972380; Wed, 02 Nov 2022 07:56:12 -0700 (PDT) Received: from mandiga.. ([2804:1b3:a7c0:a9f4:967f:f7c:c187:85d7]) by smtp.gmail.com with ESMTPSA id 37-20020a9d0328000000b00661af2f9a1asm5205767otv.49.2022.11.02.07.56.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Nov 2022 07:56:11 -0700 (PDT) To: libc-alpha@sourceware.org, Fangrui Song Subject: [PATCH v2 1/4] Disable __USE_EXTERN_INLINES for clang Date: Wed, 2 Nov 2022 11:55:56 -0300 Message-Id: <20221102145559.1962008-2-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221102145559.1962008-1-adhemerval.zanella@linaro.org> References: <20221102145559.1962008-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, 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 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-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" From: Fangrui Song clang does not allow to redefine attributes after function declaration. Although it work for external usage, its breaks the build for internal symbol that glibc provides as optimization (for instance bsearch with stdlib-bsearch.h or __cmsg_nxthdr). Disable such optimization for clang while building glibc. --- include/features.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/features.h b/include/features.h index 123de9fd47..4a3fe34267 100644 --- a/include/features.h +++ b/include/features.h @@ -502,7 +502,7 @@ /* Decide whether we can define 'extern inline' functions in headers. */ #if __GNUC_PREREQ (2, 7) && defined __OPTIMIZE__ \ && !defined __OPTIMIZE_SIZE__ && !defined __NO_INLINE__ \ - && defined __extern_inline + && defined __extern_inline && !(defined __clang__ && defined _LIBC) # define __USE_EXTERN_INLINES 1 #endif From patchwork Wed Nov 2 14:55:57 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 59791 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 328EC38576BF for ; Wed, 2 Nov 2022 14:58:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 328EC38576BF DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1667401112; bh=MfgIp9Ztn0PSLry+pajECV5hJ48xvQTvIW1IGFgFSVE=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=An2gzkWd4mBcgkEfeb7mUFMmk6ziuBb4LdCISfrxTQ7qr/vku9ddNNEWovt7sUZfF c+QGDRkzAspFigxwleuEI/p/f+8b5AQTyfBGOg3q8UM8Ty6R8KpI65adLgrew8iwWt XlHsigwWMDMNGspoQ5MFfj6M0VIyg/LgJR/+ivm8= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-oo1-xc35.google.com (mail-oo1-xc35.google.com [IPv6:2607:f8b0:4864:20::c35]) by sourceware.org (Postfix) with ESMTPS id 04D0B3857685 for ; Wed, 2 Nov 2022 14:56:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 04D0B3857685 Received: by mail-oo1-xc35.google.com with SMTP id g15-20020a4a894f000000b0047f8e899623so2518579ooi.5 for ; Wed, 02 Nov 2022 07:56:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MfgIp9Ztn0PSLry+pajECV5hJ48xvQTvIW1IGFgFSVE=; b=pHxNYUkRbyuPc352DtRsxELKT2pkVFpcrG8sY490TBUPcidCW4TGb77laXukcCvEVB yALts6qROE+ywRNztDm4MaHfeCuDt1nYBdZingUWjqG+kZ5BZoitZi9WewEO043u0+/J /BDQY/IdoGrLsV9sUzk7HEaeW+ruZMRB4t//RM8pHWWADej9z8Z7x9moFMXSrvBMivST 7BNqh+AeoC7v6a+33wutxl0eyTmgURY6eFmDOVuTwmNYNv7eddgqFHEBeI2GBtLo63td To6E28LDeHW5x3CEad0FuYqPPJ4voR9EOjn4aE005HEj3kWHm2hjKED2DIU+2w7GIa7N E8Dw== X-Gm-Message-State: ACrzQf0XWWochmnK0yzBuZqmBOmgz3apQlp/lfgg+HqbFTqEVbTJDMIE Jr0DZ1WvtJI3FSdoANEi+bBNwzl4wxhFf8SQ X-Google-Smtp-Source: AMsMyM6Gbr+irE43RSs/Oy5D8UEsVlCotXhjsslSERubgOCshKwSQcqTQUpcIgX4PIQ5cfJVGmHCHw== X-Received: by 2002:a05:6820:381:b0:49b:dee1:2677 with SMTP id r1-20020a056820038100b0049bdee12677mr5679320ooj.70.1667400974067; Wed, 02 Nov 2022 07:56:14 -0700 (PDT) Received: from mandiga.. ([2804:1b3:a7c0:a9f4:967f:f7c:c187:85d7]) by smtp.gmail.com with ESMTPSA id 37-20020a9d0328000000b00661af2f9a1asm5205767otv.49.2022.11.02.07.56.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Nov 2022 07:56:13 -0700 (PDT) To: libc-alpha@sourceware.org, Fangrui Song Subject: [PATCH v2 2/4] Rewrite find_cxx_header config configure.ac Date: Wed, 2 Nov 2022 11:55:57 -0300 Message-Id: <20221102145559.1962008-3-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221102145559.1962008-1-adhemerval.zanella@linaro.org> References: <20221102145559.1962008-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, 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 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-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" With clang If the main file is , the first non-main-file dependency is not listed in the -MP output. Although it was fixed on clang-16 [1], this change adds portability for older version. [1] https://github.com/llvm/llvm-project/commit/ff9576f74514b836e1ba0268409a2ecb919d7118 Reviewed-by: Fangrui Song --- configure | 4 ++-- configure.ac | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/configure b/configure index fc3d7842de..e23ea95a49 100755 --- a/configure +++ b/configure @@ -5669,8 +5669,8 @@ fi # copy of those headers in Makerules. if test -n "$CXX"; then find_cxx_header () { - echo "#include <$1>" | $CXX -M -MP -x c++ - 2>/dev/null \ - | sed -n "\,$1:,{s/:\$//;p}" + echo "#include <$1>" | $CXX -H -fsyntax-only -x c++ - 2>&1 \ + | awk '$1 == "."{print $2}' } CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)" CXX_CMATH_HEADER="$(find_cxx_header cmath)" diff --git a/configure.ac b/configure.ac index 9fc1fb1c1c..7275b53345 100644 --- a/configure.ac +++ b/configure.ac @@ -1137,8 +1137,8 @@ AC_SUBST(CXX_SYSINCLUDES) # copy of those headers in Makerules. if test -n "$CXX"; then find_cxx_header () { - echo "#include <$1>" | $CXX -M -MP -x c++ - 2>/dev/null \ - | sed -n "\,$1:,{s/:\$//;p}" + echo "#include <$1>" | $CXX -H -fsyntax-only -x c++ - 2>&1 \ + | awk '$1 == "."{print $2}' } CXX_CSTDLIB_HEADER="$(find_cxx_header cstdlib)" CXX_CMATH_HEADER="$(find_cxx_header cmath)" From patchwork Wed Nov 2 14:55:58 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 59788 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3E1F6385737E for ; Wed, 2 Nov 2022 14:56:50 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3E1F6385737E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1667401010; bh=k8wO1sMaAt/DgmfuMczL0UWCMQyeGz8Dmf7m8wuIluc=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=cxf4/5kugPS1dvE1Pf1b9b6qerC9SbHWihFHV1gIHR9Dj99fR5UZpsRq9Bl6FxfAz hLa2QYnWVkllP+uKguAjBwZMSWMn7Po3Uh4S1ZtRQWm7jBM9FHvhaCn/BNPcFllpsk gXWUI2Gwqv00SDiRyRTrEYJw0RWioB83uIlTRYP0= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-oi1-x233.google.com (mail-oi1-x233.google.com [IPv6:2607:f8b0:4864:20::233]) by sourceware.org (Postfix) with ESMTPS id B4D2D38576B2 for ; Wed, 2 Nov 2022 14:56:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org B4D2D38576B2 Received: by mail-oi1-x233.google.com with SMTP id t62so8630604oib.12 for ; Wed, 02 Nov 2022 07:56:16 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=k8wO1sMaAt/DgmfuMczL0UWCMQyeGz8Dmf7m8wuIluc=; b=LAdXQ9kvejxi3eYOIp5jlMAdg9wE84HdRF/BghM0B4ULxI9BSGamth32qIydtQeR7D LvD2wRXYMeuJI105kdmc5du60Boq+Vj9H8LiIPiy5mI4hhkbz1aSgjpYTDYFd5JUNglM 7i3cK27jc3dTMPn2L6bkeJl5uR/UEAQMNKqhP4PTnhxeLK39SWoJLF5n0aX+b3PFHvyp V4L1R0Jf+nk38FVIBq7SQ8M+4gPJru74MokFMWs3JOWph1qxRIjKFh7zK0Zrr3aoUdVF bNOiks8Hw6LZ5hZP2N3pvnRm1fBi1s3rZlhG61cS7hoZORR+3N7PznaPXLoYN+Cufps0 /kfg== X-Gm-Message-State: ACrzQf0g+wSryGSIvpH88l5QhvC16a9mVnnkOCFDqfwaHtOYK3zByaeU lPOkQwF4olg7M9iFAOYAA0I85aQfe5avxzSm X-Google-Smtp-Source: AMsMyM5fLvhk9WJ3CvCFYxc21Rl7lil9FD8ewPFhFNYO36dAW8fphQjqdlBU8/pdR2F7m06cXyUQAw== X-Received: by 2002:a05:6808:218c:b0:355:231d:54a6 with SMTP id be12-20020a056808218c00b00355231d54a6mr13707834oib.4.1667400975639; Wed, 02 Nov 2022 07:56:15 -0700 (PDT) Received: from mandiga.. ([2804:1b3:a7c0:a9f4:967f:f7c:c187:85d7]) by smtp.gmail.com with ESMTPSA id 37-20020a9d0328000000b00661af2f9a1asm5205767otv.49.2022.11.02.07.56.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Nov 2022 07:56:15 -0700 (PDT) To: libc-alpha@sourceware.org, Fangrui Song Subject: [PATCH v2 3/4] stdlib: Remove if inline asm context casts if compiler does not support it Date: Wed, 2 Nov 2022 11:55:58 -0300 Message-Id: <20221102145559.1962008-4-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221102145559.1962008-1-adhemerval.zanella@linaro.org> References: <20221102145559.1962008-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, 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 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-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" The inline asm constraints lvalue casts on longlong.h are not fully supported on all compilers. The clang rejects the code by default: error: invalid use of a cast in a inline asm context requiring an lvalue: remove the cast or build with -fheinous-gnu-extensions And even using -fheinous-gnu-extensions it does not seem to be a long-term solution, since clang accepts it but still throws an warning: warning: invalid use of a cast in an inline asm context requiring an lvalue: accepted due to -fheinous-gnu-extensions, but clang may remove support for this in the future And clang also does not provide a a -Wno-heinous-gnu-extensions to suppress it. For GCC the cast acts as a limited form of typechecking where if the cast can be removed, then the output operand had a type of the proper width, otherwise compiler issue an error. That's the main reason why the casts are still kept in GCC [1], although there are a long-standing bug report to actually remove them [2]. To enable longlong.h support on clang this patch uses a simple mechanism to remove casts them if compiler does not fully support it. The script uses simple string substitution to remove the cast if the asm constraint is found. For GCC it should be a no-op, the longlong.h is copies as-is. Checked on a build for all affected ABIs. [1] https://gcc.gnu.org/pipermail/gcc-patches/2021-October/581722.html [2] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=2803 --- Makerules | 13 ++++ configure | 29 ++++++++ configure.ac | 22 ++++++ scripts/filter-asm-inline-cast.py | 102 +++++++++++++++++++++++++++ stdlib/{longlong.h => longlong.h.in} | 0 stdlib/strtod_l.c | 2 +- 6 files changed, 167 insertions(+), 1 deletion(-) create mode 100755 scripts/filter-asm-inline-cast.py rename stdlib/{longlong.h => longlong.h.in} (100%) diff --git a/Makerules b/Makerules index 09c0cf8357..1ca16bf080 100644 --- a/Makerules +++ b/Makerules @@ -351,6 +351,19 @@ $(common-objpfx)$(lib-names-stmp-abi): $(..)scripts/lib-names.awk \ endif common-generated += $(lib-names-h-abi) $(lib-names-stmp-abi) endif + +# The inline asm constraints lvalue casts on longlong.h are not fully +# supported on all compilers. However, the cast acts as a limited form of +# typechecking where if the cast can be removed, then the output operand +# had a type of the proper width, otherwise compiler issue an error. +# For the case compiler does not fully support the script tries to remove +# it. +before-compile += $(common-objpfx)stdlib/longlong.h +$(common-objpfx)stdlib/longlong.h: $(..)stdlib/longlong.h.in $(..)scripts/filter-asm-inline-cast.py + $(make-target-directory) + $(PYTHON) $(..)scripts/filter-asm-inline-cast.py --filter $(config-remove-cast-inline-asm) $< $@.tmp + mv -f $@.tmp $@ +common-generated += $(common-objpfx)stdlib/longlong.h ############################################################################### # NOTE! Everything adding to before-compile needs to come before this point! # diff --git a/configure b/configure index e23ea95a49..045a51cfba 100755 --- a/configure +++ b/configure @@ -6376,6 +6376,35 @@ $as_echo "$libc_cv_wno_ignored_attributes" >&6; } config_vars="$config_vars config-cflags-wno-ignored-attributes = $libc_cv_wno_ignored_attributes" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if cast in inline asm context is supported" >&5 +$as_echo_n "checking if cast in inline asm context is supported... " >&6; } +if ${libc_cv_cast_inline_asm_context+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then + libc_cv_remove_cast_inline_asm=yes +fi +rm -f conftest.* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_cast_inline_asm_context" >&5 +$as_echo "$libc_cv_cast_inline_asm_context" >&6; } +config_vars="$config_vars +config-remove-cast-inline-asm = $libc_cv_remove_cast_inline_asm" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc puts quotes around section names" >&5 $as_echo_n "checking whether cc puts quotes around section names... " >&6; } if ${libc_cv_have_section_quotes+:} false; then : diff --git a/configure.ac b/configure.ac index 7275b53345..238a7267ef 100644 --- a/configure.ac +++ b/configure.ac @@ -1426,6 +1426,28 @@ rm -f conftest*]) LIBC_CONFIG_VAR([config-cflags-wno-ignored-attributes], [$libc_cv_wno_ignored_attributes]) +dnl clang emits and error for cast usage in inline asm context and although +dnl -fheinous-gnu-extensions option allows to just instruct it to emit an +dnl warning, clang also explicit warns that the option might be removed in +dnl the future. +AC_CACHE_CHECK([if cast in inline asm context is supported], + libc_cv_cast_inline_asm_context, [dnl +cat > conftest.c < conftest.c <. + +import argparse +import sys +import re + +# Each asm constraint where the cast occurs. +CONSTRAINT_LIST=( + '\"%0\"', + '\"%1\"', + '\"%dI\"' + '\"%rJ\"', + '\"%r\"', + '\"0\"', + '\"1\"', + '\"=&g\"', + '\"=&r\"', + '\"=a\"', + '\"=d\"', + '\"=g\"', + '\"=r\"', + '\"dI\"', + '\"g\"', + '\"rICal\"', + '\"rI\"', + '\"rJ\"', + '\"%rJ\"', + '\"rM\"', + '\"rQR\"', + '\"r\"', + '\"rm\"', + '\"rme\"', + '\"x\"', + '\"d\"', + '\"=&d\"', + '\"dmi\"', + '\"%rM\"', +) + +# The cast type used in lvalue asm contraint input. +REPLACE_CASTS = ( + "(UDItype)", + "(USItype)", + "(unsigned int)", +) + +def multireplace(string, repl): + if not repl: + return string + + # Place longer string first, to avoid shorter substring to match first. + rep_sorted = sorted(repl, key=len, reverse=True) + rep_escaped = map(re.escape, rep_sorted) + pattern = re.compile("|".join(rep_escaped), 0) + + return pattern.sub(lambda match: "", string) + + +def get_parser(): + def strbool(string): + return True if string.lower() == 'yes' else False + + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--filter', dest='filter', + help='Filter out inoine asm casts', + type=strbool) + parser.add_argument('input', help='Input file') + parser.add_argument('output', help='Ouput file') + return parser + + +def main(argv): + """The main entry point.""" + parser = get_parser() + opts = parser.parse_args(argv) + with open(opts.input, 'r') as i_file, open(opts.output, 'w') as o_file: + for line in i_file: + replace = REPLACE_CASTS \ + if opts.filter and any(substring in line for substring in CONSTRAINT_LIST) \ + else None + o_file.write(multireplace(line, replace)) + + +if __name__ == '__main__': + main(sys.argv[1:]) diff --git a/stdlib/longlong.h b/stdlib/longlong.h.in similarity index 100% rename from stdlib/longlong.h rename to stdlib/longlong.h.in diff --git a/stdlib/strtod_l.c b/stdlib/strtod_l.c index 3ebb491e22..fe59907cb2 100644 --- a/stdlib/strtod_l.c +++ b/stdlib/strtod_l.c @@ -81,7 +81,7 @@ extern double ____strtod_l_internal (const char *, char **, int, locale_t); #include #include #include "gmp-impl.h" -#include "longlong.h" +#include #include "fpioconst.h" #include From patchwork Wed Nov 2 14:55:59 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella Netto X-Patchwork-Id: 59790 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5AA7B385734D for ; Wed, 2 Nov 2022 14:57:32 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5AA7B385734D DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1667401052; bh=SyEPeYodkCq/2atNkFu45XtsxZhktsk62j2Uwbn9q/Y=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=ABbXvGbBLTd1RMS+r2fwFkSLheYzHwvIppQyEXUZwBpQEUUzRyMxdvFGD9xNh+2IF Gg1nSLGhBR0rpnfTOYAFJ8wP0nbsjcownLx8WoRWhDXOj18dCRdH2a1IRMPsLQGiOC T3t8tst+yCvANVTMPkC2VzJPQuhrGGaUyXjPsUqc= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-oi1-x22e.google.com (mail-oi1-x22e.google.com [IPv6:2607:f8b0:4864:20::22e]) by sourceware.org (Postfix) with ESMTPS id 4F081385741C for ; Wed, 2 Nov 2022 14:56:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4F081385741C Received: by mail-oi1-x22e.google.com with SMTP id c129so7643438oia.0 for ; Wed, 02 Nov 2022 07:56:18 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SyEPeYodkCq/2atNkFu45XtsxZhktsk62j2Uwbn9q/Y=; b=LvtqPigTk0xmpo+O9XJY11buKm21ZLrIRp6dtSlkfiahNcG2iMBKPp8ors7pt3EDCN jGaotZGeeLP4HHzWnbix3bCYBKXXPcF33PUQa7Zl7VALN1r9Cy0M3FiPoz4cN41zOKX1 wWlVfjQjsuIaCZkudqq6lz1qX1LsSINqcHnKkDwadpPKP+6QfNeMiyFgaKEY1NybBbAG 2AlI9IA118j9iFTlTWMvIv1c0t8F9kHKTQcMw00mYFuxNXfEzNN4uF/kVkSFkcmXokZ9 Nzabu24S10c30mlnaYuVQb6yZgmxXzodeDOtBuHRYqwLPyswVO4lw/IcSpzO5Q70QdlM XoOw== X-Gm-Message-State: ACrzQf3fw9yfnSpSdQ1MpRqTptxY0B2JG24Q+r8CcRenXzVvt5eFeH72 0qmO8z2PrU6lCSpOwaEzNwDT+go/L777bvUR X-Google-Smtp-Source: AMsMyM7VGjXnV3Cxo32ahIPcNz15QvD8of2Stl2lhSIf1FcVcwzJZ5QsRdaztbei4062sqPcVRIzgA== X-Received: by 2002:a05:6808:1287:b0:359:5686:b7b2 with SMTP id a7-20020a056808128700b003595686b7b2mr13280701oiw.37.1667400977273; Wed, 02 Nov 2022 07:56:17 -0700 (PDT) Received: from mandiga.. ([2804:1b3:a7c0:a9f4:967f:f7c:c187:85d7]) by smtp.gmail.com with ESMTPSA id 37-20020a9d0328000000b00661af2f9a1asm5205767otv.49.2022.11.02.07.56.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Nov 2022 07:56:16 -0700 (PDT) To: libc-alpha@sourceware.org, Fangrui Song Subject: [PATCH v2 4/4] Apply asm redirection in gmp.h before first use Date: Wed, 2 Nov 2022 11:55:59 -0300 Message-Id: <20221102145559.1962008-5-adhemerval.zanella@linaro.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221102145559.1962008-1-adhemerval.zanella@linaro.org> References: <20221102145559.1962008-1-adhemerval.zanella@linaro.org> MIME-Version: 1.0 X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, 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 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-Patchwork-Original-From: Adhemerval Zanella via Libc-alpha From: Adhemerval Zanella Netto Reply-To: Adhemerval Zanella Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" 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. Reviewed-by: Fangrui Song --- 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 #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