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 6BE2C3858D20 for ; Sat, 18 Nov 2023 17:21:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6BE2C3858D20 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 6BE2C3858D20 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=1700328118; cv=pass; b=Nc+XNfUvt47XTG0fyjPcKw842FXyLdr3h4YztFX8O/HoYR2FbZEQTG12hg7MfwXx1qUu7z239ugJ4gFA1w55bOapQN4S3sOsamCHJfaRkwHwWD5nPbKhwcxiyqgT3Zitr5pvf5stN0lMWsgpNLwjE53yL7UW69dkuFmE3h42SRg= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1700328118; c=relaxed/simple; bh=PgLHp3wRRQKfCYhjKqUcn3NrbHgnAWvW+y4UD2QfTuw=; h=DKIM-Signature:DKIM-Signature:From:To:Subject:Date:Message-Id: MIME-Version; b=ikZmSllRrn2j94rnpIYNqymWmP1jQzOlsO1V8jw3ssV4iiZng+8mD+hZja57zKp02yHSizpa0CUxkF2kpMmt9piPQJEeUNe62pTWmBdzAiajracPpiei5LRJCrZhT9zAr4gT5TN+arNCFi7bHB85zH9Y+HrqDgYI0iZGCthHZow= ARC-Authentication-Results: i=2; server2.sourceware.org Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3AIHJ75A031634 for ; Sat, 18 Nov 2023 17:21:54 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : content-transfer-encoding : content-type : mime-version; s=corp-2023-03-30; bh=jJlIeZUNmADYWK2A3BvnJ3C5d+6IxXGSgvJmI+oqPSc=; b=FBElvMWA3zjQeD+T6nHPFrzgo6hwCCIsd4s9x73wg/uIH354+VvHdiq1qS+6sneujA7K GPcFWfRouyhJcqK27wwoSetf8s5rcca0aNEaYg8izzEq40rT8jnFqAqf9OxPXkidv83k hhk73iT5kBQlDUQo5Rw/vgugQqzGNcQ9IyWaeGHqJ+WqGeZYdpUFNz9/Z28eqTwMzIiH HGdF9KsSyjrs94Fs/sXwj5/r4dQUfQwxW2FcXgaPYjKccQtd4sUYYYeWTSdo2qHobNfE IQcPV+lfV/6rxcLLyPGvhruBpxwJVBg8miGylGlU6vD3vd5G/Y5Fn+JOa26mZi9TiY13 Cg== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3uemvu8heh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Sat, 18 Nov 2023 17:21:54 +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 3AIHADp8002439 for ; Sat, 18 Nov 2023 17:21:54 GMT Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2168.outbound.protection.outlook.com [104.47.58.168]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3uekq3mkfx-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Sat, 18 Nov 2023 17:21:54 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=C6Rg1yg88bJjyraHZSvIwhxGkxX1+sENGCid0Lzb0Y+mPESc81sNNP2cHoZDNeNTZkZmI8IOPqd2PLzHQM62fTJe2kIj3L5VaMo68f/TYe7UN4WlSuFiBq0OqPLgNrc7aOerDvG2LQ1cRd/eipp3W0w4e0J/KfUxgh0WuDYmVOJ3jdnhyosNK9jkP13GvHUw1R/JzX1RWX9qGF35jks7UtRYBekvOncRpKJuYj9PKGiF3AKZl+bHTnU/qrihjLtt1pRG9yF001S/dADBlKSicpJc/cicHV2oKEfxAvjjWuJ8S8F5y2IxdPr5BLZMJPDL1Tm1uBYSlH24iw1bj2RaRQ== 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=jJlIeZUNmADYWK2A3BvnJ3C5d+6IxXGSgvJmI+oqPSc=; b=b4msQTEgl6iiqexXR0jrwDHQdUzE7H7ttx8eFMikaeot0sA8c6nUqagGUfV/+UxV7ICmnwMrdanTJ0/LmepmX+kUWc33e56xJzVOKXusOr2DlFh8Wwa+kw4vIE/g1Y5wkzgbxFV1NVwZyxyLEBY1YOgJ6IQCeEEdxdRdiXfPtwCBfYvotJXnXFYXha5vw0/ugel1S/dSI/6VtzXFLIyY7iCVfDOjx12Fj8Zo/aLjVkkbmQU2Mft5VWtjnt4u+FYMif6dI0ZMCMER1b3EOfJpFDn10wnaXg8Oly/lDOl21dh9ULkKMwmkt/it+61hV0s84ZzmSQj+Fc5Jdrw/+Vw6tA== 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=jJlIeZUNmADYWK2A3BvnJ3C5d+6IxXGSgvJmI+oqPSc=; b=OuenvTZvIHGij4M7ZKAE4U0/pJegBAGEInpmK9tRiojcAVm/N+mtD/DSqO715gBORVjLsenBRUfog5kgJWfjdLaFCrnsMvxn71kMsFkZ2K0pQELVbS1BbHKqx9gpgpJ1j4Wx8CsMZTnfZ7+Ht9wIqB3dfmGzlCWzSbeSAeUDAiY= Received: from BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) by BLAPR10MB5219.namprd10.prod.outlook.com (2603:10b6:208:321::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7002.26; Sat, 18 Nov 2023 17:21:50 +0000 Received: from BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::ba16:f585:1052:a61c]) by BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::ba16:f585:1052:a61c%4]) with mapi id 15.20.7002.021; Sat, 18 Nov 2023 17:21:50 +0000 From: "Jose E. Marchesi" To: binutils@sourceware.org Subject: [COMMITED] gas: bpf: do not allow referring to register names as symbols in operands Date: Sat, 18 Nov 2023 18:21:47 +0100 Message-Id: <20231118172147.23338-1-jose.marchesi@oracle.com> X-Mailer: git-send-email 2.30.2 Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: BL6PEPF00013E0F.NAMP222.PROD.OUTLOOK.COM (2603:10b6:22e:400:0:1001:0:13) To BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_|BLAPR10MB5219:EE_ X-MS-Office365-Filtering-Correlation-Id: a9ffe04a-56b6-4996-3a04-08dbe85ad99a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: WGAVcwKT17QWaeBTQOWjz2mg4+W0Gp2VYE9dF8++cErULVPtymxQz9Z2TFjdnDhF0lE1N08Vnaea8fKYwWiRyAMeNKlK9I3IrZMx8tC661KdCxKJBz5UCBvbAmYoqsVnjBYznQyhnNaDZEnGxNjSj7Ng0OkWUEy3Rv+igEh5lwGjF2ld+U2/pQlm4pH6YYzDFNXI3koqgW8f3NouCZmZtpT3jwmMBfLy62LUqRS3E7WdIv1BigEVwEVDG7+EDkW2gqzIg2sbrJHb81L7Ud+RfwTFRYOO3y64cvXW7rIcNlhbU7qao5z16svBKkjl83wVSwD4j7ca1t0wMHCOUG0gmXKQjSDTsMkxzRqodXrTLk36jKQb4k/27ZXwf06Z9BJvnfkJpfEvo43QH/Z//fcnfeaZI7nKBFLNPECllCyqs40w/SWKQpwp0V0olOFHx3nnG0T5K6xA9ey3UgCbhOraFpYOG59/E5CTmz/C8HgfABr9jj1cqwCxHl2qtOP93V+mwe+XJqkvdmXAURi69K4wd8atQkkFnyUX/vqWhKf/oL0cLvabrwq9qVKLx4YrlQjj X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BYAPR10MB2888.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(136003)(39860400002)(366004)(396003)(376002)(346002)(230922051799003)(451199024)(1800799012)(64100799003)(186009)(41300700001)(36756003)(5660300002)(86362001)(4001150100001)(2906002)(83380400001)(6506007)(6666004)(478600001)(6486002)(1076003)(26005)(6512007)(2616005)(38100700002)(8676002)(8936002)(6916009)(66946007)(66556008)(66476007)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?IJ3ko/BXLT4Hunm337W2hWebMpauLinQEn7A/egUU/qJFBi32STq+zC7Sjgx?= =?us-ascii?Q?aYzlPMk0jjIof+sMp2ff7cNnTyN/rfKyeRkJxwuOwqQMwten/9HeTACtahh1?= =?us-ascii?Q?dDlkvsl4f+sbacqE4T1KogLBNhIQbKQGD2TCrn76tGnT03QCq54+hin1cmeV?= =?us-ascii?Q?ctGv+dwLcehgrGAupwKOI2XdGQeYq48hVP0ZCTO0ARbKY2QH0n39zyvvKtpL?= =?us-ascii?Q?FLVLoG2Sn14qMNk9E1yLOqnsi6D8XnrHrhHSbSYo2izwUysSt2RmTJ/tMhmz?= =?us-ascii?Q?vvIZtvmM+wL/itWHuaCU77oe5gvv/LfrlU/JupTeNHFYDq4aDPo7S2/G4N5R?= =?us-ascii?Q?Nb8Jbc8+k0NXnX5Z6ELN4r4+3ReArBwnUquhbL8yptKDhqr6xieqXHXTTZVS?= =?us-ascii?Q?Vze9ujjJ46ETbL8Bdn2lZFsZXgdNdpZikT1PvW3mDteB7mwYmx0Lq8yNw20O?= =?us-ascii?Q?IzY5pYHUl1N41GGDSZ0mEAtRu7/1HAeien+18TWn0/1Eus4TZ0Ol5Xt9wB5Q?= =?us-ascii?Q?tThpey9oGiJuO5dA5pe+ZJCjB7AfK7LclPB9/p7DgJWix6C6awEKhwrOyZoD?= =?us-ascii?Q?pcaiK/JUPhXWFC0f874l20w5g6aEio9wtOJ8kLHDbZK4GlfVJo7LDt4TcBg0?= =?us-ascii?Q?kJTOHg721VwvrCjmRAxNSkx/pGEJBiTCPq6tDaK8fz9UqnPO8iczYY0fZW9o?= =?us-ascii?Q?KEAtcS95ri4velpzDQpf0s2J1cNrHRSqTVNckT2cq+rRSq2Q+M/JWn8Jrw+D?= =?us-ascii?Q?PoXhE7aC6Wktsv9JJhG5z+9YWmE0NJX+qpw8LCkKBRFnnloRxj19u5H56x2i?= =?us-ascii?Q?SMd9j8EXMtwazfMmk4e3TTa9qOfouU0X4P64KwjvrDoY1H2G/Sx/mQVEP5i3?= =?us-ascii?Q?CcKxp9LfnKXOjjXXZtGNTx85LTL1RhZQK13tB+6oL5S2Fo1v78EFurY4kYgC?= =?us-ascii?Q?V6s766MMehtODA7bcLX5xzabfRtpfKSaOQycbJ1gaS8/Xq9zKDoMlgwVM27j?= =?us-ascii?Q?V1ofGrA+i9u5wbeklOAP4rN0BKMPm4TxmAvwF8Bwa1EHwZrvaRgnNPzZB7Yr?= =?us-ascii?Q?W0HRmnDUZZl7eIXHEvrvBOMDJgIVxAjgP9iG3RMw0DU4IdDj5dhoGaucCGuM?= =?us-ascii?Q?JaE6ytndIhYpZ98j3xLZ0aWQelpUJYvfVZeHmRYmu3zD4SnFncoyQwLfD2Ws?= =?us-ascii?Q?kdzjYNIMEeekYocJ6yBrCUgBXG3Mp6eDlzff2rNDPqgj41S6b0bDRlFVznR7?= =?us-ascii?Q?13yjep3WBGw1qDHujVUchWhQ3Na6lPKhi/kOG0S4adqbAd3y7q/3IAJGlM8T?= =?us-ascii?Q?2Ae1MYVjJTPoYUW7VcOpQG0in3th4b9uKdYE/BheqB9B5SDehmX7eVZYV4Ut?= =?us-ascii?Q?XJb/PQK8fFj/Yk5xoyp5LCJvWsjagg33qLaNjA2wN4Yjsym+5zprhx8i7KH6?= =?us-ascii?Q?rwi0pkXsvWu7Q32xOB++MwNZVQ8JHJWkxM8DRN+s3m80Sjp+EfFPI10AmH6f?= =?us-ascii?Q?y2SJRr8cmQMhDfP03vinNXROsBzU2aU9Q2o7AAnfP/NMPhScdnDQV17efSWb?= =?us-ascii?Q?rqu2/0FJGFke9LmZZ14v/vnant+syOIReB2d6x1aMxfG3pM6iVUqbvSqkh1B?= =?us-ascii?Q?gg=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: 0IjTyIhI+105U+0sHs0YjqS+pf8vMU0OQUkoDNrCStJ3Bt7cADTlydzG7ZzlC9hkibO7fVnpOjo/aVUu3fdHg875llhiKpb0qe0XJ3WeQpmMHc8DBpSZBqiGNwc8qMcTUKNov2I17fIU4D6PD3agTi/DKp0uJBmU5R8+D2Clqk157+OopLOr/cOfhNny5i8ZV9eyI8gN4UUG76EAo15RLglNnqistanszyHQnIiOO4lQH59i6RX3RDQsGR/d88Xc5jSSkCvmo6acJO3Rdn3yI0LghpxRAkILUbdqOpTdGyEDaL8P4b13qnYLP4Wa55OZno74mP6lRIygWOdKWGhDbJmr2tj5dnxIXuuxpIOSbl4EmC4g5HGms54g/qdpvudmpNpwEfzbEk0zKb5mgKD/Nk0IZshfiD7dQyo/LzCBJHnWJdU69t0pLdkv2ZbYf3MBI6l86S6mde6rxYevkt53iXqVY3WPT4EEJ5BNTFQ2SzNFLmZrq/YwUnkVINqpgYl745cXjWigorBpJShHnSq+0L5AeQtazglUkQcnDVflyizeCB6L/9XJOFSjxF7py+zhW03Sv84G5H86gCRXrIet6o1CVSK4kAeHh9vB8hUp5Xwh1u73rimYA3w/L3f77LnZ6Y6YGvuzEEBKq2N1+swAPOb7Z9Dx04oek/cAGye6Q/dVbj0iSdc5Mc+PA/OQi5rrbUHsxWNMuYjp05/lpyNbeqtQXH88+aPXd4i4fWYebCnqUM+sYw/iXBBwUXRYyOFrNb/6C8EDljYQRLnF9/kwSQ== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9ffe04a-56b6-4996-3a04-08dbe85ad99a X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2888.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Nov 2023 17:21:50.1647 (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: x929ogKKWKVN9LtKxJKK18JIjW/46I/QjLw0I4pR77/3azliG4gNe4flKtYiJs7ZbgkxNOg4nFz8NKwGALeFIZliv6ZntpkFyHov08sqlU4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLAPR10MB5219 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-11-18_13,2023-11-17_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 adultscore=0 malwarescore=0 spamscore=0 bulkscore=0 phishscore=0 mlxlogscore=698 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2311060000 definitions=main-2311180132 X-Proofpoint-GUID: Ig53G0fiShBh9OOqkdmYdDH8mWQQuqxV X-Proofpoint-ORIG-GUID: Ig53G0fiShBh9OOqkdmYdDH8mWQQuqxV X-Spam-Status: No, score=-12.6 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,T_SCC_BODY_TEXT_LINE 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: 2023-11-18 Jose E. Marchesi * config/tc-bpf.c (parse_bpf_register): Move before bpf_parse_name. (bpf_parse_name): Do not allow using symbols that are also register names as operands in pseudo-c syntax. * testsuite/gas/bpf/regs-for-symbols-pseudoc.d: New file. * testsuite/gas/bpf/regs-for-symbols-pseudoc.s: Likewise. * testsuite/gas/bpf/regs-for-symbols-pseudoc.l: Likewise. * doc/c-bpf.texi (BPF Registers): Document that it is not possible to refer to register names as symbols in instruction operands. --- gas/ChangeLog | 12 ++ gas/config/tc-bpf.c | 113 ++++++++++-------- gas/doc/c-bpf.texi | 7 +- gas/testsuite/gas/bpf/bpf.exp | 4 + .../gas/bpf/regs-for-symbols-pseudoc.d | 3 + .../gas/bpf/regs-for-symbols-pseudoc.l | 8 ++ .../gas/bpf/regs-for-symbols-pseudoc.s | 4 + 7 files changed, 102 insertions(+), 49 deletions(-) create mode 100644 gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.d create mode 100644 gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.l create mode 100644 gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.s diff --git a/gas/ChangeLog b/gas/ChangeLog index cbe2a57dfee..9f966be40b5 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,15 @@ +2023-11-18 Jose E. Marchesi + + * config/tc-bpf.c (parse_bpf_register): Move before + bpf_parse_name. + (bpf_parse_name): Do not allow using symbols that are also + register names as operands in pseudo-c syntax. + * testsuite/gas/bpf/regs-for-symbols-pseudoc.d: New file. + * testsuite/gas/bpf/regs-for-symbols-pseudoc.s: Likewise. + * testsuite/gas/bpf/regs-for-symbols-pseudoc.l: Likewise. + * doc/c-bpf.texi (BPF Registers): Document that it is not possible + to refer to register names as symbols in instruction operands. + 2023-11-15 YunQiang Su * testsuite/gas/mips/mips.exp (mips_arch_create): Add "--defsym diff --git a/gas/config/tc-bpf.c b/gas/config/tc-bpf.c index 3122f80804a..45abc3c9578 100644 --- a/gas/config/tc-bpf.c +++ b/gas/config/tc-bpf.c @@ -1255,6 +1255,54 @@ parse_expression (char *s, expressionS *exp) return s; } +/* Parse a BPF register name and return the corresponding register + number. Return NULL in case of parse error, or a pointer to the + first character in S that is not part of the register name. */ + +static char * +parse_bpf_register (char *s, char rw, uint8_t *regno) +{ + if (asm_dialect == DIALECT_NORMAL) + { + rw = 'r'; + if (*s != '%') + return NULL; + s += 1; + + if (*s == 'f' && *(s + 1) == 'p') + { + *regno = 10; + s += 2; + return s; + } + } + + if (*s != rw) + return NULL; + s += 1; + + if (*s == '1') + { + if (*(s + 1) == '0') + { + *regno = 10; + s += 2; + } + else + { + *regno = 1; + s += 1; + } + } + else if (*s >= '0' && *s <= '9') + { + *regno = *s - '0'; + s += 1; + } + + return s; +} + /* Symbols created by this parse, but not yet committed to the real symbol table. */ static symbolS *deferred_sym_rootP; @@ -1283,6 +1331,23 @@ bpf_parse_name (const char *name, expressionS *exp, enum expr_mode mode) gas_assert (mode == expr_normal); + /* Pseudo-C syntax uses unprefixed register names like r2 or w3. + Since many instructions take either a register or an + immediate/expression, we should not allow references to symbols + with these names in operands. */ + if (asm_dialect == DIALECT_PSEUDOC) + { + uint8_t regno; + + if (parse_bpf_register ((char *) name, 'r', ®no) + || parse_bpf_register ((char *) name, 'w', ®no)) + { + as_bad (_("unexpected register name `%s' in expression"), + name); + return false; + } + } + if (symbol_find (name) != NULL) return false; @@ -1320,54 +1385,6 @@ bpf_parse_name (const char *name, expressionS *exp, enum expr_mode mode) return true; } -/* Parse a BPF register name and return the corresponding register - number. Return NULL in case of parse error, or a pointer to the - first character in S that is not part of the register name. */ - -static char * -parse_bpf_register (char *s, char rw, uint8_t *regno) -{ - if (asm_dialect == DIALECT_NORMAL) - { - rw = 'r'; - if (*s != '%') - return NULL; - s += 1; - - if (*s == 'f' && *(s + 1) == 'p') - { - *regno = 10; - s += 2; - return s; - } - } - - if (*s != rw) - return NULL; - s += 1; - - if (*s == '1') - { - if (*(s + 1) == '0') - { - *regno = 10; - s += 2; - } - else - { - *regno = 1; - s += 1; - } - } - else if (*s >= '0' && *s <= '9') - { - *regno = *s - '0'; - s += 1; - } - - return s; -} - /* Collect a parse error message. */ static int partial_match_length = 0; diff --git a/gas/doc/c-bpf.texi b/gas/doc/c-bpf.texi index bdd9fde0f5a..25ae231d19c 100644 --- a/gas/doc/c-bpf.texi +++ b/gas/doc/c-bpf.texi @@ -113,7 +113,12 @@ Read-only frame pointer register. @noindent Note that in the Pseudo-C syntax register names are not preceded by -@code{%} characters. +@code{%} characters. A consequence of that is that in contexts like +instruction operands, where both register names and expressions +involving symbols are expected, there is no way to disambiguate +between them. In order to keep things simple, this assembler does not +allow to refer to symbols whose names collide with register names in +instruction operands. @node BPF Directives @section BPF Directives diff --git a/gas/testsuite/gas/bpf/bpf.exp b/gas/testsuite/gas/bpf/bpf.exp index fcbeccd8ecd..5bcd8c483a0 100644 --- a/gas/testsuite/gas/bpf/bpf.exp +++ b/gas/testsuite/gas/bpf/bpf.exp @@ -73,6 +73,10 @@ if {[istarget bpf*-*-*]} { run_dump_test disp32-overflow run_dump_test imm32-overflow + # In Pseudo-C it is not possible to refer to symbols + # as operands that have the same name than registers. + run_dump_test regs-for-symbols-pseudoc + # Test that parser does not create undefined symbols run_dump_test asm-extra-sym-1 } diff --git a/gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.d b/gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.d new file mode 100644 index 00000000000..d99ec8f94c2 --- /dev/null +++ b/gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.d @@ -0,0 +1,3 @@ +#as: -EL -mdialect=pseudoc +#source: regs-for-symbols-pseudoc.s +#error_output: regs-for-symbols-pseudoc.l diff --git a/gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.l b/gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.l new file mode 100644 index 00000000000..eeda735fb99 --- /dev/null +++ b/gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.l @@ -0,0 +1,8 @@ +.*: Assembler messages: +.*:1: Error: unexpected register name `w3' in expression +.*:2: Error: unexpected register name `r3' in expression +.*:2: Error: unexpected register name `r3' in expression +.*:3: Error: unexpected register name `r3' in expression +.*:3: Error: unexpected register name `r3' in expression +.*:4: Error: unexpected register name `r3' in expression +.*:4: Error: unexpected register name `r3' in expression diff --git a/gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.s b/gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.s new file mode 100644 index 00000000000..693787d5479 --- /dev/null +++ b/gas/testsuite/gas/bpf/regs-for-symbols-pseudoc.s @@ -0,0 +1,4 @@ + goto w3 + r2 = r3 ll + r2 = r3+1 ll + r2 = 1+r3 ll -- 2.30.2