From patchwork Mon Feb 21 07:51:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: "Li, Pan2 via Gcc-patches" X-Patchwork-Id: 51252 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 D9FD9385AC0A for ; Mon, 21 Feb 2022 07:53:02 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D9FD9385AC0A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1645429982; bh=XKGmLAG2Go7Ir7htIbwqsVQNuP7320xay4cxsg9/sAQ=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=SyvhTlKd9I3zfg9GR62pSc9dENw0g1vMyez1giJYdqv55dVa0aqHsFj94i6ddvN1h uGiqSO+S8/0vzX9xiBovW66gmgiKb00TVTV4iba+zNq+4H135yTGX1Zwqjg1Sye1ht lLpg8I+vCtUAxYAOY2PORAKKBRAajNI4Ubwnr2R8= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from magnesium.8pit.net (magnesium.8pit.net [45.76.88.171]) by sourceware.org (Postfix) with ESMTP id 0799B385C415; Mon, 21 Feb 2022 07:52:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0799B385C415 Received: from localhost (ip5f5ae040.dynamic.kabel-deutschland.de [95.90.224.64]) by magnesium.8pit.net (OpenSMTPD) with ESMTPSA id d512dec4 (TLSv1.3:AEAD-AES256-GCM-SHA384:256:YES); Mon, 21 Feb 2022 08:52:20 +0100 (CET) To: gcc-patches@gcc.gnu.org Subject: [PATCH] x86: Fix -fsplit-stack feature detection via TARGET_CAN_SPLIT_STACK Date: Mon, 21 Feb 2022 08:51:17 +0100 Message-Id: <20220221075116.11790-1-soeren@soeren-tempel.net> X-Mailer: git-send-email 2.35.1 MIME-Version: 1.0 X-Spam-Status: No, score=-13.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE 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: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: soeren--- via Gcc-patches From: "Li, Pan2 via Gcc-patches" Reply-To: soeren@soeren-tempel.net Cc: jakub@redhat.com Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" From: Sören Tempel Since commit c163647ffbc9a20c8feb6e079dbecccfe016c82e -fsplit-stack is only supported on glibc targets. However, this original commit required some fixups. As part of the fixup, the changes to the gnu-user-common.h and gnu.h where partially reverted in commit 60953a23d57b13a672f751bec0c6eefc059eb1ab thus causing TARGET_CAN_SPLIT_STACK to be defined for non-glibc targets even though -fsplit-stack is actually not supported and attempting to use it causes a runtime error. This causes gcc internal code, such as ./gcc/go/gospec.cc to not correctly detect that -fsplit-stack is not supported and thus causes gccgo to fail compilation on non-glibc targets. This commit ensures that TARGET_CAN_SPLIT_STACK is set based on the changes performed in 2c31a8be4a5db11a0a0e97c366dded6362421086, i.e. the new OPTION_GLIBC_P macro is now used to detect if -fsplit-stack is supported in the x86 header files. The proposed changes have been tested on x86_64 Alpine Linux (which uses musl libc) and fix compilation of gccgo for this target. Signed-off-by: Sören Tempel gcc/ChangeLog: * config/i386/gnu-user-common.h (defined): Only define TARGET_CAN_SPLIT_STACK for glibc targets. * config/i386/gnu.h (defined): Ditto. --- I hope this is the last fixup commit needed for the original -fsplit-stack change. Apologizes that the integration was a bit messy, I am simply not deeply familiar with the gcc code base. The change works fine on Alpine and fixes gccgo compilation but please review it carefully and make sure the macro guards for TARGET_CAN_SPLIT_STACK are aligned with the ix86_supports_split_stack implementation. Should we also check if TARGET_THREAD_SPLIT_STACK_OFFSET is defined? gcc/config/i386/gnu-user-common.h | 5 +++-- gcc/config/i386/gnu.h | 5 +++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/gcc/config/i386/gnu-user-common.h b/gcc/config/i386/gnu-user-common.h index 23b54c5be52..bb745c2edaa 100644 --- a/gcc/config/i386/gnu-user-common.h +++ b/gcc/config/i386/gnu-user-common.h @@ -66,7 +66,8 @@ along with GCC; see the file COPYING3. If not see #define STACK_CHECK_STATIC_BUILTIN 1 /* We only build the -fsplit-stack support in libgcc if the - assembler has full support for the CFI directives. */ -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE + assembler has full support for the CFI directives. Also + we only support -fsplit-stack on glibc targets. */ +#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE && defined(OPTION_GLIBC_P) #define TARGET_CAN_SPLIT_STACK #endif diff --git a/gcc/config/i386/gnu.h b/gcc/config/i386/gnu.h index 401e60c9a02..92a29149b2e 100644 --- a/gcc/config/i386/gnu.h +++ b/gcc/config/i386/gnu.h @@ -41,8 +41,9 @@ along with GCC. If not, see . #define TARGET_THREAD_SSP_OFFSET 0x14 /* We only build the -fsplit-stack support in libgcc if the - assembler has full support for the CFI directives. */ -#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE + assembler has full support for the CFI directives. Also + we only support -fsplit-stack on glibc targets. */ +#if HAVE_GAS_CFI_PERSONALITY_DIRECTIVE && defined(OPTION_GLIBC_P) #define TARGET_CAN_SPLIT_STACK #endif /* We steal the last transactional memory word. */