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 13D6E3858D20 for ; Thu, 28 Mar 2024 07:59:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 13D6E3858D20 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 13D6E3858D20 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=1711612763; cv=pass; b=mXpfYoTXS7tzwWtSMILMoJFJYCYq4lZnJKPRZdgcexG0TIb08LfecQaEdFKG+XHLfjP1FVorYjij+YDmKBQx7Vdr//y2PbRlNp07Mq7urTcmHqgQV2qa/1aiORvDhnJKqoVwJUNTGYbyIEGJ8BR8qtU9d0m5eiwBF2b6T0568eI= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1711612763; c=relaxed/simple; bh=LfGE9J/Sy+a55LxKX98hmONvVPnZXe3l4dl+dx0jBi8=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=x5DWU7iEhaGecPQf2FUWZQ2j3zB6hofEXisrIHH6RQgHq5ez2UQ7qu0PTC2UbU2+3PjSQM4b+Fgf6k7ZTz3zjMop51K9pS9UiLIjQe/zLt9rrvlEcrM+e323EwbMeSGYFuxoxbsaKBzD9Vv4ccMVv5f5YDZPPJ2Zmxs+i328lZA= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246617.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 42S7E8il000437 for ; Thu, 28 Mar 2024 07:59:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2023-11-20; bh=zmWP+0ShGhFP0QhcNx61E7OFyvSRpHoL8UPUdVY3ZNE=; b=JfMNHJeYHx98UbMFemYBbGV/VPlrc4lco9h6ETQ5phE077Xz/1G3NA1eGOfc4zdkBlgu EtRQYpEk6xk83/0tWO4ROFM7NWu1u8aQt8IMcZbbcjQIeh+V7w7f3XOmprKxwQw6a4VK B+ybL1RRGJbXO6x7OefHNvYDHO9hCmXVj0VYTHOkgWdjV42wpc5Q8lHCXA61z21tKJN+ e7PEEjpvhxjHzQgxt7eRmptHYJ52HkGguQD6fBKdFFwo/xgKGUu7kcNmdluNsM42PWbA /P0n5TFoToUI7zXH7MqQCOKVLgvgKgujUNQR173WEjqar42zFSSVyGwHSURIb1qwCXa8 ZQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3x2s9gykgy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 28 Mar 2024 07:59:18 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 42S6se19019064 for ; Thu, 28 Mar 2024 07:59:17 GMT Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2169.outbound.protection.outlook.com [104.47.59.169]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3x1nhfx71c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 28 Mar 2024 07:59:17 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=f9dGOND9fktZwkT5oUv3jq903CvCHpsy5/fyIvIA+U5Ya/6Y+QLy/uScdeubWP26mVWomgmP1Lsp96C552z3G2CufdXpI+7kJg8Olop/qb23McIFfOnCLKNx8MKlAXyzzpjtbK9otWgn93uOyqx7i9922CKZXOSuotakok1+6H7pQX1qxjsQZjK5fGR/Tk6jrSZFmYFL/ZrRd1aPp4C54+qJMusp+6kcJVRh4a16Jltyiw5ERmbMDBDi+hOinVZ/BCwEEoOpZ5M8AKQDplTJMtFgSQYrYnDO1Om1+K5vJ/j+Vi56fvbCfL/3uex6IJN3/9wb4ADNeSH3g51wzV686Q== 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=zmWP+0ShGhFP0QhcNx61E7OFyvSRpHoL8UPUdVY3ZNE=; b=KqlzEJAIeyskNsweLXUCZw6Ntab+t8RifhcvPSixU5+BBltM2UM2SiAlm8UycR1SRtpCxorVPKBFDk6WOlBJXi6PvUxe7DcGDiJXusv+py0Suo8Ws0jZZAiZHHq3jPlPzU3bOWfrnPJMAtJ20E578+vj3HESGPAlZdfHRbAiQ1mt6AJNNdqSa4rR3jfH6NiCWqIm5gJxTuBz10rcrZmKy5uYuEdM8rK1yCnkD+bnuZE9kTunDGoGboQIfcUh7aYlL7XyTMICz5T+7IMn17gfxBfKIK2yjl8ldoZvLUD+lrIscZnQ1O7U/0xhgzvQyMPQxBNuYR+EOCw6FlZUwnMIhQ== 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=zmWP+0ShGhFP0QhcNx61E7OFyvSRpHoL8UPUdVY3ZNE=; b=zoIpt6TUtSzsjb666cF1Rgwdb0pnUyuVYwdzdjw2CedMjXM1Qn7LxweiLBn3S4diH77Vjcv0IcDt81xNvL3J7m5Mset+HDft3w+Nf+USVWKOSOrwWNKdiYiCjPUjsw+qI1nznWxIo2JX4/x7J3VG6Bi3klFJNYvijRVQI7i+P/o= Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by BN0PR10MB5110.namprd10.prod.outlook.com (2603:10b6:408:114::9) 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 07:59:15 +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 07:59:14 +0000 From: Indu Bhagat To: binutils@sourceware.org Cc: Indu Bhagat Subject: [PATCH, V2] gas: gcfg: fix handling of non-local direct jmps in gcfg Date: Thu, 28 Mar 2024 00:59:09 -0700 Message-ID: <20240328075909.4134867-1-indu.bhagat@oracle.com> X-Mailer: git-send-email 2.43.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: MW3PR05CA0028.namprd05.prod.outlook.com (2603:10b6:303:2b::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_|BN0PR10MB5110:EE_ X-MS-Office365-Filtering-Correlation-Id: 1fd327fd-81fe-4ed3-086b-08dc4efcf627 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: EHSO/zU/v/FBz3F40dDRZtDxfDBNBL+ZgxUl6ps2hsv1bv3B3i3fBMR5ueZBjVxnV1qHyddkmeh/ECzLjnD3TURY60/3Usw+GNx4coPpG260I7V16d7BIwtDsq/i8MYNH1w57HuSk8HvPjJmysxiAKK5eEnHr2dWqOjLypQ5up89lhhyZxx2c8h3JiWem3gpP4ZJq/3i1XTp4yKSv7qKCKFoBdpUQwH3dmOVxaD0tYF7lsOajRmBFLg1sbW0lxOc10Ju3/dZcrSEbmg+dqYgJUto6cm0gwYsIFmwwG0SxZd3iivXPbTUcENTL1r2rC8hk10zdWqitu8meJgQYOPfrQr/5xYHFHdN0J5UkbBwCGZx4LaJKNnyeGs3uF/fEZMXERqgdH7ng3OAOjBINf8Ex5qfyDLQVhng85X8JJbO4heki8ag+eOlcIfHgcmRl9i6xjP6+M78yJ/l5ECA9qNSFM2GzU+NH8PP37LvPPkKkMOViK8px/3lCY4hgX48BudCnfmi1hKID6ecoHu9ZQA/M5Ycj1ves7wPT/M9ezzyhD74S1X/DMlovydw1QgG0D/a1uDqCLlZbMDGFEdk6hX6BLTy3ek9utkuh281mg11BnvZ8wVhkqYl84U3eMF8s5PXACl+P8QWuwRpU83NMiPocQnbhlcIYsyEoI8BiRMvZw4= 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)(366007)(376005);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?rFje5J1b60dCsWewVyqmg9keWNYDtLsgTHe1e/vgemNobJxTszHXfx7Ez4gd?= =?us-ascii?Q?F9ub1npRFOgOxHUGIZklJM8OXbj0Q5zoJTSfCPlRzMAABNNqMWwp5ixZS/zr?= =?us-ascii?Q?MNtftWjCufRmnRBYoq6uvw+Z/mMna988NzVIlsLN7Y09BFv8oCvaTS3AWyyo?= =?us-ascii?Q?sa1LPnHbjNUkN/9Okekblodq82uPd02X5PqRv5QQ2W3Vl5VDHInQam9jOHc2?= =?us-ascii?Q?cfDqlYBwPX6Pa4Fnzxt72wDKPQaKDGsXo1vD1zwTPQphlVeVLxmUwhECm2sS?= =?us-ascii?Q?5Nc8aUDqJ/zBInmYPTRF29dF4ry4atVxZ8xhsMqvwA0hWJg8tfKkkLVMNCa5?= =?us-ascii?Q?eCZN+uMeUOtf7IqrhzgvAtcJaCkdOm1basGo76YZR72QCRaTf2zrcsvwz1Mj?= =?us-ascii?Q?lhKtfESCJubClBNqgeFiQqATK7CTLwdzSxU66/kdSEICNP5gWuhycxP9MRYR?= =?us-ascii?Q?JMAeXzJRBBNRSNqoFETw6tRvVLdBp1PbVA1i7CDWhHd7bZIdlFYYjYvOmgdT?= =?us-ascii?Q?pmCuEY+ZmLLsn6MIS2cTIFBrnpbzGkkluCvcSZ4fh+QmOVxPtXIs9KPxGKmU?= =?us-ascii?Q?obGaJuwQQ1NWRJyaB9HPmBzSLJEwhmsYnOdWXb1l6wkY2I15RMuPCSSgJbog?= =?us-ascii?Q?oNgOO+zCetX0zrweyhkp8VRFLbdI0kStCEnaeFrDBmPI99hAIN19Psn5Htfi?= =?us-ascii?Q?owpkteOuLgYK07Tg4UrnVyFwPI8uOd5RvQ0fdEXR/V9uggxIXerlmKV2FEDb?= =?us-ascii?Q?qKg9pleQCSAJ0bf11p1h6Z/Prh571wX4niPPVbaLxgplZuXCbQ+MaiiBPwIh?= =?us-ascii?Q?AtR1kpbwgvlqyoG95Mw0r4Tr2hpK4hAq+3XA4kv9MwAFNfVTklwjZAnQAP9t?= =?us-ascii?Q?8hbsGTtp7ePyRxV+4MXhzr2pg0Hu6ft52rzHLmcTG7MWCzi4eusw2y857PgE?= =?us-ascii?Q?LOPZ+NUi49ZCA0Lg8vWG6LxwpuNdMEHKzfZKEe2ECwcsiPuhPM+I5Ho6GkKb?= =?us-ascii?Q?LDEpFEjk9oGVtSaH5LtLGAlGGqrWGB2CFfYCQFxFA2lt29PyEid7bHU7s7+r?= =?us-ascii?Q?dYgKQIqIalI69kFa4mvKGgjnnk/QOio7NJrLM7aV4feLcGpI+5YXSZfQtHBY?= =?us-ascii?Q?lpLmI9ptF5S+TViTQBbBGkqDxWAoMuFBCJGwfZRLkxgoTily1Il0J5gZi3/k?= =?us-ascii?Q?mM4wq57tylrNTQHJvqDJaM775Jm/3amnpglPMT2gy8LS69QkmD1SQhB7EJSw?= =?us-ascii?Q?TL56kfaCraHyziX1VXgur8L+olMHE8eb9gLBTkkyi5jsMlK4AdzBq/7Ljejk?= =?us-ascii?Q?AbB+NCYYehJKVYfk7GpKNX2NUCAP9k0Q4PU2dWiSsLXyq1sEvFui8ESYWCrO?= =?us-ascii?Q?7/mNGqICyM3q+CrwUPHbo1+57RxIdKGqTL2HsHWcui3rnYV3AqTlI9FW09lT?= =?us-ascii?Q?ftdKlEA72UqQXb1U5bH6in0xm2WT/VmTR0S2zdBzw/Fkfer76AvlC8udkF3d?= =?us-ascii?Q?XsbbdWA0BGMIJ+/baWHvkN8mjfwCtGMs5XFf5//aXENTayg4JkWx0XARoM0k?= =?us-ascii?Q?vnVU02rKsMwXAQ5EsYWaTBGDGnZR7X0C7ttLo3RAO6pxMbBGywdEX3ApW+/f?= =?us-ascii?Q?C5DVpGbmND7HCmKnEDx3Tnk=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ueo64n6ynwag1VR/5+X0XqigNBOrImoSftb/fwf0SA69tw/RUzVzs+/uyoDnJh/uFEGT85CkAdnhrIvQp3VjoWZwGAHbKPa9RTKGcFUkL/aoitsPLeAdE+uWthX2m6G3ZTIQKwx+EhZYLOnLtA3iquIfmrOrK6k26F07RVj391SHo40by1jhrntSpylNmmRayO5jxEMbDdUs5Gnr8JOoGTSlgi8qnpaABiKuQH8aQ01sGWdnQ79fX1fTM4L/D/ByDUHLsu+KTG37SC9EBCgd1W0CRHZ4O5TqfqFExmLmRl08O/golvtwfy9gWrhK2y312SYwuclaoCGhlRIiZt1E8CsSnHq8Avi/R0K6skbIFzY9VQ4p7DpuPbGLBI32nesctxF4I/Ide47CtlmrkxPqoCc6ZL2Q8mAyXM79ReR5iWhMZeWLvsmaiVuw3/GoJZv7/6X1CKO/C1oL0C4dsWbHGLio4sZtskQpCxziFa17SpxyUIfG60ggoIwnKwlsnB86bDA2z+mKv4aJiWLazgX9VTw+vyMfD6ph79MYly1alQu+zanP6ixMz3+lDngBuM8YBaqdHDA6GqFx/EBe0PEEQx2MdhF1lRIHlPkR+CcqHyk= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1fd327fd-81fe-4ed3-086b-08dc4efcf627 X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2158.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Mar 2024 07:59:14.9391 (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: ChgGMPPdfRxg5tA2obWr4/cecjx40jtv5PyZ8odbdeKJyjlHwG5O0BpbDTE63+5YA8JspLQXMez2HE0tWWkVHg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN0PR10MB5110 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_07,2024-03-27_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 bulkscore=0 adultscore=0 mlxscore=0 phishscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2403210000 definitions=main-2403280051 X-Proofpoint-GUID: 5abePgMn4bxDCLjWUIrA0k2GumuIDLpN X-Proofpoint-ORIG-GUID: 5abePgMn4bxDCLjWUIrA0k2GumuIDLpN 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: [Changes in V2] - Add function level comments for ginsn_direct_local_jump_p. - Add a jmp to locally defined label in the testcase to make it more complete. Also, add a jmp to label defined in another function. The testcase now generates an additional warning (as expected): "Warning: GINSN: found unreachable code in func 'bar'" - Use formatting style consistent with other testcases. [End of changes in V2] The ginsn infrastructure in GAS includes the ability to create a GCFG (ginsn CFG). A GCFG is currently used for SCFI passes. This patch fixes the following invalid assumptions / code blocks: - The function ginsn_direct_local_jump_p () was erroneously _not_ checking whether the symbol is locally defined (i.e., within the scope of the code block for which GCFG is desired). Fix the code to do so. - Similarly, the GCFG creation code, in gcfg_build () itself had an assumption that a GINSN_TYPE_JUMP to a non-local symbol will not be seen. The latter can indeed be seen, and in fact, needs to be treated the same way as an exit from the function in terms of control-flow. gas/ * ginsn.c (ginsn_direct_local_jump_p): Check if the symbol is local to the code block or function being assembled. (add_bb_at_ginsn): Remove buggy assumption. (frch_ginsn_data_append): Direct jmps do not disqualify a stream of ginsns from GCFG creation. gas/testsuite/ * gas/scfi/x86_64/scfi-cfg-3.d: New test. * gas/scfi/x86_64/scfi-cfg-3.l: New test. * gas/scfi/x86_64/scfi-cfg-3.s: New test. * gas/scfi/x86_64/scfi-x86-64.exp: Add new test. gas: gcfg: address review comments for local jump issue ChangeLog: * gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.d * gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.l * gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.s --- gas/ginsn.c | 47 +++++++++++-------- gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.d | 32 +++++++++++++ gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.l | 3 ++ gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.s | 43 +++++++++++++++++ gas/testsuite/gas/scfi/x86_64/scfi-x86-64.exp | 2 + 5 files changed, 108 insertions(+), 19 deletions(-) create mode 100644 gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.d create mode 100644 gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.l create mode 100644 gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.s diff --git a/gas/ginsn.c b/gas/ginsn.c index 661f51d23c5..492e161876b 100644 --- a/gas/ginsn.c +++ b/gas/ginsn.c @@ -444,16 +444,26 @@ ginsn_indirect_jump_p (ginsnS *ginsn) return ret_p; } +/* Return whether the GINSN is an unconditional jump to a label which is + defined locally in the scope of the block of insns, which are currently + being processed for GCFG creation. */ + static bool ginsn_direct_local_jump_p (ginsnS *ginsn) { - bool ret_p = false; + bool local_p = false; + const symbolS *taken_label; + if (!ginsn) - return ret_p; + return local_p; - ret_p |= (ginsn->type == GINSN_TYPE_JUMP - && ginsn->src[0].type == GINSN_SRC_SYMBOL); - return ret_p; + if (ginsn->type == GINSN_TYPE_JUMP + && ginsn->src[0].type == GINSN_SRC_SYMBOL) + { + taken_label = ginsn->src[0].sym; + local_p = (label_ginsn_map_find (taken_label) != NULL); + } + return local_p; } static char * @@ -785,16 +795,13 @@ add_bb_at_ginsn (const symbolS *func, gcfgS *gcfg, ginsnS *ginsn, gbbS *prev_bb, || ginsn->type == GINSN_TYPE_JUMP_COND || ginsn->type == GINSN_TYPE_RETURN) { - /* Indirect Jumps or direct jumps to symbols non-local to the - function must not be seen here. The caller must have already - checked for that. */ + /* Indirect jumps must not be seen here. The caller must have + already checked for that. */ gas_assert (!ginsn_indirect_jump_p (ginsn)); - if (ginsn->type == GINSN_TYPE_JUMP) - gas_assert (ginsn_direct_local_jump_p (ginsn)); - /* Direct Jumps. May include conditional or unconditional change of - flow. What is important for CFG creation is that the target be - local to function. */ + /* Handle direct jumps. For unconditional direct jumps, where the + target is not local to the function, treat them later as similar + to an exit from function (in the else block). */ if (ginsn->type == GINSN_TYPE_JUMP_COND || ginsn_direct_local_jump_p (ginsn)) { @@ -822,10 +829,14 @@ add_bb_at_ginsn (const symbolS *func, gcfgS *gcfg, ginsnS *ginsn, gbbS *prev_bb, /* Add the bb for the fall through path. */ find_or_make_bb (func, gcfg, ginsn->next, prev_bb, errp); } - else if (ginsn->type == GINSN_TYPE_RETURN) + else { - /* We'll come back to the ginsns following GINSN_TYPE_RETURN - from another path if they are indeed reachable code. */ + gas_assert (ginsn->type == GINSN_TYPE_RETURN + || (ginsn->type == GINSN_TYPE_JUMP + && !ginsn_direct_local_jump_p (ginsn))); + /* We'll come back to the ginsns following GINSN_TYPE_RETURN or + other (non-local) unconditional jmps from another path if they + are indeed reachable code. */ break; } @@ -1083,9 +1094,7 @@ frch_ginsn_data_append (ginsnS *ginsn) { temp->id = ++id; - if (ginsn_indirect_jump_p (temp) - || (ginsn->type == GINSN_TYPE_JUMP - && !ginsn_direct_local_jump_p (temp))) + if (ginsn_indirect_jump_p (temp)) frchain_now->frch_ginsn_data->gcfg_apt_p = false; if (listing & LISTING_GINSN_SCFI) diff --git a/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.d b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.d new file mode 100644 index 00000000000..dfc2782d1b9 --- /dev/null +++ b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.d @@ -0,0 +1,32 @@ +#as: --scfi=experimental -W +#as: +#objdump: -Wf +#name: Synthesize CFI in presence of control flow 3 +#... +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+0010 0+001c FDE cie=00000000 pc=0+0000..0+001e + DW_CFA_nop +#... + +0+002c 0+0018 0+0030 FDE cie=00000000 pc=0+001e..0+002b + DW_CFA_advance_loc: 1 to 0+001f + DW_CFA_def_cfa_offset: 16 + DW_CFA_offset: r6 \(rbp\) at cfa-16 + DW_CFA_advance_loc: 3 to 0+0022 + DW_CFA_def_cfa_register: r6 \(rbp\) + DW_CFA_nop + +#pass diff --git a/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.l b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.l new file mode 100644 index 00000000000..eda60a41fef --- /dev/null +++ b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.l @@ -0,0 +1,3 @@ +.*Assembler messages: +.*9: Warning: SCFI ignores most user-specified CFI directives +.*40: Warning: GINSN: found unreachable code in func 'bar' diff --git a/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.s b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.s new file mode 100644 index 00000000000..89ae29f37df --- /dev/null +++ b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.s @@ -0,0 +1,43 @@ +# Testcase with jmp to function instead of a call. +# Also includes a jmp to label locally defined. +# The CFG creation process is not expected to warn about +# missing foo_handler_v1 or xstrdup. + .text + .globl foo_handler + .type foo_handler, @function +foo_handler: + .cfi_startproc + movl current_style(%rip), %eax + jmp .L2 +.L2: + cmpl $-1, %eax + je .L5 + testb $4, %al + je .L3 + jmp foo_handler_v1 +.L3: + xorl %eax, %eax + ret +.L5: + jmp xstrdup + .cfi_endproc + .size foo_handler, .-foo_handler + +# New function with unconditional jump to a label previously defined +# in a different function. For SCFI purposes, since .L2 in not found +# when processing bar, a warning is issued. + .globl bar + .type bar, @function +bar: + .cfi_startproc + pushq %rbp + .cfi_def_cfa_offset 16 + .cfi_offset %rbp, -16 + movq %rsp, %rbp + .cfi_def_cfa_register %rbp + movl $0, %eax + jmp .L2 + popq %rbp + ret + .cfi_endproc + .size bar, .-bar 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 5324af386f8..c004d99b4ac 100644 --- a/gas/testsuite/gas/scfi/x86_64/scfi-x86-64.exp +++ b/gas/testsuite/gas/scfi/x86_64/scfi-x86-64.exp @@ -78,6 +78,8 @@ if { ([istarget "x86_64-*-*"] && ![istarget "x86_64-*-linux*-gnux32"]) } then { run_list_test "scfi-cfg-1" "--scfi=experimental --warn" run_dump_test "scfi-cfg-2" run_list_test "scfi-cfg-2" "--scfi=experimental --warn" + run_dump_test "scfi-cfg-3" + run_list_test "scfi-cfg-3" "--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