From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-00069f02.pphosted.com (mx0a-00069f02.pphosted.com [205.220.165.32]) by sourceware.org (Postfix) with ESMTPS id 91ECC385B523 for ; Thu, 28 Mar 2024 23:43:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 91ECC385B523 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 91ECC385B523 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.165.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1711669445; cv=pass; b=opIh8n96sotiO3rZNaM4++cj0WZum40GSw9pgLRaRUWv5iFDEr8b0sNV+PXZUavG6YGqHOS/UiBgN582A/rkjn9PhIy6dJkjfmYeOKJiLcENMqO2YfUa4IcujH5QE7o2BEBI2MD2nLvO67CleyhDDr5cwNBZwgGZ5oddihc9zn0= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1711669445; c=relaxed/simple; bh=t86eHZtZ/TyZjlZMv4f89TeGMKo+5Jfm1z3VVYXJgn0=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=urHY2xRICGhrf0rNfdQ6vatxXe07RToaY77AK6BG0M1LBc3WNf/rKaO4KPlH3Ben6guqX1NjOK4LZwm4omPnQ/4FX+6hj/oSRATgAgdhuFUH572QeIc1L/W6DUIJvNtUHbyKklVwRbGJTKDTA2Z8lthajHgdNgZihxafR6WLeh4= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 42SLgvm1002179 for ; Thu, 28 Mar 2024 23:43:58 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=BwtNWehDBgI3Q0KUGYj7O4VfLG0DEveqmnYAeKB9B+M=; b=AjE2+vgS0PWp6I3TsAzjDQ1zKgXcjGcNURIItBh4pc7UU8RKMRlsmWgkWb7Pp7FcADPG ncRc6yw2WXDsqUN8FQZKAsWL6+M1NZJkDrbrXd9VcikEVpxhScsmTjWuDqDeXAtsKHiJ KL2fVRB+UbjUkxuGUCNvMvzUp+nbFza6Hc8wUdAnrYwU3DJKj3wtOJM6DPj4KLcKkw9f QPL/DJNwwARicZKr7KvZPnT83mJkxWvbhosP+5Lu4QuQlu0z5DDGkh2vGpEfpqDLmKLO kchCEph8EVjln4pvOMtCru9ngnFvKurbwmRFVAzYIZXJFvUY2AqJRmKjc6/i6x2nYgLV MA== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3x1np2juuq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 28 Mar 2024 23:43:58 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 42SLrgrC014379 for ; Thu, 28 Mar 2024 23:43:57 GMT Received: from nam04-dm6-obe.outbound.protection.outlook.com (mail-dm6nam04lp2040.outbound.protection.outlook.com [104.47.73.40]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3x1nhanw5w-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 28 Mar 2024 23:43:57 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oeU/aiZTzbclpg7Gd3CldIYGnomVephVx7r9GupoqCsojwTAEeYSJfdzABUioHT6k1GODUCnh2bd19Hp6FrV6tRjMX2H55zB61HJlzUfqDNRTMvJ1Me4D/kMHlVg6d5ghPDziSyJ5Z0EIzk1pzimrfSWrD8gyeE5jtXY6aIsrjzfL/eWYlpN92Q3m5BEQ5IT5xWH5osLEwFCYhZeyiDjC1gVhhKpqMa2qhI+hPOj7Bzjz2swi0JMk4T2osoF27cg18ErpgTmO/3ocWcTo7jTBeP1A5zTRXR2KYz8hhMjOOWGNAOC3ytW+yLo2fdlQqsfAWCM0uNaVjKfVE9WFf5Y0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BwtNWehDBgI3Q0KUGYj7O4VfLG0DEveqmnYAeKB9B+M=; b=kdOB0GHt8xp8snsuRUw4maUK5LEg/49izrlkA+iHAQm4lNDNVgbw7reEFhzJOe8/DVo+LBtekxh2q0FVXJ7YVSsvGn0ckCOgchoB46NJrYrnQvJ3ksMd6HRJq8cykgjpFAHm4hL8LbN+wFeVTJ+f46ky+SJXx0RteJJSDqFVSdKzXBm/AdfaAV1+XmcCH5EmIXtsDMH9vneJ0tqoxZDnCG8XxHB4nS56AEpFY2+6N/fJNVv3y2Gf0Qcn1RyEuZjPZM7/4L9AcavcjLpSOtJdU2/qDW1YR4h6960u79Xo29qCv5gjS17FcExPCeAWr+srePB10jvkC9l2sm4fXgOBYQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BwtNWehDBgI3Q0KUGYj7O4VfLG0DEveqmnYAeKB9B+M=; b=FfSESHbA3PGv4IxbdJy95zsOiKu2C0SiQcUolhhodoVt6kEpFIWZIGcWg9MSdHiemThpjDT/DgM/QzlMOJnAvTcupnxUMPuV0ms3uQ46/WdOIcUKSwwITWs9ZYbgb2lrpIvcZW+DzSIRFn7DLNc8RwrVII5uHXYpGrCfZruZXoc= Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by BY5PR10MB4147.namprd10.prod.outlook.com (2603:10b6:a03:20e::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.33; Thu, 28 Mar 2024 23:43:55 +0000 Received: from MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::6ae9:dd4d:17bc:4f2]) by MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::6ae9:dd4d:17bc:4f2%7]) with mapi id 15.20.7409.031; Thu, 28 Mar 2024 23:43:54 +0000 From: Indu Bhagat To: binutils@sourceware.org Cc: Indu Bhagat Subject: [PATCH 2/2] gas: scfi: bugfixes for SCFI state propagation Date: Thu, 28 Mar 2024 16:43:43 -0700 Message-ID: <20240328234343.3397845-3-indu.bhagat@oracle.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240328234343.3397845-1-indu.bhagat@oracle.com> References: <20240328234343.3397845-1-indu.bhagat@oracle.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: MW4PR03CA0058.namprd03.prod.outlook.com (2603:10b6:303:8e::33) To MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR1001MB2158:EE_|BY5PR10MB4147:EE_ X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wfCMbhrW/gxSpqC1YEkbNR6Wc0Qbil8qkunBAsNfi20PtlYHasF6mPgxJPdpa85KmAVhr0Mg7XI1uUZ+afakovnvnv9m2iz06SdcQ3wlDTP0vovKvCerY1o4UBsMG5SwlJuf9K5YyM4a2RreKNZfReoV4mpRkY0S+H18zWEokKYFNHjHz9+VFjcNh8y6cEuPSWynKCaf1Ds0nhQJvleduwPtsykwU9RLLLR8fZKmaqZlIr3H6M7Cu6MrhI83qkyfk/D16mUwMTSd6vVGrtlDoF5i1JNNTzG6lBxcN8ijREuEiyKdnOuZMVy3tsOXpppTI3GYcYn4k3kTIlCZoeZpH0SLv6qvS1Z3chL69eNQIRAgXPvE0Z+MvQ1/Giz1GBkMcejo0obOaiczOUJpRqqpyWqepUCzOAxpeLXpzNq0fHZgry8MZj27wiw4X7Mo4PcTLNXnbjMC3ZsuZ8LLnm0o+7NeqFZK0FW8PQiB+tdGdra+a3mkY88upAdibKCghfj3rRXh8rFnJM5IQFwdCA6pwTH7Wil0mwR4AoH6AyZa1XweFSPk5bc6ytXG/x0sLJd73bab4/bHDGCfhkv7XxGriJS0tI2UyIMVfaYcCE8Tl+E6PJ5bkf6wwd1ayOCf86pLgg582l48xh3RHUPMsQyP/1Qk4sAoNcJmCQjOQJhp4eE= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR1001MB2158.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(1800799015)(376005)(366007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?WwIXnULbE7xh0/Z02F5sJ50RJnIJCtJ1Vz1WJ4UeDtDVz4fXchn4glWszB7r?= =?us-ascii?Q?IGc5PzNX5YBeeWNIi4H25ntvKGdPq4kSAykUkfFHJPjhMeOZyLRzb+6Ji1Gd?= =?us-ascii?Q?nCda/2y0kyrUxFF3GoNh9Jm6fOVBJBox1aCbJfgkIsK7XlEsbgzJXXas0s5d?= =?us-ascii?Q?r0frs6DGa/qxQKX7oq46edyNInlNJol9lztcs8rOE6+ZF71d6FFlNibeOD0q?= =?us-ascii?Q?5frp3uCiTmxO5ZVHWHeIEcGudii3sPFw/usysyySnfxblDscDIc5Y3CZZi+m?= =?us-ascii?Q?EBpGw6f0jlG587AITHnkA52f6TSM5aE1NVBehbvhUNPcfzWERtUcNyhage8/?= =?us-ascii?Q?VwxATiMPl0qgGkSELEq8zmt23FQ6tcX3PgAtvnSI9Nhp5otl0IC7XNfdwhYx?= =?us-ascii?Q?QzWw8/VFZbGKL2SgIKz1qlLLB3LlJUgeULmbANShQWtjBjJnAknMalX7pGYA?= =?us-ascii?Q?EsNsiWQrkPqpbg3GuRud//MiGoMhGRgdlPv3K6X3x3jcbKHmrrZHnDyPfrsF?= =?us-ascii?Q?fHVsJ4mytN3DhCJQLehQVmSurlSqX5YJRG937rbhZnmqiw4BkRMwU/fRBE6Y?= =?us-ascii?Q?95O6GGmF46HJbZfYYqNRbWKQjM/tQ2oVjEoGCAOgCnT3QVIXQ4oLkhWBVtMV?= =?us-ascii?Q?cdQZIMZcB/cGAk0MJDJxTWWpDVnCIeP6csdI7pezKoudJLkeOEgzoLX60dAU?= =?us-ascii?Q?MmQ7DiuCWQ2TWUiWv/k4mP+FvuKwxDNsWyN5FYIn0tz6i8AmZGT/stewgnEx?= =?us-ascii?Q?AH8VEiIE5CBeNGCsprLqslGGsjL74igK3p2RpnL9edptQ+TqiOR1jGC7BGbp?= =?us-ascii?Q?G43eDxYhdGguNC98EuYt9Qd7BYuuwlZC3l06LQ+Z2kX1KoyKiWx+Jurqxfbn?= =?us-ascii?Q?JTDXt60bfn+LA4hvPtp0osMxLNyw0rNWFQggoOMC+tX/IUF0ZbMufojll4qZ?= =?us-ascii?Q?glXcdjID7kz4bluLMQNd+5NDjVbCYiLlXRPPojYnEnoILYhGLDxIyuCSoCKS?= =?us-ascii?Q?cjfzK6KLSAa3ltTrWYc9xlR5wgG8T8yQddv1hW0yHnWvQARCv/5KCa4ReWCX?= =?us-ascii?Q?08VxQW06dZlXC7jiFzZrLCA9qeCBpzUeX8ZJiqqNjOAmmTFJB/jbEhP2fmUY?= =?us-ascii?Q?/Slhd51oCMfMBDVa/fQkQjRfHLbwp7wlctIJCkyVBMLRAw8Il/hpTZHAvP9q?= =?us-ascii?Q?EZsSYfQBJQOLk/b4NuZG3ha9DPxQtanZlT8RFgP5OMw5qfUUAlXxn223s6IW?= =?us-ascii?Q?xLx3O2AOXv4nVlEArecETR/PbFO7Gpc06g+LYL4VzXzVR7tr5LbgcFpMYZ7y?= =?us-ascii?Q?pMN/5fzXe/+McBExP8UpIdrnUjjO5VjCCcYes+5+mKc6O6eyJ4UhmKDeS+Se?= =?us-ascii?Q?vajDzM8JcaKWqSi4U08YTsS5kswrb8qu4yYOPVwIPGlTxLCSxjaowzJB+2uq?= =?us-ascii?Q?9ZRLMYQ7N+1FJ6uNYVMh0V5yEv+Z+vSb8ZWU7RLctGovmKgYjXF+IxTs70Hl?= =?us-ascii?Q?NbNe6+kDk+FgUqXj6Jl49il+DjK4Mh5rcbikPXna2zDJmOyrZyPKrM+5kgX7?= =?us-ascii?Q?QcWfuiB71JiYb7B9RiZC8LzhRwos5sMritRE3OEpMOlNldapiY8d7uNg9BxW?= =?us-ascii?Q?3JxcxUTWf/QYF79XklBTbdQ=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Al0PMA/Q2FtmKobZf2C7EQofHwQUJaUVWvoOYfQUMiCKS8lx49E/y2wOb9KRmz7cq5LDbgd1hhHYGUp6qRXR5PM8Wzhba3VS+ZoNlw+hgduU9K88NtYIDRN8NtEs+ChG9PntR1QNTPGY9+G/d1IZUrsfBwr3BAx1LSrKFyqi9vmIDr5Mca8bDEUC4GcCijT73rtyb/MuTR9Pw23v4zalzIWreZb0lv8I0kPEzhZ9vogthS35KRhCAtukgX4mT8Bz0Ys7pmKYjUtgWK9uq7zQFH9Z9J1TpEf3WNeHGQ813xRQcf+7IcPmKOw004bX/k9jd/4jr0g1BQG2/ZHS+ClTK3X8GWkSRE1miM6ED/yer4oL4JCwCp0T/ljCoC350ULl4dLBdN96YB/DWIrTnlGilL7Fzar6QpG5wAN4Rbi38Fvg1zf76OLr8AACahE/VtdEz5P0CzSZOqQocHz1NTXmC9BkUCFeHDyDQGnyeQVXkSBFwtMGDEDvcaCD7RZ4IlLawrAxAoCYVtzmm5gy42U9m5eMxM9efRm/GucXy0/AWoUkW2Y+pv22dJSFHhY+4dVwlFssQd/hh7hCVsQvc6+XQmKOgB4U+/ymzHM3AXp13dE= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9fb5eec8-1110-41a1-0df3-08dc4f80ee11 X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2158.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2024 23:43:54.9313 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4HsSmryBHE9zceRuSuUBBivkLE2vBneQz9G719KwG2WAbWfHVYyt3bI4hqrnmtlK8Gc4jZ6SZ7Btk2R0sE4Xow== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR10MB4147 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.1011,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2024-03-28_17,2024-03-28_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 malwarescore=0 phishscore=0 mlxscore=0 mlxlogscore=962 spamscore=0 bulkscore=1 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2403210000 definitions=main-2403280171 X-Proofpoint-GUID: zvH-1gqzL8oq1FL-twgpbSqT4bXvQPHf X-Proofpoint-ORIG-GUID: zvH-1gqzL8oq1FL-twgpbSqT4bXvQPHf X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,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: There are two state propagation functions in SCFI machinery - forward and backward flow. The patch addresses two issues: - In forward_flow_scfi_state (), the state being compared in forward flow must be that at the exit of a prev bb and that at the entry of the next bb. The variable holding the state to be compared was previously (erroneously) stale. - In cmp_scfi_state (), the assumption that two different control flows, leading to the same basic block, cannot have a mismatched notion of CFA base register, is not true. Remove the assertion and instead return err if mismatch. Fixing these issues helps correctly synthesize CFI, when previously SCFI was erroring out for an otherwise valid input asm. gas/ * scfi.c (cmp_scfi_state): Remove assertion and return mismatch in return value as applicable. (forward_flow_scfi_state): Update state object to be the same as the exit state of the prev bb before comparing. gas/testsuite/ * gas/scfi/x86_64/scfi-x86-64.exp: Add new test. * gas/scfi/x86_64/scfi-cfg-5.d: New test. * gas/scfi/x86_64/scfi-cfg-5.l: New test. * gas/scfi/x86_64/scfi-cfg-5.s: New test. --- gas/scfi.c | 20 ++++++---- gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.d | 39 +++++++++++++++++++ gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.l | 2 + gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.s | 32 +++++++++++++++ gas/testsuite/gas/scfi/x86_64/scfi-x86-64.exp | 2 + 5 files changed, 87 insertions(+), 8 deletions(-) create mode 100644 gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.d create mode 100644 gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.l create mode 100644 gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.s diff --git a/gas/scfi.c b/gas/scfi.c index 37cc85cfed7..929ea8a73e1 100644 --- a/gas/scfi.c +++ b/gas/scfi.c @@ -155,7 +155,7 @@ cmp_scfi_state (scfi_stateS *state1, scfi_stateS *state2) int ret; if (!state1 || !state2) - ret = 1; + return 1; /* Skip comparing the scratch[] value of registers. The user visible unwind information is derived from the regs[] from the SCFI state. */ @@ -164,10 +164,12 @@ cmp_scfi_state (scfi_stateS *state1, scfi_stateS *state2) /* For user functions which perform dynamic stack allocation, after switching t REG_FP based CFA tracking, it is perfectly possible to have stack usage - in some control flows. However, double-checking that all control flows - have the same idea of CFA tracking before this wont hurt. */ - gas_assert (state1->regs[REG_CFA].base == state2->regs[REG_CFA].base); - if (state1->regs[REG_CFA].base == REG_SP) + in some control flows. Further, the different control flows may even not + have the same idea of CFA tracking (likely later necessitating generation + of .cfi_remember_state / .cfi_restore_state pair). */ + ret |= state1->regs[REG_CFA].base != state2->regs[REG_CFA].base; + + if (!ret && state1->regs[REG_CFA].base == REG_SP) ret |= state1->stack_size != state2->stack_size; ret |= state1->traceable_p != state2->traceable_p; @@ -911,11 +913,11 @@ gen_scfi_ops (ginsnS *ginsn, scfi_stateS *state) return ret; } -/* Recursively perform forward flow of the (unwind information) SCFI state +/* Recursively perform forward flow of the (unwind information) SCFI STATE starting at basic block GBB. - The forward flow process propagates the SCFI state at exit of a basic block - to the successor basic block. + The core of forward flow process takes the SCFI state at the entry of a bb + and updates it incrementally as per the semantics of each ginsn in the bb. Returns error code, if any. */ @@ -961,6 +963,8 @@ forward_flow_scfi_state (gcfgS *gcfg, gbbS *gbb, scfi_stateS *state) bb_for_each_edge(gbb, gedge) { gbb = gedge->dst_bb; + /* Ensure that the state is the one from the exit of the prev bb. */ + memcpy (state, prev_bb->exit_state, sizeof (scfi_stateS)); if (gbb->visited) { ret = cmp_scfi_state (gbb->entry_state, state); diff --git a/gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.d b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.d new file mode 100644 index 00000000000..5a0a2e1f927 --- /dev/null +++ b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.d @@ -0,0 +1,39 @@ +#as: --scfi=experimental -W +#as: +#objdump: -Wf +#name: Synthesize CFI in presence of control flow 5 +#... +Contents of the .eh_frame section: + +00000000 0+0014 0+0000 CIE + Version: 1 + Augmentation: "zR" + Code alignment factor: 1 + Data alignment factor: -8 + Return address column: 16 + Augmentation data: 1b + DW_CFA_def_cfa: r7 \(rsp\) ofs 8 + DW_CFA_offset: r16 \(rip\) at cfa-8 + DW_CFA_nop + DW_CFA_nop + +0+0018 0+002c 0000001c FDE cie=00000000 pc=0+0000..0+0017 + DW_CFA_advance_loc: 1 to 0+0001 + DW_CFA_def_cfa_offset: 16 + DW_CFA_offset: r6 \(rbp\) at cfa-16 + DW_CFA_advance_loc: 3 to 0+0004 + DW_CFA_def_cfa_register: r6 \(rbp\) + DW_CFA_advance_loc: 5 to 0+0009 + DW_CFA_remember_state + DW_CFA_advance_loc: 6 to 0+000f + DW_CFA_def_cfa_register: r7 \(rsp\) + DW_CFA_restore: r6 \(rbp\) + DW_CFA_def_cfa_offset: 8 + DW_CFA_advance_loc: 1 to 0+0010 + DW_CFA_restore_state + DW_CFA_advance_loc: 6 to 0+0016 + DW_CFA_def_cfa_register: r7 \(rsp\) + DW_CFA_restore: r6 \(rbp\) + DW_CFA_def_cfa_offset: 8 + +#pass diff --git a/gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.l b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.l new file mode 100644 index 00000000000..abca835a642 --- /dev/null +++ b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.l @@ -0,0 +1,2 @@ +.*Assembler messages: +.*5: Warning: SCFI ignores most user-specified CFI directives diff --git a/gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.s b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.s new file mode 100644 index 00000000000..80b081ffe07 --- /dev/null +++ b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-5.s @@ -0,0 +1,32 @@ + .text + .globl foo + .type foo, @function +foo: + .cfi_startproc + push %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + mov %rsp, %rbp + .cfi_def_cfa_register %rbp + cmpl $-1, %eax + jne .L1 +.L2: + .cfi_remember_state + call bar + pop %rbp + .cfi_def_cfa_register %rsp + .cfi_restore %rbp + .cfi_def_cfa_offset 8 + ret + +.L1: + .cfi_restore_state + testq %rax, %rax + je .L2 + pop %rbp + .cfi_def_cfa_register %rsp + .cfi_restore %rbp + .cfi_def_cfa_offset 8 + ret + .cfi_endproc + .size foo,.-foo diff --git a/gas/testsuite/gas/scfi/x86_64/scfi-x86-64.exp b/gas/testsuite/gas/scfi/x86_64/scfi-x86-64.exp index 63f0d7e4700..a91dc9df9e5 100644 --- a/gas/testsuite/gas/scfi/x86_64/scfi-x86-64.exp +++ b/gas/testsuite/gas/scfi/x86_64/scfi-x86-64.exp @@ -82,6 +82,8 @@ if { ([istarget "x86_64-*-*"] && ![istarget "x86_64-*-linux*-gnux32"]) } then { run_list_test "scfi-cfg-3" "--scfi=experimental --warn" run_dump_test "scfi-cfg-4" run_list_test "scfi-cfg-4" "--scfi=experimental --warn" + run_dump_test "scfi-cfg-5" + run_list_test "scfi-cfg-5" "--scfi=experimental --warn" run_dump_test "scfi-asm-marker-1" run_list_test "scfi-asm-marker-1" "--scfi=experimental --warn" run_dump_test "scfi-asm-marker-2" -- 2.43.0