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 2B8753858D1E for ; Fri, 22 Mar 2024 22:23:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2B8753858D1E 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 2B8753858D1E 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=1711146217; cv=pass; b=mZByHYrQO99KR3rre0YMXch+EYdPfsu8pnA2jK2olWsBZZ6IdfZdVgNa8B4Wsz3dQDR8p4TCA3BjO8maZI5zMVx9v2qvF+Wz2OIivAeo9b38ipAtSeZjlZ1QNiBpGaXTd/0zxCXxgIJK/NoEmcgj+hK5ygpHdll9FHWzHVp6ips= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1711146217; c=relaxed/simple; bh=fMfk6RfGJEbzXrZOgyqUpmJo2Lk35I+aI4+avixkG6M=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:Subject:To:From: MIME-Version; b=VvyY0+MWjqkxVj1T3DgRsv8AEyUzWmz0Nps38TgWO4FWipKftyNPEmEJgf88t9dAxdN9wq6NB7swaw2IdeFkqZcYLEgOu8K3R+cuHBSxl+hbBv/LVwWom2Pme/g3O6CtDx1fg1Z70zMj0KB7sZf7tcM2T1qec9j8mAT4ePXUBmc= 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 42MKvrFl006051 for ; Fri, 22 Mar 2024 22:23:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=message-id : date : subject : to : references : from : in-reply-to : content-type : content-transfer-encoding : mime-version; s=corp-2023-11-20; bh=iVAejMybKYx4NinJJ5x0dWO3fuGD2m+uDyQ20KB/B0Y=; b=TThq5/hSWiVGVwG2Bva7cnTGk8dwvis7LhjYe9iPSzVrqJYP0JSBbkbnT2hzT1bjZgem yh8tclqih8DvgtuT2CemRu+IFbmbMcXdFwjRz4YbLwQHb1GbN2IIpj1qajD6gs/sns7z 0c8mAu18IqjG8fdCBCYdMAbme6f+HBkvAbQk+BVTOmi9ZY6aSEpTGXljtKROJohPImce 65ZnciJKGqC2XGqmPbFBi91kQJjhcH3DbAwrFeSmUqPPr/OXoWf4SDzdaBkeBySenPpn Cgn6f4BA5uyoWoGq5PB33qVJWgiiDo2EJgMb1+gOibPK4Ovn909+D0k+h+R9jqzwVP96 kA== Received: from phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta03.appoci.oracle.com [138.1.37.129]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3x0wvma53k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 22 Mar 2024 22:23:33 +0000 Received: from pps.filterd (phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 42MLOF9l002230 for ; Fri, 22 Mar 2024 22:23:33 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azlp17012018.outbound.protection.outlook.com [40.93.12.18]) by phxpaimrmta03.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3x0wvfwhgp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Fri, 22 Mar 2024 22:23:33 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ou+oFj5AEUpr9485FTTJSZrbl9ONzKkab2SLiv+fE2TpEGSn5k4nfeaJ8L+Av4BmFwiH2DCL0p2JDcnzHov9ICIgYA+ISA2qeegagmT+s0zrxCoqZ/BVyUFu1XTUh4JBAjG8hX2KMTQDMt5gaAW9bBNpmjmvGyfF92LLG+Tr2MjdXswzy2qUNMeq1hWw2SB14j2xDxWjBepJjiixv8a9+ezAt7rRh/j56ubR1zry6ywpA2mx0U8kET7uZXh1DdlGAxgNvXlekQuDrMSiZgPnLU7USB9E3KM8pljE3v4FCntBq1KrdnounUoY+c3mOYkQICSo7XlL5mUmAcsrUVHclQ== 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=iVAejMybKYx4NinJJ5x0dWO3fuGD2m+uDyQ20KB/B0Y=; b=Nk4i45UopDWozastCGO3xb+v7aQ3oKofPyQR5Cf1UPG2Frj77DXTxOnH9bADP/oneeMMkWu/ec+1TJG2qvfaBxej8qL/dcDSycrzsYWIUBPwAbbRq42/Fgmx6bKjyQW19zHe76dbAUO6W5keZ1clbtT1aIhKh5pK6uSf2d2AsWFpx6x/8V2FfWT2KLI9iUGNAyXyIosiin++kZjAGhdF2yitIs8boaDT1W6+8AWk2CkAzF/ngBTCsiiAO3WSGJSzPowZafZH5GFdobmG1JtBn8ljPppuhIX/iGuWf73/y0JdwZT2cQS+K7VF21Ly+FHhMZJLlJph5dbFpl0Lv5Y2Kg== 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=iVAejMybKYx4NinJJ5x0dWO3fuGD2m+uDyQ20KB/B0Y=; b=mIOTqVMKPfJRbQc0GUh6BV5x9MBmCjBJAxgkSQwumFdlcBXuEThMqrRGgcXqEB3Uy5RKMXyoCIdVJ23bx/eEaQwu43eemuUn5pKKgfixc2GJrv41bqD6iWVovIlbLVA6CupQnMqVr4yEDZ856WAT4dQsD49lMJcqpbJ/xh5YGqQ= Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by SJ1PR10MB6001.namprd10.prod.outlook.com (2603:10b6:a03:488::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7409.23; Fri, 22 Mar 2024 22:22:42 +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.010; Fri, 22 Mar 2024 22:22:42 +0000 Message-ID: Date: Fri, 22 Mar 2024 15:22:40 -0700 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] gas: gcfg: fix handling of non-local direct jmps in gcfg To: Binutils References: <20240308063510.1996470-1-indu.bhagat@oracle.com> Content-Language: en-US From: Indu Bhagat In-Reply-To: <20240308063510.1996470-1-indu.bhagat@oracle.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-ClientProxiedBy: MW4PR03CA0202.namprd03.prod.outlook.com (2603:10b6:303:b8::27) To MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR1001MB2158:EE_|SJ1PR10MB6001:EE_ X-MS-Office365-Filtering-Correlation-Id: 566f1215-ccbe-4aaf-47c2-08dc4abe96ba X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: CgPNf9nKBdgNzRBSloQYJyeu6NOXs4UmtTRZ+W/ZOaY3R3jsrXZPZ8O2eUrcgG8u42bxyG3VsO02eavxoURsaiz6FQRTGFy6ZEm6FzOCznWBbtNaVF2qB26D9dqotrW64mSNXJVasC5Wg/ji1l4ezw9cBHWv5pgU3Sj+UFlaWK5QCVN4aYfHG5q1BokoQcdnI3EOCf5byOpute04rHU5hLwfuHuBL1uRuFwfAAe4l316HMk1kFtUFUWIb0K4xZPEl5zDGK9CgXOxZ41pVIixCs23GYejeoXr/okWpP97FAbqBLJV/QcP0k7jp/gC2R0Otj/366HE0TNB+q17l1w+tFOFlECBtmMPRimV+2fmeJs+pUXV8KNMHeRsko1K4Krnmi3MEajA0z/CkBc1oAtJnx/aUUV8xMXxkdliy1B6CVYdz47VlYz1kS6dck+ic35XZvcuH4M7mJ9M3Ko7yUp4l/9u2nNgDL/5bx9Ew25ltFT35T4/W/7SdAOJHnFBg+qdTNngN54uo5PbQwrCeksMAMi/UihDDXiulqAoSGa5mfrpO8TGk7Gjf+tuEk4sLVgnj81zdeC2Aa0njhh3i36MY+648gVQyep9yts9X5HYERyLHY52L2TjPtmHzChKkAzBT+48vBZ4o1xD94Ke7CmXxqnS+KZyi7hUcmy0wdE/lv4= 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)(376005)(1800799015)(366007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UHhCK2hkTTVUQUhTRmJ4QlgrSlJtMVZSRWdobFp1QWlSS0VwTFZ4N2J6aE1q?= =?utf-8?B?OEhaeTM0SjdRa0JUckpwL29mLzlBM3NMSHQrKzROTzVxTmdhbUczTnp1VWpL?= =?utf-8?B?TkMrY2JtVCs5TU0vQnJEV2JRY29tUlJBREtTcDV4TXdNRTB6UGtPYlE4bGJp?= =?utf-8?B?Rk9vNmhuVXNnOC83MDJNNllZZmg3MzdablhYTlJRTHByQmNPWlpadHRmTUxh?= =?utf-8?B?MWVlTEhUVU5wWkZkMW1BRFJ1UUFGc2Z6M2ZUQmExMU96R3ByYTJtYzZTZTRv?= =?utf-8?B?UkRSRmtoVXp5dGU5V0hQUnlsaHVpL0ltSWM4VkFzNTJPL1Mxa0NNbm9sa3ZZ?= =?utf-8?B?eFYxU1R6OVdabkh6RU5Va2h6dENuTXFKd1hKOThNVFFSOUdEQUZFWGdpV0Ru?= =?utf-8?B?ek53TGRZUm8zaVBSZ1plVXd4d2pkVXp1aGxsWHpvVFYrT0daOUhrZk01MVdy?= =?utf-8?B?RkhXM1FGWnh0bnlLa3B1WHhaRzVCcmJiYjVRMENObFlpSjh4aW5ic05CNVBR?= =?utf-8?B?Y3d4ZHB0UUF2WkFTN0crNDFYaDQ1TEZLM3c2THlkRDNlYmRLR2NXUEcvd2dG?= =?utf-8?B?SFFxMmswQytxWTVkc2tLMHIwTWpxaVBOWE1CdjV2VlFKZ2dud3NOMUE4Y3E5?= =?utf-8?B?Q2NBbzFnMW9rRnc4M0NVby9BaVRtMi9JZlRVdnIvWlVwdmtnM0JwNVBlK2pR?= =?utf-8?B?bXA1OFhBVmw1TUFRUUVScXQ2aTZQaHprUHB4N2QreE4xaXVtVWh3Um1WSmli?= =?utf-8?B?V1VsVnJ0a1RNYnVhSVZ1NkVpaGlVaktNa1lObEVISXF2dDV6VXdmN2tic0ZV?= =?utf-8?B?SEdlRjR5cVhscWNnbEUyb1Jqd2gwaXp0M3lRYUMvSDNaY1JlV29hS251a2cr?= =?utf-8?B?dUhWT3FtMlFBbjQza1A2QWFIUHpPTDZuNzB1Mm53bTlJTHd1T3BtSWl4enFE?= =?utf-8?B?ZTU4b1Q2ejh2a29GQUVJNUEzUFkzSlR2M3hsYWdwaXJLeU94QWlZYy9lajIy?= =?utf-8?B?TnRxcEc5WVJMZlVrSGdDOW43eVNaeVYyKzFiQnpUOWszRjlxbHJLL1FkM0pk?= =?utf-8?B?a1lGMm1uaHdJWUhCUk1ZR1MyS0JLaHpwSG11elViajByWHNLWDJzWU5VQzdt?= =?utf-8?B?UXlpSEVRU21GVVFnVTRsc3cya0lPejZTYUl6N3plcS80WU80RWgzU216Szh4?= =?utf-8?B?WmxYdFdXZ1Foek9EZmJUZDJHL1RHem5mWC9wQm1PZERyV2ZuUGhyWW85SlJt?= =?utf-8?B?TFpkWlkwUkdRdWlpU1ZyaDJCTVBOZG55NHJmSXd4RFJrdlRuOUJzYjZUU1Zn?= =?utf-8?B?YW9BT2FTRlVJRUU2bjVQMno3ZHp1eUxwNjRWWStxRkFFZktzdGZxaWc4R1Ev?= =?utf-8?B?V1V0UlB3MUZPcFM3eWVraGc3aVRzMEFxc1o1b1dESkVmV3BNZFJVcFk3ZkJp?= =?utf-8?B?RmxsNUQvWHlzb2tDYldRRWl5d05LcHRZNy9FdEY2T1RsblpoeGoyaUJoMUw4?= =?utf-8?B?T3NYbkIra3FpMmRINDZReGhUOU41K05lT3BzK0J5WWZEVFBuME9JanZDV0tB?= =?utf-8?B?b2Jzc0FUSU1NU3hIVmRPUUxaU1gxQ1UrT0pTWnlIZU14WWVuUXFybzdwWWUw?= =?utf-8?B?WVl0RDB5ekh0R0VrNStkMTZaQTU4N3RZVXhQYTVFa0VVdnE3d0EvRVkxaGdi?= =?utf-8?B?OHk1bjB1MDI5OWxnT05rUWowQ3dhT2JVYXhEak0yMFlNelRxTVpBdzZZU05H?= =?utf-8?B?bVlyekFDdHp6ZU0walpnOFhLUDFXd2N4WnJnQTBmZGNtMm1rUzhvNUdOZU82?= =?utf-8?B?ZkorV2gzY3JDMERIYzdvQ1V0dzRHK3JKWlIxNkJodVYrZjZXcW1ENy9uRXFT?= =?utf-8?B?TVFMYmpwY3BxUnpHNUhBbWsxZTZOL29yVUFjL1ZhSHdjSkVTdy96SDRlMTFu?= =?utf-8?B?dlJMdWhqOGVHT0pzWUd0ZE05bWI3eDZmV0FXeWU5VEMvbmpyUXpwbnpHTTdH?= =?utf-8?B?K0p6TEt6VTNpQzFob01xMHQ2eVoydlBlM1FXelZoREZmVGYrRWRzVFVmTEEr?= =?utf-8?B?NHpiL2lMQllhZVo5Z0x5WHp6MDhFRFhFOSs5MTV2ejhRV2l0dFpZczM1aHlD?= =?utf-8?B?STZZNjZnVndZemd0Uk9TZE5VRFRlSmExdEpOZXYyaThSbk1qeStVTmw4WXhk?= =?utf-8?Q?kxxINJKtL5QxZv8p3ydGVYY=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 3lCFLYNPagN2C1kCLMZWiXn/QEDdQRvMABXsFEhGM3cuoRQhbv4gxww0drxeSZbqfalfsqqQt88Y9JM2mNtXyybK6otjROOy7ol3CnFcP8fR4837IYkd39m9oR56Tq8ca5TPa98PmKqsQvXWZJMNvYmOzqTdgdfLl4CHeJCwTQsQiu/G8aJR2xS3sOSrdjVmS/3q2vA0Yixo8YRewdbRyJzTRF69PFL/iGQjRy53zpftwVnJ9RKxIhGIlFQDJCgauPQKAt4dBDyKwzG0OwxjU5JIz5jGC5KB9WXRZwcoaUzwWsiISBmtRp3+QKCgJJJPD476/H0G0ZoC1xjlhOzAP4asE6QdR+yzXi/OVqdLDysmwvj9M6Fbef/Emd4b5TUa8qQ6a2A3w7na5HuQ2HhhghLVZIozdd8iUMRBndBA8YGslkIDrRzpFVoopGrP+Yh8DwywIRHm6eyUuMi/grvgVcF/OKi37yP2IhZ/0FlbhjrW0o5x521kbVJ8mpjqGmqa8FS0QIXhe5+o7vPC/MdM6lII5cK7a8JFu0srP+1IakuL6ys5SO9VRGCjang8Q3eTgtmSRMvXh48SXJc2aaBIrQZTLDxTraqil522qSUwYrM= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 566f1215-ccbe-4aaf-47c2-08dc4abe96ba X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2158.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Mar 2024 22:22:42.2699 (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: h4ospyQfBEowi8E0g+CmuKib2fYdJDJToc5wwm+eljP0NYSXuzPLuG7fCVlAlXth3sfA8ECGUdUkKxhYgEXnIg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ1PR10MB6001 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-22_14,2024-03-21_02,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 bulkscore=0 suspectscore=0 malwarescore=0 mlxlogscore=927 spamscore=0 adultscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2403210000 definitions=main-2403220162 X-Proofpoint-GUID: wypDWcfWr8x0yq6vPmYae_QM30kYd0vH X-Proofpoint-ORIG-GUID: wypDWcfWr8x0yq6vPmYae_QM30kYd0vH 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_H2,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: Ping On 3/7/24 22:35, Indu Bhagat wrote: > 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/ginsn.c | 43 +++++++++++-------- > gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.d | 24 +++++++++++ > gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.l | 2 + > gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.s | 21 +++++++++ > gas/testsuite/gas/scfi/x86_64/scfi-x86-64.exp | 2 + > 5 files changed, 73 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..9f8e2979ab2 100644 > --- a/gas/ginsn.c > +++ b/gas/ginsn.c > @@ -447,13 +447,19 @@ ginsn_indirect_jump_p (ginsnS *ginsn) > 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 +791,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 +825,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 +1090,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..b373653c748 > --- /dev/null > +++ b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.d > @@ -0,0 +1,24 @@ > +#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+0014 0+001c FDE cie=00000000 pc=0000000000000000..000000000000001c > + 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..5ff6048bef0 > --- /dev/null > +++ b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.l > @@ -0,0 +1,2 @@ > +.*Assembler messages: > +.*8: Warning: SCFI ignores most user-specified CFI directives > 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..ac63af892cb > --- /dev/null > +++ b/gas/testsuite/gas/scfi/x86_64/scfi-cfg-3.s > @@ -0,0 +1,21 @@ > +# Testcase with jmp to function instead of a call. > +# 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 > + 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 > 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"