From patchwork Mon Nov 14 15:26:56 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Krebbel X-Patchwork-Id: 19859 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a5d:6687:0:0:0:0:0 with SMTP id l7csp2206232wru; Mon, 14 Nov 2022 07:28:22 -0800 (PST) X-Google-Smtp-Source: AA0mqf4H5lCYrjxVH0B98rlEwEnE36nbTmar8Rap9shWy1lP1zcEFjLwaE+2PZerapVz2bWXyYJD X-Received: by 2002:aa7:ce03:0:b0:461:72cb:e5d with SMTP id d3-20020aa7ce03000000b0046172cb0e5dmr11535356edv.410.1668439702808; Mon, 14 Nov 2022 07:28:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668439702; cv=none; d=google.com; s=arc-20160816; b=g3KGUMx4WDpl1qgYV/f0tvLZoPJGzHnkFvBHKLu0eWtYb9MRuvpx5vA8QlYnLpj01M NpRVpKj4RGnXFLfW2+UT7k5/dJT3kzLsS+Cp7ji8uwa6U9O8xaW6ySq2DfeLRIx4B/ln NgNBfgB99V/rYvyYx21hFjAH04GLH2Jfh1ZMRdYL6ukPIyCgzFLyEY73PDh9QfcoQN88 wMzHO3aE+s9LrlwapPSmXJQV6IeWHz+78+9FAc7vnlo4NweSOAJP3nIKBjZhCX7OhYaj sLlfOQyc0qTVrk92C9vzr/ZPAiJQHtJhCaIbxXaJg+qerYSbuM71ZOofqCPBedB1v2id SQpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:reply-to:from:list-subscribe:list-help:list-post :list-archive:list-unsubscribe:list-id:precedence :content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:dmarc-filter:delivered-to:dkim-signature :dkim-filter; bh=yafJBmYE8qTb5lJPP5ThaYAYKx717WZ6Kc7VAAoeFCM=; b=AG8+MEFGzUF8fyjfSlaqjlUU7hvhJnGhXsCOtWbtdwtr30kQwKIzkhLbvkqcKRPvqu Dsk5nTkH2b3v0TYFexzuTpBMrCkz6u2/VFlzw+Jt5fwMVNx+sfP9fzT+b4eZPzSXFqkA moAfFX8VgwTq/fDnzClY5iSQ8sHqoqvJfQc8mmDyTym1wDoGvPeGWCDWRyJt4teToeYG 5QQYwAPhvY2kSLzakutLh25MihL1WcBVG4JStL4tA/v2ody20cN96WuuZP3DyBQAo3M/ 4/B/u7Y/SV3fn7wRilyMmblOVgT5ULCKiTbpZay9IHGY1OaGlNkhPMxuubNRswfpbhrC HUIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=oC2YAA9B; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id qw18-20020a1709066a1200b00773db351c39si8693878ejc.64.2022.11.14.07.28.22 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Nov 2022 07:28:22 -0800 (PST) Received-SPF: pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@gcc.gnu.org header.s=default header.b=oC2YAA9B; spf=pass (google.com: domain of gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=gnu.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 95A0D3835797 for ; Mon, 14 Nov 2022 15:27:55 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 95A0D3835797 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1668439675; bh=yafJBmYE8qTb5lJPP5ThaYAYKx717WZ6Kc7VAAoeFCM=; 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=oC2YAA9BVQdeWhN9hTNb915R1FBa1jy1Pe2EUHOQjMr5i6Lv/iXGELQMzyvODZDCr zbCzNWfPGiMVBqs5GkCSPbKt8y+K270Dm8P8bD9M8Sii20NtXLPR0FkBPRMmQegzF5 ipwr8mTrBXj4usCpIpWet5ZYSB2HlHv8u6ZH9l04= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 0C2533858404 for ; Mon, 14 Nov 2022 15:27:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0C2533858404 Received: from pps.filterd (m0098396.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.17.1.19/8.17.1.5) with ESMTP id 2AEFPteX017364 for ; Mon, 14 Nov 2022 15:27:04 GMT Received: from ppma06fra.de.ibm.com (48.49.7a9f.ip4.static.sl-reverse.com [159.122.73.72]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 3kurafr0db-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 14 Nov 2022 15:27:03 +0000 Received: from pps.filterd (ppma06fra.de.ibm.com [127.0.0.1]) by ppma06fra.de.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 2AEFLlY0001457 for ; Mon, 14 Nov 2022 15:27:01 GMT Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by ppma06fra.de.ibm.com with ESMTP id 3kt2rj21da-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Mon, 14 Nov 2022 15:27:01 +0000 Received: from d06av25.portsmouth.uk.ibm.com (d06av25.portsmouth.uk.ibm.com [9.149.105.61]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 2AEFQwi766126128 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 14 Nov 2022 15:26:58 GMT Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8C2AB11C050 for ; Mon, 14 Nov 2022 15:26:58 +0000 (GMT) Received: from d06av25.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 649FB11C04A for ; Mon, 14 Nov 2022 15:26:58 +0000 (GMT) Received: from li-ecc9ffcc-3485-11b2-a85c-e633c5126265.fritz.box (unknown [9.179.13.145]) by d06av25.portsmouth.uk.ibm.com (Postfix) with ESMTP for ; Mon, 14 Nov 2022 15:26:58 +0000 (GMT) To: gcc-patches@gcc.gnu.org Subject: [PATCH 1/2] New reg note REG_CFA_NORESTORE Date: Mon, 14 Nov 2022 16:26:56 +0100 Message-Id: <20221114152657.43632-2-krebbel@linux.ibm.com> X-Mailer: git-send-email 2.38.1 In-Reply-To: <20221114152657.43632-1-krebbel@linux.ibm.com> References: <20221114152657.43632-1-krebbel@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-GUID: R9CarSX06k2OWL4Cnso3ufnbeN4sKKB8 X-Proofpoint-ORIG-GUID: R9CarSX06k2OWL4Cnso3ufnbeN4sKKB8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.895,Hydra:6.0.545,FMLib:17.11.122.1 definitions=2022-11-14_12,2022-11-11_01,2022-06-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 lowpriorityscore=0 mlxlogscore=930 malwarescore=0 suspectscore=0 impostorscore=0 adultscore=0 mlxscore=0 phishscore=0 priorityscore=1501 spamscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2210170000 definitions=main-2211140107 X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_MSPIKE_H2, 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: 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: Andreas Krebbel via Gcc-patches From: Andreas Krebbel Reply-To: Andreas Krebbel Errors-To: gcc-patches-bounces+ouuuleilei=gmail.com@gcc.gnu.org Sender: "Gcc-patches" X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1749485829784265876?= X-GMAIL-MSGID: =?utf-8?q?1749485829784265876?= This patch introduces a new reg note which can be used to tell the CFI verification in dwarf2cfi that a register is stored without intending to restore from it. This is useful when storing e.g. register contents to the stack and generate CFI for it although the register is not really supposed to be restored. gcc/ChangeLog: * dwarf2cfi.cc (dwarf2out_frame_debug_cfa_restore): Add EMIT_CFI parameter. (dwarf2out_frame_debug): Add case for REG_CFA_NORESTORE. * reg-notes.def (REG_CFA_NOTE): New reg note definition. --- gcc/dwarf2cfi.cc | 15 ++++++++++----- gcc/reg-notes.def | 5 +++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gcc/dwarf2cfi.cc b/gcc/dwarf2cfi.cc index bef3165e691..6686498d7cc 100644 --- a/gcc/dwarf2cfi.cc +++ b/gcc/dwarf2cfi.cc @@ -1496,10 +1496,12 @@ dwarf2out_frame_debug_cfa_val_expression (rtx set) update_row_reg_save (cur_row, dwf_regno (dest), cfi); } -/* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE note. */ +/* A subroutine of dwarf2out_frame_debug, process a REG_CFA_RESTORE + note. When called with EMIT_CFI set to false emitting a CFI + statement is suppressed. */ static void -dwarf2out_frame_debug_cfa_restore (rtx reg) +dwarf2out_frame_debug_cfa_restore (rtx reg, bool emit_cfi = true) { gcc_assert (REG_P (reg)); @@ -1507,7 +1509,8 @@ dwarf2out_frame_debug_cfa_restore (rtx reg) if (!span) { unsigned int regno = dwf_regno (reg); - add_cfi_restore (regno); + if (emit_cfi) + add_cfi_restore (regno); update_row_reg_save (cur_row, regno, NULL); } else @@ -1522,7 +1525,8 @@ dwarf2out_frame_debug_cfa_restore (rtx reg) reg = XVECEXP (span, 0, par_index); gcc_assert (REG_P (reg)); unsigned int regno = dwf_regno (reg); - add_cfi_restore (regno); + if (emit_cfi) + add_cfi_restore (regno); update_row_reg_save (cur_row, regno, NULL); } } @@ -2309,6 +2313,7 @@ dwarf2out_frame_debug (rtx_insn *insn) break; case REG_CFA_RESTORE: + case REG_CFA_NORESTORE: n = XEXP (note, 0); if (n == NULL) { @@ -2317,7 +2322,7 @@ dwarf2out_frame_debug (rtx_insn *insn) n = XVECEXP (n, 0, 0); n = XEXP (n, 0); } - dwarf2out_frame_debug_cfa_restore (n); + dwarf2out_frame_debug_cfa_restore (n, REG_NOTE_KIND (note) == REG_CFA_RESTORE); handled_one = true; break; diff --git a/gcc/reg-notes.def b/gcc/reg-notes.def index 704bc75b0e7..ab08e65eedc 100644 --- a/gcc/reg-notes.def +++ b/gcc/reg-notes.def @@ -157,6 +157,11 @@ REG_CFA_NOTE (CFA_VAL_EXPRESSION) first pattern is the register to be restored. */ REG_CFA_NOTE (CFA_RESTORE) +/* Like CFA_RESTORE but without actually emitting CFI. This can be + used to tell the verification infrastructure that a register is + saved without intending to restore it. */ +REG_CFA_NOTE (CFA_NORESTORE) + /* Attached to insns that are RTX_FRAME_RELATED_P, marks insn that sets vDRAP from DRAP. If vDRAP is a register, vdrap_reg is initalized to the argument, if it is a MEM, it is ignored. */