From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by sourceware.org (Postfix) with ESMTPS id 89F653830B5D for ; Mon, 30 Oct 2023 16:52:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 89F653830B5D 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 89F653830B5D Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1698684780; cv=pass; b=HYfwIXLEoRoZGHaF5aLZwRpoXYgeH295MwgYBHcNzUpxoWbEzJbtqrcxLlCpsdrFIlGJQLjvhrzoTHZ3PA6a/sD2c75F1I69ONGiT94LYFef5disSQM+VeYHsrXpcD3TQfFlZvKRxWSr1J6Pu3IirnABYBlDns9eBI+t7ugovuc= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1698684780; c=relaxed/simple; bh=U1hmIvsPKHogq0hBCNQCmb36WRAjkO7zGwshSmSDrV8=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-ID: MIME-Version; b=Pufbb1DMwzstfvVCwnLigHxlF/cjrwQfjBLioUiXBIcDlXWaEGOHULZlIMqKrqIY40LGCyYiAw++OL7HSEKlilpYShAz0bACw3LBpba8Uobbqlocf3Bb+xFS0AnzBLZBM2476mvWHfnxZ3fg0LFRfj3zwAodZUPG/Ky9aNvMa3s= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 39UDMSue013347 for ; Mon, 30 Oct 2023 16:52:57 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-03-30; bh=K6iNWKXonYrpztVbcbGWG6RJW3fm/TbaM33zT4nTUGk=; b=vNbI54J0j4dOisRL5x0Qzrt8jOcjoOUI+tenB+eAkRe0IPGMxQaEiXrGoQcj4TRGCehS EabxC8EI1QT/GEA3m1IWvhoMULxUArtQzOLkdEs2hGXrgUF/n1LDlWlFFEob+MsWm/V5 +lB/MTaqPIHqqFSvY4c+FvoCa85FAeB++3DUpfLIw54WIpbcyqBDy0oBA7p2RGJjRHkl h7JvIypZvKPtytyu39pm8sQBNlpRbdXsFsPOat+ymBE+SY2y9Aedz3w08jVNfEjjOEY6 yxREW8Lq6i0IM5Y+rgJRTU6gewt8dQ/d8ZxxGf7ASqgEFaeyiN/m1m0Txx0GASmvQ0DX QA== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3u0s33ubt7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 30 Oct 2023 16:52:56 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 39UFckJX009186 for ; Mon, 30 Oct 2023 16:52:18 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2169.outbound.protection.outlook.com [104.47.55.169]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3u14x4da72-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Mon, 30 Oct 2023 16:52:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=X7Mb9/qK4eT0985UODC7TwgLzM/AElnF14SqlYbZq3r0+dEOiTmhIMLIhwM/CrBL1KMvPI3tZjOt7TaXWOTumCCpHfW72P0I2GPwIUVP9EMsNc89cBHNRfVhKZAHXUWoaJHGyMTm9tdnpnrRgAs+WjxvVOicUdE+J2FwLIh2W98OvEgami9ZT8DYBEg2T+kUdy24E+OPf4Vr8jtGGBYEMqeXAeRFhWnzB8N7CldGmk+q761NBG0trTv5amnT5d8AtHzQBVA43V01oaIVi1fhLqJWBYvyBhq+7hEdxpkqqFOlsBZUxNT+IJ/h1mMT5qg8xwNQzTwSfMcKlmafvXzp0g== 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=K6iNWKXonYrpztVbcbGWG6RJW3fm/TbaM33zT4nTUGk=; b=DluCI3ci3t5sD0wX8/XMjnzMIqrciE8X9GIVO0phd0P4WNtbdbFODMrjHrSj7bOn2lbfEhd9H8FoZtIhm4c0UZ961jK8CRMSpfAHmivENYAIh6a1v+kQgd4ToOawT25XVdHO7R8sw4ucyizi2fdk1bEwO5hXodX30N3xIXCf7cmbV4hXg8MvQhZMvDzO7neAzd10s4Zb+Z2iczmbGcT9UFTHRRrsv58oMJ8sVe/sy5XjnXJ7xTZoD1xmTjko+rxnY6WfOhmGkCVjcCz+M2Id9we1LZ8LaBKoCnxn3TI4xrfRuJn9AGBFFz7vRQeHHrBAvXRz+0jcakU9TCOJZ4Z/zQ== 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=K6iNWKXonYrpztVbcbGWG6RJW3fm/TbaM33zT4nTUGk=; b=XfMmEjDwq8l9ykXcxxz1XOLpa2v20lDmAqNqtQHzHCs/myRHFQkOscAAGzl2BRoSKkOrw1bnhr3Ay09SRGTnVJzW+4TJ+SmkljZ1vsOd6Ey/qOCsaV7d0GGREoZQuNyMKLMmZrWuyYMXgozLHzaXejj6uyXterCDyDtvhNZWUZQ= Received: from MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) by DM4PR10MB6253.namprd10.prod.outlook.com (2603:10b6:8:b7::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6907.33; Mon, 30 Oct 2023 16:52:15 +0000 Received: from MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::7f02:c28d:9802:20fd]) by MWHPR1001MB2158.namprd10.prod.outlook.com ([fe80::7f02:c28d:9802:20fd%3]) with mapi id 15.20.6933.019; Mon, 30 Oct 2023 16:52:15 +0000 From: Indu Bhagat To: binutils@sourceware.org Cc: Indu Bhagat Subject: [PATCH, V2 06/10] gas: scfidw2gen: new functionality to prepapre for SCFI Date: Mon, 30 Oct 2023 09:51:33 -0700 Message-ID: <20231030165137.2570939-7-indu.bhagat@oracle.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231030165137.2570939-1-indu.bhagat@oracle.com> References: <20231030165137.2570939-1-indu.bhagat@oracle.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: MWH0EPF00056D08.namprd21.prod.outlook.com (2603:10b6:30f:fff2:0:1:0:8) To MWHPR1001MB2158.namprd10.prod.outlook.com (2603:10b6:301:2d::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: MWHPR1001MB2158:EE_|DM4PR10MB6253:EE_ X-MS-Office365-Filtering-Correlation-Id: f4fbc391-0ace-4b2e-6bc0-08dbd96891d1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 3oyi5ltNJnIHDwYmip97brJhJ3LdKxkXhAjWxm1Gprvm+CmMpscg2ETYS2OflNGud18xfEVGSqeXKuq4dJ1yTw7GKl5tH6HwgGJuxzvhAPH78XVLgF/hs/ZYJyrb0JFwsury46waedS3RlaG0aDYpKf2vvp/V2u4x9fcDXjW285KuuO06Ozuv2reZVNhowtF7f2Ki06GLBpj5OrSX4zF1P2X8kLjEFAf7lC7FoiQJN1NehL9pMp6hzhOfwF3W2EP8+zikRsVVHTrldl0zGp6iUCiZufenYUMVTnuqUAFrMQmjt62u/hxllt025AcFhyqyvzE4PWz9GNFlZMH38iymsBj6YSJISN+km9VqyZmGGlGlSXgjGMMK8Gxo0wrM1P+Gs3ZiWRY0ToyXxC/b+j91WR5qAz1k8c/OzOMNG7G9b7BQ/KzsdcYDbhPBLI18SkPwKi0dfxUnW9nAUiDjY3Fq9PKAwQQPuKLWux8ysBjA9pt239tTC3e9qWdlMggpXnAaxjIeXbZKCy2rED6r3j/kcgh6/adiaCwPEnl5NNWWiyZiR99StHAf4KL3cpd4gCsNJGKQINVL2e7hBlnbTx3eSXxFWt917DJ4hmArza+88qpagFCdpbKSnJr2KJ5PFAmdRFOdC1ZBAKPTlkx8r4nbA== 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)(346002)(376002)(39860400002)(396003)(366004)(136003)(230273577357003)(230173577357003)(230922051799003)(1800799009)(186009)(64100799003)(451199024)(6666004)(36756003)(2616005)(6512007)(6506007)(66556008)(316002)(6486002)(66476007)(478600001)(66946007)(107886003)(1076003)(83380400001)(38100700002)(86362001)(8936002)(41300700001)(2906002)(4326008)(8676002)(6916009)(30864003)(44832011)(5660300002)(2004002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?rPBl3JmkmyMBtz6jg2Q8ZDW45fGIC3ybd12X51mr97TH5Z0iH0Wmb0g1baoK?= =?us-ascii?Q?/xGDnms2aG7JedEBq3Pd55k8SQ2HKlMnk+hpI/B2GRJMwEYGY4O3ufCjJsz+?= =?us-ascii?Q?4UgG82LePqPjtjTx67MdwwjcBWe31zut/b9FB+izBPNrgiCzZFSB0uJ9cQuf?= =?us-ascii?Q?5Fkp3BCKyklV/Iqx0pApqhB4aOBNSwNaKUyf6WomgbkFlXVYLTG/wBhGvfCg?= =?us-ascii?Q?+zX7gzJJN4dhxhELc4IzBbsd/3IiW6dbL7YkX00PaHnWqHDwPwoBj+C5rxdQ?= =?us-ascii?Q?ZmZtSRI50rtJ2uZaPKYxP49C56F8482P5N1fOaHErwjJcenYQcRKOUU3Vz1D?= =?us-ascii?Q?67gK2DCPAFrVgRS0uJL9tHeuXdrIPd4wrxPqjZkl3Jaohd1EVwVXJuHN33zt?= =?us-ascii?Q?7dfr3SQZNp623NErZKQWlMvgnL1bsy8ADA3dAPOdCWAP12ch1UMInfZn74xF?= =?us-ascii?Q?yrHNTWHCjzIpaKtkbVs3fPNdZ8cz4TAhBP0FWfUUwQ/c48Uk/eLAt7LHi7qg?= =?us-ascii?Q?Z5AmK4Ic//zZawBxO4FpruKhkcFND1LnpaBzvLQTNpDtwOZKKPTGBjeedpjZ?= =?us-ascii?Q?MD7HtnPHWsa7ac2asqwUAQmOkkqW1fhiIGXqP5+5ozgvw8Xn4kimRmbCN4lb?= =?us-ascii?Q?Yq+mXORDNBsBfzcQFslcqO22xOAvP6+2Z0gnXzSSfQfNDEUDSMi0FUP1W7HE?= =?us-ascii?Q?cIZZM0z2yd42D6ePeahRlWGsyBeKIrozyFd7q2nbLiLa7kTmApiNWzKhaJMv?= =?us-ascii?Q?YW+sCE0coFgZ06k9q+1BEJTX4BH5slfACBeDtZ33boUMZIoRRrrE0cntQa8h?= =?us-ascii?Q?1AgFMXkzJGaiWrGwG57uttDE/Lt6M0lkqsMMpjLLpC3OYIxL1N8Lf9jSeG2N?= =?us-ascii?Q?jo401H1TfA4sjehhv9qzytpApHp5CmWvi3vOa4HY85W1CmBznHufI21Gy5Iz?= =?us-ascii?Q?Qv7OXalcH/uRnAF0+PqgP5QU9L0vxqWQ2k9YyG2GqxPbPHM7LJLDael4+Iw8?= =?us-ascii?Q?No9womquhPvigKyUmrk2aDP8YsZPjs0KFjyb3WUUNq2kruZLfbMvNklxZGXj?= =?us-ascii?Q?iYndDmZAAvgvblermPtJKmQ/UkF9d9SkzgxnZP9djH6tkpsiJuCWERe1ompn?= =?us-ascii?Q?Zv97gfpIaHsBAPt/MDJtjMw4p1lbT5PB//C3Tdn+G8dlpZK4CGgJSuSp2kdx?= =?us-ascii?Q?JQ2ixG88MGOWED9YG7Tr3K9INItpKvbFjVhwbl9A15bxhvpTi+x1SslT7+hk?= =?us-ascii?Q?saw7H/sgDS274BdH1DPEv/Xdaz1KC1jJCEO97Rc2R0fak68l/+5Tk/W8gvTV?= =?us-ascii?Q?tuvKxa82AhofNgiGjamDV7o5YGKRGd8jGIdGgs/gYtPo5RGvwS0/tb9XHuo+?= =?us-ascii?Q?kyeZXO4E0NR4FVqC/Y7A972LWfaXiP1DWBDIimAHJsASa8SgA8hI3En26V8k?= =?us-ascii?Q?1q1NSkfyLD+VfALHBKORBQ1Id6ckE63F0wlHKDZ6HpmRqdTjIluoQfEOMLGU?= =?us-ascii?Q?CK/S3iwyfc1k0ZXeVAxdWiVDj25m3p4IyeNITCLNxb68qZPhIWlGeK6WaJBn?= =?us-ascii?Q?7iLbB+r6HUor9L7TZRIVZizPebASkBsjtI1y/iP3WQLvnTPxnqr3B0tUYQwI?= =?us-ascii?Q?r92FQ3M6j7ybPgsynV1XbWI=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: CP3uz+pvD+CXeY4RSi/mudMeMVcI9QKG9LaL0PnXmLhFAK4pT25qdyjo2IPwHqmYPWoBhFKAf7Ja/DZ+0FPcBeUAoiLOaumW65kWDS1VpYvNLejwKcrR04gj/GkxbLtqmV9LfR7lGUFqlXWdGgK3NGoAy59aLoJdwjkQJpPo69uh6eGw9ZQ3UG3/YRHgB7M3WUqMuBWyEK8ewfyGPJHnKUX73it0Drnvskub2xGInIgeXtxh8GbCQdvSHCA1mFi/uW+lFbLd/5Uk0jJ+GxWescENzaBuMmQ4F6HxTxOh2lkyZedlAez/979lJukz07Btx9ruIMlN9xxzCFaUpisFIRvwGXRtGVSu3YAKMt8XKZNEyasIMl8XRiSTuTG0rg09tIzvWTBsgG7pEg+AgqOEWR0aRtuT+3GzWhGpqBo4U+TUJEOnvtzv5sVDXu8fuBxO4XRojJKWQqhGrWqHgPakWRUaKlbxKWOhDimsRxwSBXLinFXKdo6fFXM/98CNJV2Fdgvel5PsUIfVAyeJQDnDUvax5KC83kN27kex5mEXTZyV2IX7ME4Gnh5PBfRH33a6aye+Sk1jiv/q2b9z5pm7EgZzeUaxqYroSwDdl07iq456uoZpTsxlGmH+eLLCH9KYCiOGZB1fcJW/iNsPNMU8ICahBwxv/yRFQDidwM/F1MePIqSw0r9z4CIY58q6UZIjktt9V6EmR54FU0PlNZSagOnVMiAayTTHQ7YnitzlSM6DaJgEPkdBAaXND2hvSSiqXmNUIKuUmD6p7Up5b3mvsg== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: f4fbc391-0ace-4b2e-6bc0-08dbd96891d1 X-MS-Exchange-CrossTenant-AuthSource: MWHPR1001MB2158.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Oct 2023 16:52:15.1118 (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: Wxofnxb4+i1O/WxgFpS1B11Am2yB7xWFaq8RH6/MvpStYle1vpwGQkUqRgQ4+MshYuJOGUcnc2tLdXHcb/DV2Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR10MB6253 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.272,Aquarius:18.0.987,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-30_10,2023-10-27_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 mlxscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2310240000 definitions=main-2310300131 X-Proofpoint-GUID: xBmoQjBIx0orrP-AxZqV35W2n_zf-OO7 X-Proofpoint-ORIG-GUID: xBmoQjBIx0orrP-AxZqV35W2n_zf-OO7 X-Spam-Status: No, score=-13.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H5,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 from the RFC patch set] - scfidw2gen.c now defines its own set of handlers. For many of those CFI directives, we simply warn ("Warning: --scfi=all ignores some user-specified CFI directives") and return. - The above-mentioned warning is issued only once per file. - The advantage of adding new set of handlers in scfidwgen.c is that dw2gencfi now does not need to add a condition for each handler to simply return if --scfi is in effect (the latter was the approach in the RFC patch set.) [End of changes] Define a new set of handlers for CFI directives for the purpose of SCFI. The SCFI machinery ignores many of the user-specified CFI direcives when --scfi=all is in effect. The following CFI directives, however, will not ignored: - .cfi_sections - .cfi_label - .cfi_signal_frame The handling of .cfi_label, and .cfi_signal_frame will be added in a follow up patch, as it needs the ginsn implementation. Since the option --scfi=inline still needs to be worked out, the implementation in scfidw2gen may need to be adjusted later. gas/ * Makefile.am: Add new files to GAS_CFILES and HFILES. * Makefile.in: Likewise. * gas/read.c (scfi_pop_insert): New define. (pobegin): Use the SCFI handlers. * scfidw2gen.c: New file. * scfidw2gen.h: New file. --- gas/Makefile.am | 2 + gas/Makefile.in | 9 +- gas/read.c | 17 ++- gas/scfidw2gen.c | 305 +++++++++++++++++++++++++++++++++++++++++++++++ gas/scfidw2gen.h | 37 ++++++ 5 files changed, 365 insertions(+), 5 deletions(-) create mode 100644 gas/scfidw2gen.c create mode 100644 gas/scfidw2gen.h diff --git a/gas/Makefile.am b/gas/Makefile.am index 0e98ca3ec85..e174305ca62 100644 --- a/gas/Makefile.am +++ b/gas/Makefile.am @@ -93,6 +93,7 @@ GAS_CFILES = \ read.c \ remap.c \ sb.c \ + scfidw2gen.c \ sframe-opt.c \ stabs.c \ subsegs.c \ @@ -128,6 +129,7 @@ HFILES = \ output-file.h \ read.h \ sb.h \ + scfidw2gen.h \ subsegs.h \ symbols.h \ tc.h \ diff --git a/gas/Makefile.in b/gas/Makefile.in index fae3a47c144..87428bc46b8 100644 --- a/gas/Makefile.in +++ b/gas/Makefile.in @@ -170,9 +170,9 @@ am__objects_1 = app.$(OBJEXT) as.$(OBJEXT) atof-generic.$(OBJEXT) \ hash.$(OBJEXT) input-file.$(OBJEXT) input-scrub.$(OBJEXT) \ listing.$(OBJEXT) literal.$(OBJEXT) macro.$(OBJEXT) \ messages.$(OBJEXT) output-file.$(OBJEXT) read.$(OBJEXT) \ - remap.$(OBJEXT) sb.$(OBJEXT) sframe-opt.$(OBJEXT) \ - stabs.$(OBJEXT) subsegs.$(OBJEXT) symbols.$(OBJEXT) \ - write.$(OBJEXT) + remap.$(OBJEXT) sb.$(OBJEXT) scfidw2gen.$(OBJEXT) \ + sframe-opt.$(OBJEXT) stabs.$(OBJEXT) subsegs.$(OBJEXT) \ + symbols.$(OBJEXT) write.$(OBJEXT) am_as_new_OBJECTS = $(am__objects_1) am__dirstamp = $(am__leading_dot)dirstamp as_new_OBJECTS = $(am_as_new_OBJECTS) @@ -581,6 +581,7 @@ GAS_CFILES = \ read.c \ remap.c \ sb.c \ + scfidw2gen.c \ sframe-opt.c \ stabs.c \ subsegs.c \ @@ -615,6 +616,7 @@ HFILES = \ output-file.h \ read.h \ sb.h \ + scfidw2gen.h \ subsegs.h \ symbols.h \ tc.h \ @@ -1337,6 +1339,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scfidw2gen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sframe-opt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stabs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subsegs.Po@am__quote@ diff --git a/gas/read.c b/gas/read.c index 826156db3fe..9068072493a 100644 --- a/gas/read.c +++ b/gas/read.c @@ -38,6 +38,7 @@ #include "obstack.h" #include "ecoff.h" #include "dw2gencfi.h" +#include "scfidw2gen.h" #include "codeview.h" #include "wchar.h" #include "filenames.h" @@ -587,6 +588,10 @@ pop_insert (const pseudo_typeS *table) #define cfi_pop_insert() pop_insert(cfi_pseudo_table) #endif +#ifndef scfi_pop_insert +#define scfi_pop_insert() pop_insert(scfi_pseudo_table) +#endif + static void pobegin (void) { @@ -607,8 +612,16 @@ pobegin (void) pop_insert (potable); /* Now CFI ones. */ - pop_table_name = "cfi"; - cfi_pop_insert (); + if (flag_synth_cfi) + { + pop_table_name = "scfi"; + scfi_pop_insert (); + } + else + { + pop_table_name = "cfi"; + cfi_pop_insert (); + } } static void diff --git a/gas/scfidw2gen.c b/gas/scfidw2gen.c new file mode 100644 index 00000000000..188699a882f --- /dev/null +++ b/gas/scfidw2gen.c @@ -0,0 +1,305 @@ +/* scfidw2gen.c - Support for emission of synthesized Dwarf2 CFI. + Copyright (C) 2003-2023 Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GAS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ + +#include "as.h" +#include "dw2gencfi.h" +#include "subsegs.h" +#include "scfidw2gen.h" + +#if defined (TARGET_USE_SCFI) && defined (TARGET_USE_GINSN) + +static int scfi_ignore_warn_once = 0; + +static void dot_scfi_sections (int); +static void dot_scfi_ignore (int); +static void dot_scfi (int); + +const pseudo_typeS scfi_pseudo_table[] = + { + { "cfi_sections", dot_scfi_sections, 0 }, /* No ignore. */ + { "cfi_startproc", dot_scfi_ignore, 0 }, + { "cfi_endproc", dot_scfi_ignore, 0 }, + { "cfi_fde_data", dot_scfi_ignore, 0 }, + { "cfi_def_cfa", dot_scfi_ignore, 0 }, + { "cfi_def_cfa_register", dot_scfi_ignore, 0 }, + { "cfi_def_cfa_offset", dot_scfi_ignore, 0 }, + { "cfi_adjust_cfa_offset", dot_scfi_ignore, 0 }, + { "cfi_offset", dot_scfi_ignore, 0 }, + { "cfi_rel_offset", dot_scfi_ignore, 0 }, + { "cfi_register", dot_scfi_ignore, 0 }, + { "cfi_return_column", dot_scfi_ignore, 0 }, + { "cfi_restore", dot_scfi_ignore, 0 }, + { "cfi_undefined", dot_scfi_ignore, 0 }, + { "cfi_same_value", dot_scfi_ignore, 0 }, + { "cfi_remember_state", dot_scfi_ignore, 0 }, + { "cfi_restore_state", dot_scfi_ignore, 0 }, + { "cfi_window_save", dot_scfi_ignore, 0 }, + { "cfi_negate_ra_state", dot_scfi_ignore, 0 }, + { "cfi_escape", dot_scfi_ignore, 0 }, + { "cfi_signal_frame", dot_scfi, CFI_signal_frame }, /* No ignore. */ + { "cfi_personality", dot_scfi_ignore, 0 }, + { "cfi_personality_id", dot_scfi_ignore, 0 }, + { "cfi_lsda", dot_scfi_ignore, 0 }, + { "cfi_val_encoded_addr", dot_scfi_ignore, 0 }, + { "cfi_inline_lsda", dot_scfi_ignore, 0 }, + { "cfi_label", dot_scfi, CFI_label }, /* No ignore. */ + { "cfi_val_offset", dot_scfi_ignore, 0 }, + { NULL, NULL, 0 } + }; + +static void +dot_scfi_ignore (int ignored ATTRIBUTE_UNUSED) +{ + gas_assert (flag_synth_cfi); + + if (scfi_ignore_warn_once == 0) + { + as_warn (_("--scfi=all ignores some user-specified CFI directives")); + scfi_ignore_warn_once = 1; + } + ignore_rest_of_line (); +} + +static void +dot_scfi_sections (int ignored ATTRIBUTE_UNUSED) +{ + /* To be implemented. */ + return; +} + +static void +scfi_process_cfi_label (void) +{ + /* To be implemented. */ + return; +} + +static void +scfi_process_cfi_signal_frame (void) +{ + /* To be implemented. */ + return; +} + +static void +dot_scfi (int arg) +{ + switch (arg) + { + case CFI_label: + scfi_process_cfi_label (); + break; + case CFI_signal_frame: + scfi_process_cfi_signal_frame (); + break; + default: + abort (); + } +} + +void +scfi_dot_cfi_startproc (symbolS *start_sym) +{ + if (frchain_now->frch_cfi_data != NULL) + { + as_bad (_("previous CFI entry not closed (missing .cfi_endproc)")); + return; + } + + cfi_new_fde (start_sym); + + cfi_set_sections (); + + frchain_now->frch_cfi_data->cur_cfa_offset = 0; + + /* By default, SCFI machinery assumes .cfi_startproc is used without + parameter simple. */ + tc_cfi_frame_initial_instructions (); + + if ((all_cfi_sections & CFI_EMIT_target) != 0) + tc_cfi_startproc (); +} + +void +scfi_dot_cfi_endproc (symbolS *end_sym) +{ + struct fde_entry *fde_last; + + if (frchain_now->frch_cfi_data == NULL) + { + as_bad (_(".cfi_endproc without corresponding .cfi_startproc")); + return; + } + + fde_last = frchain_now->frch_cfi_data->cur_fde_data; + cfi_set_last_fde (fde_last); + + cfi_end_fde (end_sym); + + if ((all_cfi_sections & CFI_EMIT_target) != 0) + tc_cfi_endproc (fde_last); +} + +void +scfi_dot_cfi (int arg, unsigned reg1, unsigned reg2, offsetT offset, + const char *name, symbolS *advloc) +{ + if (frchain_now->frch_cfi_data == NULL) + { + as_bad (_("CFI instruction used without previous .cfi_startproc")); + return; + } + + /* If the last address was not at the current PC, advance to current. */ + if (frchain_now->frch_cfi_data->last_address != advloc) + cfi_add_advance_loc (advloc); + + switch (arg) + { + case DW_CFA_offset: + cfi_add_CFA_offset (reg1, offset); + break; + + case DW_CFA_val_offset: + cfi_add_CFA_val_offset (reg1, offset); + break; + + case CFI_rel_offset: + cfi_add_CFA_offset (reg1, + offset - frchain_now->frch_cfi_data->cur_cfa_offset); + break; + + case DW_CFA_def_cfa: + cfi_add_CFA_def_cfa (reg1, offset); + break; + + case DW_CFA_register: + cfi_add_CFA_register (reg1, reg2); + break; + + case DW_CFA_def_cfa_register: + cfi_add_CFA_def_cfa_register (reg1); + break; + + case DW_CFA_def_cfa_offset: + cfi_add_CFA_def_cfa_offset (offset); + break; + + case CFI_adjust_cfa_offset: + cfi_add_CFA_def_cfa_offset (frchain_now->frch_cfi_data->cur_cfa_offset + + offset); + break; + + case DW_CFA_restore: + cfi_add_CFA_restore (reg1); + break; + + case DW_CFA_remember_state: + cfi_add_CFA_remember_state (); + break; + + case DW_CFA_restore_state: + cfi_add_CFA_restore_state (); + break; + + case CFI_label: + cfi_add_label (name); + break; + + case CFI_signal_frame: + frchain_now->frch_cfi_data->cur_fde_data->signal_frame = 1; + break; + +/* + case DW_CFA_undefined: + for (;;) + { + reg1 = cfi_parse_reg (); + cfi_add_CFA_undefined (reg1); + SKIP_WHITESPACE (); + if (*input_line_pointer != ',') + break; + ++input_line_pointer; + } + break; + + case DW_CFA_same_value: + reg1 = cfi_parse_reg (); + cfi_add_CFA_same_value (reg1); + break; + + case CFI_return_column: + reg1 = cfi_parse_reg (); + cfi_set_return_column (reg1); + break; + + case DW_CFA_GNU_window_save: + cfi_add_CFA_insn (DW_CFA_GNU_window_save); + break; + +*/ + default: + abort (); + } +} + +#else + +static void +dot_scfi_dummy (int ignored ATTRIBUTE_UNUSED) +{ + as_bad (_("SCFI is not supported for this target")); + ignore_rest_of_line (); +} + +const pseudo_typeS scfi_pseudo_table[] = + { + { "cfi_sections", dot_scfi_dummy, 0 }, + { "cfi_startproc", dot_scfi_dummy, 0 }, + { "cfi_endproc", dot_scfi_dummy, 0 }, + { "cfi_fde_data", dot_scfi_dummy, 0 }, + { "cfi_def_cfa", dot_scfi_dummy, 0 }, + { "cfi_def_cfa_register", dot_scfi_dummy, 0 }, + { "cfi_def_cfa_offset", dot_scfi_dummy, 0 }, + { "cfi_adjust_cfa_offset", dot_scfi_dummy, 0 }, + { "cfi_offset", dot_scfi_dummy, 0 }, + { "cfi_rel_offset", dot_scfi_dummy, 0 }, + { "cfi_register", dot_scfi_dummy, 0 }, + { "cfi_return_column", dot_scfi_dummy, 0 }, + { "cfi_restore", dot_scfi_dummy, 0 }, + { "cfi_undefined", dot_scfi_dummy, 0 }, + { "cfi_same_value", dot_scfi_dummy, 0 }, + { "cfi_remember_state", dot_scfi_dummy, 0 }, + { "cfi_restore_state", dot_scfi_dummy, 0 }, + { "cfi_window_save", dot_scfi_dummy, 0 }, + { "cfi_negate_ra_state", dot_scfi_dummy, 0 }, + { "cfi_escape", dot_scfi_dummy, 0 }, + { "cfi_signal_frame", dot_scfi_dummy, 0 }, + { "cfi_personality", dot_scfi_dummy, 0 }, + { "cfi_personality_id", dot_scfi_dummy, 0 }, + { "cfi_lsda", dot_scfi_dummy, 0 }, + { "cfi_val_encoded_addr", dot_scfi_dummy, 0 }, + { "cfi_inline_lsda", dot_scfi_dummy, 0 }, + { "cfi_label", dot_scfi_dummy, 0 }, + { "cfi_val_offset", dot_scfi_dummy, 0 }, + { NULL, NULL, 0 } + }; + +#endif diff --git a/gas/scfidw2gen.h b/gas/scfidw2gen.h new file mode 100644 index 00000000000..c3d6f80b3db --- /dev/null +++ b/gas/scfidw2gen.h @@ -0,0 +1,37 @@ +/* scfidw2gen.h - Support for emitting synthesized Dwarf2 CFI. + Copyright (C) 2003-2023 Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + + GAS is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3, or (at your option) + any later version. + + GAS is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GAS; see the file COPYING. If not, write to the Free + Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA + 02110-1301, USA. */ + +#ifndef SCFIDW2GEN_H +#define SCFIDW2GEN_H + +#include "as.h" +#include "dwarf2.h" + +extern int all_cfi_sections; + +extern const pseudo_typeS scfi_pseudo_table[]; + +void scfi_dot_cfi_startproc (symbolS *start_sym); +void scfi_dot_cfi_endproc (symbolS *end_sym); +void scfi_dot_cfi (int arg, unsigned reg1, unsigned reg2, offsetT offset, + const char *name, symbolS *advloc); + +#endif + -- 2.41.0