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 AA1043858C83 for ; Wed, 15 Mar 2023 17:25:44 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AA1043858C83 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=oracle.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=oracle.com Received: from pps.filterd (m0333521.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32FHJRpm020587 for ; Wed, 15 Mar 2023 17:25:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=references : from : to : cc : subject : in-reply-to : date : message-id : content-type : mime-version; s=corp-2022-7-12; bh=x5Fwsw1Xi9zMna2CyQS2CRnPtYtID3mtTGO2PuOc4J8=; b=0mZC4vW1JDcgEhybK8FI6gccjqazyd8a0a9Xffz7q/OcP5fUksT/WvM/LoC/pFOucqkG YfSFVnu7N/uLU/bpjap8Hg8QEYt0fn0iv8GE9mcV9pyw0NdYvvsXbwFOPQ1WCYo3MUSl Hu2vq7lis2bMXzPT3WdDp1I7q2nJNWRC/FZY6haCYMMJeRbIUGQID0jrPpuPBA4OL9NA HOVNSqTAJj9h0oC6f0p9t62uhrh4WDzzTwsVErghdguxUyRFSquPv1Jh/287H2rIAJjF md7KzOmLJzTYBO3mEIYajq4CU+eTgKBgHDwTfpKuDFqzghEWj0JNWrGHOnTiEnJJbxM8 FA== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pb2eaj12y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 15 Mar 2023 17:25:43 +0000 Received: from pps.filterd (iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 32FHO4m4025262 for ; Wed, 15 Mar 2023 17:25:41 GMT Received: from nam11-co1-obe.outbound.protection.outlook.com (mail-co1nam11lp2176.outbound.protection.outlook.com [104.47.56.176]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3pb2w7nxxr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 15 Mar 2023 17:25:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=GTM0te/YWUR+oxwrVnpkgpMzrj/dqoJqlvBuVGTP2r708c8ZgMHY4492D0KolNdoHA0H3rtqlaNzxG0YYgp4qoLIf801Fmdo7vAIht4OFi7VnNlaez+PGspLHMG8SfpL/sde3ZwvxaSaut/AyU9C/psycpF36GwKQencr49TRpxL1yefg7XO9G6J8jH5KMwRQW6KDNvmWnzp0CAWrkvuiKYfjOOgfaqfDgsmGUM/YeO2EBtuLNDFJiqRU0LAoWsGd6YHFolcPY10S3R/GAJJCsv6dkXTliTNMAQCCKB0/SCbmp5LDSNUUBUm2iWZrT1Y2nm1XA2/g/V0spUU2XHbzQ== 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=x5Fwsw1Xi9zMna2CyQS2CRnPtYtID3mtTGO2PuOc4J8=; b=T4Wbu1tE2g6HU9qbX9kPM8Um+MyxP13mW83bJuMgbD8w8iAwj588WkoAoc2WvA3eak85xaKV51rWN8Esze2QRk8OWDtNCuiThYpaFdSFg7a6BdL8FJsASNfdZjHfhyIqg2qbb7glSWMt7YojepZYvhoe+4AkkZj4EK/b5kn4Y1k3K2DWs19nihahez1/S9Hy3ENrdyxGwaLLSf4g8f1ZVC49gm/x6VG+qLsukXV99C7E3tnZdCAompepQUfIBVbXfGbkyJBx7/+NzM1JaNr4sb7LMvIHHCeB+jcqZWZoQn3juZxm//dJ3BK1YoLBO96IaiWf6V23WWTyu9gjAEWUsg== 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=x5Fwsw1Xi9zMna2CyQS2CRnPtYtID3mtTGO2PuOc4J8=; b=zOPVD7DhUechw9MbTZCOQNylOrSmno7htgHnjSpMTuSgaPCmMnXXiITVLnvLPiBcQkN69Tj0EhZJl5VrenCfidTna3jDgsfarwoPV4quyu6oKErICDWYEbN0RAxOVhEXPaYqgHqerlIc3iIIMPKjHR0NGYQe6nzT7M0j8ikJxao= Received: from BN6PR1001MB2340.namprd10.prod.outlook.com (2603:10b6:405:30::36) by MW6PR10MB7658.namprd10.prod.outlook.com (2603:10b6:303:244::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.29; Wed, 15 Mar 2023 17:25:38 +0000 Received: from BN6PR1001MB2340.namprd10.prod.outlook.com ([fe80::a502:c948:c3f6:9728]) by BN6PR1001MB2340.namprd10.prod.outlook.com ([fe80::a502:c948:c3f6:9728%6]) with mapi id 15.20.6178.022; Wed, 15 Mar 2023 17:25:38 +0000 References: <20230302112531.200647-1-cupertino.miranda@oracle.com> <20230302112531.200647-2-cupertino.miranda@oracle.com> <87wn3irmu2.fsf@oracle.com> User-agent: mu4e 1.4.15; emacs 28.1 From: Cupertino Miranda To: "Jose E. Marchesi" Cc: binutils@sourceware.org Subject: Re: [PATCH] BPF relocations review / refactoring In-reply-to: <87wn3irmu2.fsf@oracle.com> Date: Wed, 15 Mar 2023 17:25:30 +0000 Message-ID: <87ttymorjp.fsf@oracle.com> Content-Type: text/plain X-ClientProxiedBy: LO4P123CA0194.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1a4::19) To BN6PR1001MB2340.namprd10.prod.outlook.com (2603:10b6:405:30::36) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN6PR1001MB2340:EE_|MW6PR10MB7658:EE_ X-MS-Office365-Filtering-Correlation-Id: 70aaba90-9939-4e2f-55e0-08db257a4b01 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: NTXtKECr5s712xG3jCc/8jh+XzeJekQHVlgCwuazyEvgpqzFvFk+iibnwstW0CbHqBGfB4gbMwT3rIhhOri409lpGpK+V1hhl5oHzl5zUioRjcgQIwMCJMe+dkWKNtBVIMoknK1nKVJbRPk8HxYoATAY4lHJ6KZkfhyZW7oQ/FnpMZ873C4P46AKpRR4ua/DBmCUXIexXAhVTUyK4Aj4VQokl3VfaJbzD4H/Jwn2d6sPWAzEXm01ZZwx5e7MfzVv00hg8qak5o7Yatj0JTkgKirNlHk/jA8o0f+JDBYjBsS5biDjCOxgbl11oqUiVwYJfZJ+T0Dk98VDmsl5IqfQ5OtxG4qfKREJMJyEIpbe1dNq1p3D8BY/WwDwSnGMLgx8+9mCIoo00vBJaT++ll/ZzBqxvuwDSefN1DEPMkcB4Z0wnO47XCt7/+rayYZuMfwtP6wL3VzG0XGUlcLfQdvfFO+HFM1TTegkpwoAK7VIIRWkPtuEAUK0xMdeSbmIWZANfwist7eoLBgXyZbQHodSJ4+5qCpJqgI1otku7Rfmngmj9PEL4ydtv/3xg0p/V7zo//ZRfM/YwCdY2ThhF4A2Fzb2xfSCjbpHdAvI6PGyduRJsSxrzXaHUSpiw3o3zlXns/PuQ6duCFiNG/B31WcRsA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BN6PR1001MB2340.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(376002)(39860400002)(136003)(346002)(366004)(396003)(451199018)(6862004)(8936002)(44832011)(30864003)(5660300002)(41300700001)(4326008)(8676002)(36756003)(86362001)(38100700002)(2906002)(2616005)(6506007)(6512007)(186003)(83380400001)(478600001)(6486002)(6666004)(66476007)(66556008)(66946007)(6636002)(37006003)(316002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?167Nj8YNpR5mSK3G0ZH+lra5ov0iW78n+ILJUgPyqvLXgqCejKoRJBdkEtlQ?= =?us-ascii?Q?5s1Q31qgaX88pYA7x+rQ3TM8G/X0vKSDa8xSkEa8ms/JQ1AEpu3FJDP6SWwB?= =?us-ascii?Q?Ej12BzrFVdQsfhU3GTsUhq/rZMXTIMPqYXdleultld/8V3GBAhmeiqdKjpFR?= =?us-ascii?Q?3tF6vNvuxvXEsHgh/Q9JrXY4agXLBXy532ZmPmgGCAqPGlTt8nDS4xZ1q6rW?= =?us-ascii?Q?h2X6v3zPI4OueIwvCGzMCOrFGnzsx5pY6M06ODFXzVzXm6/6hhxWP4XH0vDp?= =?us-ascii?Q?5THqLnMMb300gB86y17r3kJgtop1/JLsoXq47CaIT3L1lKaKinhDGove7g6+?= =?us-ascii?Q?t5obU4MEp860omLcX1yKsqQb/P7lHSTLSlWLCmXDrJoOVhb6zbC2fmL1nzna?= =?us-ascii?Q?gtqmvYQKoLOZiSC7yR/VdRrQHQ29+YR6QX32jf3yPm/ep5n9KNcltncEZe8Z?= =?us-ascii?Q?tLm83fzkV0ZHV2lVtRHwHBWbEH7Kxq3cGTY95+2SEWDJekhqLQDt0muv2SIF?= =?us-ascii?Q?6VYDJI6d9S1sk9cdcz6WZIlW/81DsYM8QKY+igniHq2irhs0H1B+lspYl/Mf?= =?us-ascii?Q?VoDgEg+QcuRtkn2tCtCspwDlY96qtq6KK/UEdpizyVWJe6Dzfa4APTbA04CW?= =?us-ascii?Q?q/B/rNiHOtMGwplR/rreIFdNUqYPaYwcih3WtZhv852D40jJH+LTOrOMPlvs?= =?us-ascii?Q?HI8+Lajyvazh3jjmXj6z17DdEFv9LNrxYbHMOYS3ZjQ46tsIzDc6TY7C9GDr?= =?us-ascii?Q?Xy16ux04nR80DjXXqRdYb5T4/ZaHkWj2tbiszfJ/RbqL/t7zE1PjCw3DhnLf?= =?us-ascii?Q?Jdodp0Rlc1CgQMSs30K+lhPw7S26u8HrJ7KjJw/2ZWSxHX4SWFl6pTaOV4FB?= =?us-ascii?Q?NgGzBhjT5SimuQLLUsfM9+HHdu+9Jd5+/no/s3Gdiy1S0ZbDQm9z/OiBAsGT?= =?us-ascii?Q?MR0Q5jwHdUsc+myBHYwvGc2VaIOkta/+YLD5VIH5h/GpXq1hVDo+3Lj7ryl9?= =?us-ascii?Q?EvgylNsDLPkBRjLtBIFRZGXF7ovqWGVnfsZW2nDIAlrPb3Z/Jg6C6BZzZ8PA?= =?us-ascii?Q?BwmO1evOdM99LCyUtU/N4D6X8TggI49VJy1v538FHyUMIXSUFjx0OnFm87d0?= =?us-ascii?Q?KfejXNZNj/ObPThVkFd9z9mY5zakZ9t4qHZSyoOTdu2K6v/yGwcpQMCH13iE?= =?us-ascii?Q?UqIB4YDe+DrGAfq42fKR+Pq4rrTI4zGadRzVREOcCa8493liQLKiQxpkPAdF?= =?us-ascii?Q?JCkLc6Xn5crv/+Qqwi34ck/AIF/3ibOeAFxVND9ezO0UHbj6faeDQN3FLDTg?= =?us-ascii?Q?ciCNFGf7UpZdLI+A3VHWcT5t4BcuSvrgg8iztRKisRtGnrhjwuLFEtCU8Wl5?= =?us-ascii?Q?5Oiml7kxcREsRR5aYKblmquSN5UQPtaYwmz/jo2yhGdqbhzh7SDxSuq1FiuB?= =?us-ascii?Q?kVY1c9xNRcJnDhoGzmd3C6INorHBrsrp3SBluP7dJ3O3z5K8XlJ11zbFzlSg?= =?us-ascii?Q?noCXaAMHETV1uCTljHzajaV5ftEHx3XBqC60VJ0ABAwikosFfSxPoNqWur2i?= =?us-ascii?Q?ui5Ztx9ysvxs6VU4PEXX7XUZTI5LP6ZGsW5B+a2Eegim0QLFhMbBVtK3AzBi?= =?us-ascii?Q?sFLZIFvGaHRbO2aqRNjArgIL/UzSuys06DVU4ZtNjkp3?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: fZCsGSaTaWT/9uwcYCjlbd0rL9pbm+xSqvjDEA2HxrrVpgDB/MjUJAP1zjWX8pc2jTxSif8H51qYtYdHkqctIdfhZF/Kanp5ucyG3LGRFwjKHIl0nD2ezTUh0vPfgmlvbnScRmU4YmcfAd6MKoA9lLNB5EUBXzDBJ6CoJV45tzvzkqJxQ7cGktb6SRxs997HnohrXnepo35Qx0+v+Sp6r3zyOO6joOToTbTTvlV3DTkP0u82Rk4zlpeu+zT6nis4r+rxRRHHvLiyPZk6zIzwbpCRpoCxn0wDU3v0sKQAT+85ZiWv8Rc3F3CfuRIBxqMyZofp2sv0sMlYg9++Gx/gIY5zFccg45X2tbExK6yoa3yNfBIU/IdbLlQW7Rh0RliwNAI9c4cNOYvb0EPYyTYR6+DAfKm0JCUarxIPax4q2G3wYUViCK3YfT1JgrHbsMmWLwl7A0sE59bkw/c4+jslMHsjru38D23xvnTFUrF5vW8zIEPN3y/nDYHGyhXfhzy27fhLEywEEAnPTiAKMjynE3upJfF9Gfa6Q4CHI4UE3+FX2PS8Ylnf6MCI7iUkd84apEvAo0rGtRKdt/z8gdgNJuLp5Lq9hKqLpm4L3VrDqGcIMDDV7+kKwDTZVc0zp/tusluDO5mn16t8u7/qe7sAavP2jmW2otBrAiw9u4SFKIzHBEo1mrxvUcKinihUxPDt8C/ukUdBNp1R1yA7L1fyuZMNyITWxG7CkyfMKsWiIAcjzz4wuJbGscyc73bBmrZa X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 70aaba90-9939-4e2f-55e0-08db257a4b01 X-MS-Exchange-CrossTenant-AuthSource: BN6PR1001MB2340.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2023 17:25:38.0017 (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: Y6BPjVKhVOW/nqLCbSrHaA96udh7q7QkM+EDKA0TIgMXc+0NN8F7HpgR8JLuPyBbPIwnScDGtq8MKkqcQS4cK1bZUa9Q8dZv5ssbOOyakpY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW6PR10MB7658 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-03-15_08,2023-03-15_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 bulkscore=0 mlxlogscore=999 adultscore=0 spamscore=0 mlxscore=0 phishscore=0 suspectscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2302240000 definitions=main-2303150146 X-Proofpoint-ORIG-GUID: w5_mKxllTAs_gNlKnCFvg_-ynk39iZBI X-Proofpoint-GUID: w5_mKxllTAs_gNlKnCFvg_-ynk39iZBI X-Spam-Status: No, score=-11.7 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_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: Hi Jose, Have just run src-release.sh and can confirm that .def is in the release tarball. find ./ -name "*.def" | grep bpf ./bfd/bpf-reloc.def Cupertino Jose E. Marchesi writes: > Hi Cupertino. > > The approach, the switch to the consolidated BPF relocs, and the patch > itself LGTM. > > The only comment I have is: will bpf-reloc.def be included in the > binutils distribution tarball? The binutils releases are done by > running the src-release.sh. So we need to make sure the .def file ends > in the tarball... > >> - Removed not needed relocations. >> - Renamed relocations to match llvm and linux kernel. >> >> Relocation changes: >> R_BPF_INSN_64 => R_BPF_64_64 >> R_BPF_INSN_DISP32 => R_BPF_64_32 >> R_BPF_DATA_32 => R_BPF_64_ABS32 >> R_BPF_DATA_64 => R_BPF_64_ABS64 >> >> ChangeLog: >> >> * bfd/bpf-reloc.def: Created file with BPF_HOWTO macro entries. >> * bfd/reloc.c: Removed non needed relocations. >> * bfd/bfd-in2.h: regenerated. >> * bfd/libbfd.h: regenerated. >> * bfd/elf64-bpf.c: Changed relocations. >> * include/elf/bpf.h: Adapted relocation values/names. >> * gas/config/tc-bpf.c: Changed relocation mapping. >> --- >> bfd/bfd-in2.h | 3 - >> bfd/bpf-reloc.def | 74 +++++++++++ >> bfd/elf64-bpf.c | 314 +++++++------------------------------------- >> bfd/libbfd.h | 3 - >> bfd/reloc.c | 6 - >> gas/config/tc-bpf.c | 7 - >> include/elf/bpf.h | 22 ++-- >> 7 files changed, 129 insertions(+), 300 deletions(-) >> create mode 100644 bfd/bpf-reloc.def >> >> diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h >> index 7c5953442aa..b60ff960f08 100644 >> --- a/bfd/bfd-in2.h >> +++ b/bfd/bfd-in2.h >> @@ -6079,9 +6079,6 @@ assembler and not (currently) written to any object files. */ >> >> /* Linux eBPF relocations. */ >> BFD_RELOC_BPF_64, >> - BFD_RELOC_BPF_32, >> - BFD_RELOC_BPF_16, >> - BFD_RELOC_BPF_DISP16, >> BFD_RELOC_BPF_DISP32, >> >> /* Adapteva EPIPHANY - 8 bit signed pc-relative displacement */ >> diff --git a/bfd/bpf-reloc.def b/bfd/bpf-reloc.def >> new file mode 100644 >> index 00000000000..b1be2eb66f6 >> --- /dev/null >> +++ b/bfd/bpf-reloc.def >> @@ -0,0 +1,74 @@ >> + /* This reloc does nothing. */ >> + BPF_HOWTO (R_BPF_NONE, /* type */ >> + 0, /* rightshift */ >> + 0, /* size */ >> + 0, /* bitsize */ >> + false, /* pc_relative */ >> + 0, /* bitpos */ >> + complain_overflow_dont, /* complain_on_overflow */ >> + bpf_elf_generic_reloc, /* special_function */ >> + "R_BPF_NONE", /* name */ >> + false, /* partial_inplace */ >> + 0, /* src_mask */ >> + 0, /* dst_mask */ >> + false) /* pcrel_offset */ >> + >> + /* 64-immediate in LDDW instruction. */ >> + BPF_HOWTO (R_BPF_64_64, /* type */ >> + 0, /* rightshift */ >> + 8, /* size */ >> + 64, /* bitsize */ >> + false, /* pc_relative */ >> + 32, /* bitpos */ >> + complain_overflow_signed, /* complain_on_overflow */ >> + bpf_elf_generic_reloc, /* special_function */ >> + "R_BPF_64_64", /* name */ >> + true, /* partial_inplace */ >> + MINUS_ONE, /* src_mask */ >> + MINUS_ONE, /* dst_mask */ >> + true) /* pcrel_offset */ >> + >> + /* 32-bit data. */ >> + BPF_HOWTO (R_BPF_64_ABS32, /* type */ >> + 0, /* rightshift */ >> + 4, /* size */ >> + 32, /* bitsize */ >> + false, /* pc_relative */ >> + 0, /* bitpos */ >> + complain_overflow_bitfield, /* complain_on_overflow */ >> + bpf_elf_generic_reloc, /* special_function */ >> + "R_BPF_64_ABS32", /* name */ >> + false, /* partial_inplace */ >> + 0xffffffff, /* src_mask */ >> + 0xffffffff, /* dst_mask */ >> + true) /* pcrel_offset */ >> + >> + /* 64-bit data. */ >> + BPF_HOWTO (R_BPF_64_ABS64, /* type */ >> + 0, /* rightshift */ >> + 8, /* size */ >> + 64, /* bitsize */ >> + false, /* pc_relative */ >> + 0, /* bitpos */ >> + complain_overflow_bitfield, /* complain_on_overflow */ >> + bpf_elf_generic_reloc, /* special_function */ >> + "R_BPF_64_ABS64", /* name */ >> + false, /* partial_inplace */ >> + 0, /* src_mask */ >> + MINUS_ONE, /* dst_mask */ >> + true) /* pcrel_offset */ >> + >> + /* 32-bit PC-relative address in call instructions. */ >> + BPF_HOWTO (R_BPF_64_32, /* type */ >> + 0, /* rightshift */ >> + 4, /* size */ >> + 32, /* bitsize */ >> + true, /* pc_relative */ >> + 32, /* bitpos */ >> + complain_overflow_signed, /* complain_on_overflow */ >> + bpf_elf_generic_reloc, /* special_function */ >> + "R_BPF_64_32", /* name */ >> + true, /* partial_inplace */ >> + 0xffffffff, /* src_mask */ >> + 0xffffffff, /* dst_mask */ >> + true) /* pcrel_offset */ >> diff --git a/bfd/elf64-bpf.c b/bfd/elf64-bpf.c >> index 4f9949b515b..ef34d62df01 100644 >> --- a/bfd/elf64-bpf.c >> +++ b/bfd/elf64-bpf.c >> @@ -34,214 +34,40 @@ >> static bfd_reloc_status_type bpf_elf_generic_reloc >> (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **); >> >> +#undef BPF_HOWTO >> +#define BPF_HOWTO(type, right, size, bits, pcrel, left, ovf, func, name, \ >> + inplace, src_mask, dst_mask, pcrel_off) \ >> + type##_IDX, >> +enum bpf_reloc_index { >> + R_BPF_INVALID_IDX = -1, >> +#include "bpf-reloc.def" >> + R_BPF_SIZE >> +}; >> +#undef BPF_HOWTO >> + >> /* Relocation tables. */ >> +#define BPF_HOWTO(...) HOWTO(__VA_ARGS__), >> static reloc_howto_type bpf_elf_howto_table [] = >> { >> - /* This reloc does nothing. */ >> - HOWTO (R_BPF_NONE, /* type */ >> - 0, /* rightshift */ >> - 0, /* size */ >> - 0, /* bitsize */ >> - false, /* pc_relative */ >> - 0, /* bitpos */ >> - complain_overflow_dont, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_NONE", /* name */ >> - false, /* partial_inplace */ >> - 0, /* src_mask */ >> - 0, /* dst_mask */ >> - false), /* pcrel_offset */ >> - >> - /* 64-immediate in LDDW instruction. */ >> - HOWTO (R_BPF_INSN_64, /* type */ >> - 0, /* rightshift */ >> - 8, /* size */ >> - 64, /* bitsize */ >> - false, /* pc_relative */ >> - 32, /* bitpos */ >> - complain_overflow_signed, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_INSN_64", /* name */ >> - true, /* partial_inplace */ >> - MINUS_ONE, /* src_mask */ >> - MINUS_ONE, /* dst_mask */ >> - true), /* pcrel_offset */ >> - >> - /* 32-immediate in many instructions. */ >> - HOWTO (R_BPF_INSN_32, /* type */ >> - 0, /* rightshift */ >> - 4, /* size */ >> - 32, /* bitsize */ >> - false, /* pc_relative */ >> - 32, /* bitpos */ >> - complain_overflow_signed, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_INSN_32", /* name */ >> - true, /* partial_inplace */ >> - 0xffffffff, /* src_mask */ >> - 0xffffffff, /* dst_mask */ >> - true), /* pcrel_offset */ >> - >> - /* 16-bit offsets in instructions. */ >> - HOWTO (R_BPF_INSN_16, /* type */ >> - 0, /* rightshift */ >> - 2, /* size */ >> - 16, /* bitsize */ >> - false, /* pc_relative */ >> - 16, /* bitpos */ >> - complain_overflow_signed, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_INSN_16", /* name */ >> - true, /* partial_inplace */ >> - 0x0000ffff, /* src_mask */ >> - 0x0000ffff, /* dst_mask */ >> - true), /* pcrel_offset */ >> - >> - /* 16-bit PC-relative address in jump instructions. */ >> - HOWTO (R_BPF_INSN_DISP16, /* type */ >> - 0, /* rightshift */ >> - 2, /* size */ >> - 16, /* bitsize */ >> - true, /* pc_relative */ >> - 16, /* bitpos */ >> - complain_overflow_signed, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_INSN_DISP16", /* name */ >> - true, /* partial_inplace */ >> - 0xffff, /* src_mask */ >> - 0xffff, /* dst_mask */ >> - true), /* pcrel_offset */ >> - >> - HOWTO (R_BPF_DATA_8_PCREL, >> - 0, /* rightshift */ >> - 1, /* size */ >> - 8, /* bitsize */ >> - true, /* pc_relative */ >> - 0, /* bitpos */ >> - complain_overflow_signed, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_8_PCREL", /* name */ >> - true, /* partial_inplace */ >> - 0xff, /* src_mask */ >> - 0xff, /* dst_mask */ >> - true), /* pcrel_offset */ >> - >> - HOWTO (R_BPF_DATA_16_PCREL, >> - 0, /* rightshift */ >> - 2, /* size */ >> - 16, /* bitsize */ >> - true, /* pc_relative */ >> - 0, /* bitpos */ >> - complain_overflow_signed, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_16_PCREL", /* name */ >> - false, /* partial_inplace */ >> - 0xffff, /* src_mask */ >> - 0xffff, /* dst_mask */ >> - true), /* pcrel_offset */ >> - >> - HOWTO (R_BPF_DATA_32_PCREL, >> - 0, /* rightshift */ >> - 4, /* size */ >> - 32, /* bitsize */ >> - true, /* pc_relative */ >> - 0, /* bitpos */ >> - complain_overflow_signed, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_32_PCREL", /* name */ >> - false, /* partial_inplace */ >> - 0xffffffff, /* src_mask */ >> - 0xffffffff, /* dst_mask */ >> - true), /* pcrel_offset */ >> - >> - HOWTO (R_BPF_DATA_8, >> - 0, /* rightshift */ >> - 1, /* size */ >> - 8, /* bitsize */ >> - false, /* pc_relative */ >> - 0, /* bitpos */ >> - complain_overflow_unsigned, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_DATA_8", /* name */ >> - true, /* partial_inplace */ >> - 0xff, /* src_mask */ >> - 0xff, /* dst_mask */ >> - false), /* pcrel_offset */ >> - >> - HOWTO (R_BPF_DATA_16, >> - 0, /* rightshift */ >> - 2, /* size */ >> - 16, /* bitsize */ >> - false, /* pc_relative */ >> - 0, /* bitpos */ >> - complain_overflow_unsigned, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_DATA_16", /* name */ >> - false, /* partial_inplace */ >> - 0xffff, /* src_mask */ >> - 0xffff, /* dst_mask */ >> - false), /* pcrel_offset */ >> - >> - /* 32-bit PC-relative address in call instructions. */ >> - HOWTO (R_BPF_INSN_DISP32, /* type */ >> - 0, /* rightshift */ >> - 4, /* size */ >> - 32, /* bitsize */ >> - true, /* pc_relative */ >> - 32, /* bitpos */ >> - complain_overflow_signed, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_INSN_DISP32", /* name */ >> - true, /* partial_inplace */ >> - 0xffffffff, /* src_mask */ >> - 0xffffffff, /* dst_mask */ >> - true), /* pcrel_offset */ >> - >> - /* 32-bit data. */ >> - HOWTO (R_BPF_DATA_32, /* type */ >> - 0, /* rightshift */ >> - 4, /* size */ >> - 32, /* bitsize */ >> - false, /* pc_relative */ >> - 0, /* bitpos */ >> - complain_overflow_bitfield, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_DATA_32", /* name */ >> - false, /* partial_inplace */ >> - 0xffffffff, /* src_mask */ >> - 0xffffffff, /* dst_mask */ >> - true), /* pcrel_offset */ >> - >> - /* 64-bit data. */ >> - HOWTO (R_BPF_DATA_64, /* type */ >> - 0, /* rightshift */ >> - 8, /* size */ >> - 64, /* bitsize */ >> - false, /* pc_relative */ >> - 0, /* bitpos */ >> - complain_overflow_bitfield, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_DATA_64", /* name */ >> - false, /* partial_inplace */ >> - 0, /* src_mask */ >> - MINUS_ONE, /* dst_mask */ >> - true), /* pcrel_offset */ >> - >> - HOWTO (R_BPF_DATA_64_PCREL, >> - 0, /* rightshift */ >> - 8, /* size */ >> - 64, /* bitsize */ >> - true, /* pc_relative */ >> - 0, /* bitpos */ >> - complain_overflow_signed, /* complain_on_overflow */ >> - bpf_elf_generic_reloc, /* special_function */ >> - "R_BPF_64_PCREL", /* name */ >> - false, /* partial_inplace */ >> - MINUS_ONE, /* src_mask */ >> - MINUS_ONE, /* dst_mask */ >> - true), /* pcrel_offset */ >> + #include "bpf-reloc.def" >> }; >> #undef AHOW >> +#undef BPF_HOWTO >> + >> +#define BPF_HOWTO(type, right, size, bits, pcrel, left, ovf, func, name, \ >> + inplace, src_mask, dst_mask, pcrel_off) \ >> + case type: { return type##_IDX; } >> +static enum bpf_reloc_index >> +bpf_index_for_rtype(unsigned int r_type) >> +{ >> + switch(r_type) { >> +#include "bpf-reloc.def" >> + default: >> + /* Unreachable code. */ >> + BFD_ASSERT(0); >> + return -1; >> + }; >> +} >> >> /* Map BFD reloc types to bpf ELF reloc types. */ >> >> @@ -249,44 +75,20 @@ static reloc_howto_type * >> bpf_reloc_type_lookup (bfd * abfd ATTRIBUTE_UNUSED, >> bfd_reloc_code_real_type code) >> { >> - /* Note that the bpf_elf_howto_table is indexed by the R_ constants. >> - Thus, the order that the howto records appear in the table *must* >> - match the order of the relocation types defined in >> - include/elf/bpf.h. */ >> - >> switch (code) >> { >> case BFD_RELOC_NONE: >> - return &bpf_elf_howto_table[ (int) R_BPF_NONE]; >> - >> - case BFD_RELOC_8_PCREL: >> - return &bpf_elf_howto_table[ (int) R_BPF_DATA_8_PCREL]; >> - case BFD_RELOC_16_PCREL: >> - return &bpf_elf_howto_table[ (int) R_BPF_DATA_16_PCREL]; >> - case BFD_RELOC_32_PCREL: >> - return &bpf_elf_howto_table[ (int) R_BPF_DATA_32_PCREL]; >> - case BFD_RELOC_64_PCREL: >> - return &bpf_elf_howto_table[ (int) R_BPF_DATA_64_PCREL]; >> - >> - case BFD_RELOC_8: >> - return &bpf_elf_howto_table[ (int) R_BPF_DATA_8]; >> - case BFD_RELOC_16: >> - return &bpf_elf_howto_table[ (int) R_BPF_DATA_16]; >> + return &bpf_elf_howto_table[ (int) R_BPF_NONE_IDX]; >> + >> case BFD_RELOC_32: >> - return &bpf_elf_howto_table[ (int) R_BPF_DATA_32]; >> + return &bpf_elf_howto_table[ (int) R_BPF_64_ABS32_IDX]; >> case BFD_RELOC_64: >> - return &bpf_elf_howto_table[ (int) R_BPF_DATA_64]; >> + return &bpf_elf_howto_table[ (int) R_BPF_64_ABS64_IDX]; >> >> case BFD_RELOC_BPF_64: >> - return &bpf_elf_howto_table[ (int) R_BPF_INSN_64]; >> - case BFD_RELOC_BPF_32: >> - return &bpf_elf_howto_table[ (int) R_BPF_INSN_32]; >> - case BFD_RELOC_BPF_16: >> - return &bpf_elf_howto_table[ (int) R_BPF_INSN_16]; >> - case BFD_RELOC_BPF_DISP16: >> - return &bpf_elf_howto_table[ (int) R_BPF_INSN_DISP16]; >> + return &bpf_elf_howto_table[ (int) R_BPF_64_64_IDX]; >> case BFD_RELOC_BPF_DISP32: >> - return &bpf_elf_howto_table[ (int) R_BPF_INSN_DISP32]; >> + return &bpf_elf_howto_table[ (int) R_BPF_64_32_IDX]; >> >> default: >> /* Pacify gcc -Wall. */ >> @@ -302,7 +104,7 @@ bpf_reloc_name_lookup (bfd *abfd ATTRIBUTE_UNUSED, const char *r_name) >> { >> unsigned int i; >> >> - for (i = 0; i < ARRAY_SIZE (bpf_elf_howto_table); i++) >> + for (i = 0; i < R_BPF_SIZE; i++) >> if (bpf_elf_howto_table[i].name != NULL >> && strcasecmp (bpf_elf_howto_table[i].name, r_name) == 0) >> return &bpf_elf_howto_table[i]; >> @@ -317,9 +119,11 @@ bpf_info_to_howto (bfd *abfd, arelent *bfd_reloc, >> Elf_Internal_Rela *elf_reloc) >> { >> unsigned int r_type; >> - >> + unsigned int i; >> r_type = ELF64_R_TYPE (elf_reloc->r_info); >> - if (r_type >= (unsigned int) R_BPF_max) >> + >> + i = bpf_index_for_rtype(r_type); >> + if (i == (unsigned int) -1) >> { >> /* xgettext:c-format */ >> _bfd_error_handler (_("%pB: unsupported relocation type %#x"), >> @@ -328,7 +132,7 @@ bpf_info_to_howto (bfd *abfd, arelent *bfd_reloc, >> return false; >> } >> >> - bfd_reloc->howto = &bpf_elf_howto_table [r_type]; >> + bfd_reloc->howto = &bpf_elf_howto_table [i]; >> return true; >> } >> >> @@ -438,8 +242,7 @@ bpf_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, >> >> switch (howto->type) >> { >> - case R_BPF_INSN_DISP16: >> - case R_BPF_INSN_DISP32: >> + case R_BPF_64_32: >> { >> /* Make the relocation PC-relative, and change its unit to >> 64-bit words. Note we need *signed* arithmetic >> @@ -465,10 +268,8 @@ bpf_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, >> r = bfd_reloc_ok; >> break; >> } >> - case R_BPF_DATA_8: >> - case R_BPF_DATA_16: >> - case R_BPF_DATA_32: >> - case R_BPF_DATA_64: >> + case R_BPF_64_ABS64: >> + case R_BPF_64_ABS32: >> { >> addend = bfd_get (howto->bitsize, input_bfd, where); >> relocation += addend; >> @@ -477,28 +278,7 @@ bpf_elf_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, >> r = bfd_reloc_ok; >> break; >> } >> - case R_BPF_INSN_16: >> - { >> - >> - addend = bfd_get_16 (input_bfd, where + 2); >> - relocation += addend; >> - bfd_put_16 (input_bfd, relocation, where + 2); >> - >> - r = bfd_reloc_ok; >> - break; >> - } >> - case R_BPF_INSN_32: >> - { >> - /* Write relocated value */ >> - >> - addend = bfd_get_32 (input_bfd, where + 4); >> - relocation += addend; >> - bfd_put_32 (input_bfd, relocation, where + 4); >> - >> - r = bfd_reloc_ok; >> - break; >> - } >> - case R_BPF_INSN_64: >> + case R_BPF_64_64: >> { >> /* >> LDDW instructions are 128 bits long, with a 64-bit immediate. >> @@ -610,7 +390,7 @@ bpf_elf_generic_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, >> /* Sanity check that the address is in range. */ >> bfd_size_type end = bfd_get_section_limit_octets (abfd, input_section); >> bfd_size_type reloc_size; >> - if (reloc_entry->howto->type == R_BPF_INSN_64) >> + if (reloc_entry->howto->type == R_BPF_64_64) >> reloc_size = 16; >> else >> reloc_size = (reloc_entry->howto->bitsize >> @@ -642,7 +422,7 @@ bpf_elf_generic_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol, >> return status; >> >> /* Now finally install the relocation. */ >> - if (reloc_entry->howto->type == R_BPF_INSN_64) >> + if (reloc_entry->howto->type == R_BPF_64_64) >> { >> /* lddw is a 128-bit (!) instruction that allows loading a 64-bit >> immediate into a register. the immediate is split in half, with the >> diff --git a/bfd/libbfd.h b/bfd/libbfd.h >> index e75935133ac..fa6f2d71b60 100644 >> --- a/bfd/libbfd.h >> +++ b/bfd/libbfd.h >> @@ -3340,9 +3340,6 @@ static const char *const bfd_reloc_code_real_names[] = { "@@uninitialized@@", >> "BFD_RELOC_TILEGX_IMM8_Y0_TLS_ADD", >> "BFD_RELOC_TILEGX_IMM8_Y1_TLS_ADD", >> "BFD_RELOC_BPF_64", >> - "BFD_RELOC_BPF_32", >> - "BFD_RELOC_BPF_16", >> - "BFD_RELOC_BPF_DISP16", >> "BFD_RELOC_BPF_DISP32", >> "BFD_RELOC_EPIPHANY_SIMM8", >> "BFD_RELOC_EPIPHANY_SIMM24", >> diff --git a/bfd/reloc.c b/bfd/reloc.c >> index 346dd7638db..16540632613 100644 >> --- a/bfd/reloc.c >> +++ b/bfd/reloc.c >> @@ -7749,12 +7749,6 @@ ENUMDOC >> >> ENUM >> BFD_RELOC_BPF_64 >> -ENUMX >> - BFD_RELOC_BPF_32 >> -ENUMX >> - BFD_RELOC_BPF_16 >> -ENUMX >> - BFD_RELOC_BPF_DISP16 >> ENUMX >> BFD_RELOC_BPF_DISP32 >> ENUMDOC >> diff --git a/gas/config/tc-bpf.c b/gas/config/tc-bpf.c >> index aa701584470..1f8b0cc2ede 100644 >> --- a/gas/config/tc-bpf.c >> +++ b/gas/config/tc-bpf.c >> @@ -274,15 +274,8 @@ md_cgen_lookup_reloc (const CGEN_INSN *insn ATTRIBUTE_UNUSED, >> { >> switch (operand->type) >> { >> - case BPF_OPERAND_OFFSET16: >> - return BFD_RELOC_BPF_16; >> - case BPF_OPERAND_IMM32: >> - return BFD_RELOC_BPF_32; >> case BPF_OPERAND_IMM64: >> return BFD_RELOC_BPF_64; >> - case BPF_OPERAND_DISP16: >> - fixP->fx_pcrel = 1; >> - return BFD_RELOC_BPF_DISP16; >> case BPF_OPERAND_DISP32: >> fixP->fx_pcrel = 1; >> return BFD_RELOC_BPF_DISP32; >> diff --git a/include/elf/bpf.h b/include/elf/bpf.h >> index e52f481b2be..fb1936010bf 100644 >> --- a/include/elf/bpf.h >> +++ b/include/elf/bpf.h >> @@ -26,20 +26,14 @@ >> >> /* Relocations. */ >> START_RELOC_NUMBERS (elf_bpf_reloc_type) >> - RELOC_NUMBER (R_BPF_NONE, 0) >> - RELOC_NUMBER (R_BPF_INSN_64, 1) >> - RELOC_NUMBER (R_BPF_INSN_32, 2) >> - RELOC_NUMBER (R_BPF_INSN_16, 3) >> - RELOC_NUMBER (R_BPF_INSN_DISP16, 4) >> - RELOC_NUMBER (R_BPF_DATA_8_PCREL, 5) >> - RELOC_NUMBER (R_BPF_DATA_16_PCREL, 6) >> - RELOC_NUMBER (R_BPF_DATA_32_PCREL, 7) >> - RELOC_NUMBER (R_BPF_DATA_8, 8) >> - RELOC_NUMBER (R_BPF_DATA_16, 9) >> - RELOC_NUMBER (R_BPF_INSN_DISP32, 10) >> - RELOC_NUMBER (R_BPF_DATA_32, 11) >> - RELOC_NUMBER (R_BPF_DATA_64, 12) >> - RELOC_NUMBER (R_BPF_DATA_64_PCREL, 13) >> + RELOC_NUMBER (R_BPF_NONE, 0) >> + RELOC_NUMBER (R_BPF_64_64, 1) >> + RELOC_NUMBER (R_BPF_64_ABS64, 2) >> + RELOC_NUMBER (R_BPF_64_ABS32, 3) >> +/* R_BPF_64_NODYLD32 is not used by GNU tools. >> + * It is kept in this file to remind that the value is already taken. */ >> + RELOC_NUMBER (R_BPF_64_NODYLD32, 4) >> + RELOC_NUMBER (R_BPF_64_32, 10) >> END_RELOC_NUMBERS (R_BPF_max) >> >> #endif /* _ELF_BPF_H */