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 D5D1E3858C83 for ; Wed, 15 Mar 2023 16:39:21 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D5D1E3858C83 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 (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32FFxUVv004109 for ; Wed, 15 Mar 2023 16:39:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : in-reply-to : references : date : message-id : content-type : mime-version; s=corp-2022-7-12; bh=mhKEOsqL4hnYDxjXOh96msQTFsnITFSZA0XrbZprCrs=; b=GEhzmV1GbvG2U/RRPsrtu09Ghz5iVNX+yHiaQ5/mJ+1IzKpfdS+C1gG9ClHHe4/9H+E/ +i5vJ1ipsTD4FLwODx2ItTvARRkn0s/2mThNvhnmBq4d4w+6so9ZtOw1rZPGJvVaVj/2 QSSVIkxESJQ8TqwxSFEMTlpViUMBAWdafKCgKeCioqdgZcjneBD8VvbcGruGZOzRfe9v 7TwcpjUsm80Jlqw35aFbICi/AS1zj/d3BUf6v4fBS7K7KvnJ08mRDE9Y2SXY2EDNnUeq NgmPAMZtkInAKvinR9LaFNTh+qT421iNb7mCghjZKVF/cZC/362+AS+16PeHJo6JJGuj kg== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pb2u31uk0-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 15 Mar 2023 16:39:20 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 32FFlPZQ030313 for ; Wed, 15 Mar 2023 16:39:10 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2102.outbound.protection.outlook.com [104.47.58.102]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3pb2h2cktu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 15 Mar 2023 16:39:10 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=gsDzpUZzHDfsdYYzrJcFfK7vdY8iIqdCnZKIReobW4tSZUB9b9VWJlr2k2uVf8cJ/LH57lQrBOh2DnZkRRU3O9BZBbXKFeEUHYxYifSeI1MmDxbY/Ed3tzrB2T+Jm/YLaOxDDqXvxBryEtcxI/DYx2+FZPDAOJJ5moHfFreyCDTZMkBirVhb+aVfKdE90q7vilGCNj4cpF+sUM4NvDCq9BOHnkpVCAIcSzRRUextFG58hnF0CQoHaaKRu1fVsIZjv/2d5zdwzpB94qx9tYPKsM/K6aXpYQrIE22O0Nu78llktIJ+eTTMWdIwnq6ku8OeTh+HKPlptbrmDN41C3bkIw== 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=mhKEOsqL4hnYDxjXOh96msQTFsnITFSZA0XrbZprCrs=; b=eH7SWFs5meudLd4b1OXhN+BT6DrTHD0tkqTUzDwOckV68fVWTn7mM0YFnrfeZmBiaTI6DQ+ON9y+CGPJe99P97HJfC5xFqPE0Vww4j0mRobX0/zYd0UCm4MM3uzlR3sTb0w/lXfuC0Go/HwvX5XXe0s7CSiD8ARY0EbplAVhE2lbKvY690qqlTuI9VVme4VrtLAPh9XKXgXXALn1K8SquZ4dtwhdGysRVIRn8e/MY8ZXY0onwSIBSVxfBzPOd6u9QECrvb/cDutL7kF3O8jJ4SfI/ykFybzveKqnmkbBYvaO65wFsDQvHJqrOTgF+SA4X9Kj/joPIGpqJaXx1GhKsA== 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=mhKEOsqL4hnYDxjXOh96msQTFsnITFSZA0XrbZprCrs=; b=qHvFLSQhOQNW73YoYF8GVhGdNpA1QndDAlFhkP60n7HAvHD+i+EiM5UwlmRt3hOme37TxPHyvqraEMiWZABPe6IyqdSNX+ZPt53gQx3TRTiQL6P0jHpkMge98CDO9cUqWyUciUpP3Sqj7C0NsV9tUrDePDl+4fdM7ilJjTXAlHo= Received: from BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) by CH2PR10MB4183.namprd10.prod.outlook.com (2603:10b6:610:7e::8) 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 16:39:08 +0000 Received: from BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::486a:626e:635a:3ce2]) by BYAPR10MB2888.namprd10.prod.outlook.com ([fe80::486a:626e:635a:3ce2%3]) with mapi id 15.20.6178.029; Wed, 15 Mar 2023 16:39:08 +0000 From: "Jose E. Marchesi" To: Cupertino Miranda Cc: binutils@sourceware.org Subject: Re: [PATCH] BPF relocations review / refactoring In-Reply-To: <20230302112531.200647-2-cupertino.miranda@oracle.com> (Cupertino Miranda's message of "Thu, 2 Mar 2023 11:25:31 +0000") References: <20230302112531.200647-1-cupertino.miranda@oracle.com> <20230302112531.200647-2-cupertino.miranda@oracle.com> Date: Wed, 15 Mar 2023 17:39:01 +0100 Message-ID: <87wn3irmu2.fsf@oracle.com> User-Agent: Gnus/5.13 (Gnus v5.13) Content-Type: text/plain X-ClientProxiedBy: AM0PR02CA0015.eurprd02.prod.outlook.com (2603:10a6:208:3e::28) To BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_|CH2PR10MB4183:EE_ X-MS-Office365-Filtering-Correlation-Id: 58b95289-ba40-4d31-3387-08db2573cbe0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +c8QBtLNhWg4/0Xn5tMIpvqlQhQ1xtpvZUl9TAo5Wnk8OdT0e62hW/bYyFccVJqeeDu1/08eeOCjJwR9GXLnxGef2dny5zv2B0NWPp8E2vniGtQjvUthzwPpErj3BVCpAO6tvr78WpZVuwY5PZ0BP8Mf9BUNNgk7Z1rQTvsdTquzx+BQbhif0BFRdESG7Oe4VgPD0C/AfYBu9Gd+//XRfqE9Xw/qHa7LzciXXe7p9nf2xL8u4MIOwYrS0yqVZd7bKYkjyT5pT9otqE1w2aa8nhWHDbSunOauVwGuQaOc7h55pGLcK1vHgSC3YEgxZeL2ayosZy2LsIYXxGC0ZWR7gcl9DZtBkZvJbbLoah5pHMbgf/yozvxhIuQf0eIZ0QzOn6sY990hRoPf+JpWkAWS0eopyG4ZhDLAhzTuK2mfEuylyPzrYKJMMvRbQA9r+t92fnJmgB/qE5c4Y4a1cXPirhWOUANnfKbXdLcsc0nGgc2nL9n7eRkhifVd+0T08kZ3gFX7BQruwIJH1XBal5pnq/vlq+sQO7VpHAM9vJaBkFHFoidxyjbsxpJnD0p9RU2EJf6KHBYrWZ2zbWNccx0k2RMzS7qH08mgwfmmyq784X4tB5/rA967TAtNB0NXcaL6a36WEWNz5PEoJzT5ww+tOg== 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:(13230025)(136003)(39860400002)(346002)(376002)(396003)(366004)(451199018)(186003)(83380400001)(478600001)(6666004)(8676002)(6486002)(2616005)(6512007)(6506007)(66946007)(66476007)(66556008)(6636002)(316002)(37006003)(26005)(4326008)(41300700001)(6862004)(8936002)(30864003)(5660300002)(38100700002)(2906002)(36756003)(86362001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?MsNQjuhKysIJ2R+mEiCERebCmXg+SjdvJW5zUPGhXE803kjMxaigiY34obqr?= =?us-ascii?Q?Z7HGfe2C2xLE0ZTebOBeft1FXxbVmkzsZBHwT2DlaaqcYduDNU2J/9+t13XN?= =?us-ascii?Q?3G1fl+qcgvAZAacdthroUQWSyhRsLAZMeZGrPxHKRBFxYQVABXuAli/VWeec?= =?us-ascii?Q?3ynTh16kDrKBCIXmzwkmMs4w2Y+ydtOQ0z5eou0WIiPeoJS/52b0ghZa83+H?= =?us-ascii?Q?leGh7pr9tj8JunQohg/KjypoBYWBuS8ANsNg7y16zGkVYH3u+aHd2ln013+x?= =?us-ascii?Q?AO4EPZzSeB2dBKjWgnl7z93mTt3Yo0fPT6zSNQMpk23lnAgx4z/4tYUx2Mj9?= =?us-ascii?Q?6zsu05dn6GeDRsDq1EBIwR5x5PiF9zZwJlEwMnZyCOByJfHPJQuzElf25+fm?= =?us-ascii?Q?Tpf7MVOitYsRmmxiwRq1XdHkNdkKds4vzrA4/cWgUxrLlUnLNxvOFFdbV8Ix?= =?us-ascii?Q?4ogGGwGlS+WKBHZmaXAoUwFyvCUH5IEQ4F9BTcJ2YfMLP1/jBJn3i2SHMcLc?= =?us-ascii?Q?lGFl2CVTuMwefLVPcqkewd3cTxM/EcpgiZFDBxsPwLaXJsgqt9QRR58o3F4r?= =?us-ascii?Q?B14U0uVEWPagRrixYKqQ8rdOZDfhmLVOO5vr/prigfJnqEONm2L3AwuhwXV4?= =?us-ascii?Q?wF/BSNH1QRGQPYMpbcH52RdO9csZns3jj+ol9YnNNanAuHQM4lYR3HRZcKKf?= =?us-ascii?Q?uwuPZRZsRY4lD1gWVgPOPHDDN807m9S407Ww6nwolZbbxoCe+/tdmbDfaDig?= =?us-ascii?Q?LYzflXAPAtdCKjXCnlXoeBs3GuShf76eg4z1eAZLiaqc2aO2hEqwpCYjgQR9?= =?us-ascii?Q?4pAvPvexOSFE0TYUFq5C6ecI5nfzR2IKZ9WVPAiW72goASN+L1tl+t3GUtmy?= =?us-ascii?Q?be5OIspkMAwqRBCA2nHZ8+gat/AL571MvWj6K4v60wgeFeq2ttQZhg5Ekiwm?= =?us-ascii?Q?UmTdGMbGFOkSjEA+JSxBYjtjU7RgOq3j2q4yt/9VbqrzSR7JRnORi9suuerI?= =?us-ascii?Q?iM44GPBVLP066aoi+GaMx5K6mKMKfPWb3AV9qB1iua9ayqIwnzWZAdz38yom?= =?us-ascii?Q?grFR1aT5f45n/BxHzI88Aqa1L7vNAavEnnmcmZWY7qo3zzvZMXB1EA+3U6Bl?= =?us-ascii?Q?+hEvcsnTayCShsvjzG9OMCVGx2Rcvj9wZQkgeGzXLIejVauHvtb8VAbTujtz?= =?us-ascii?Q?4Ewvbpx6bwyU15mQJ4Cks65i/f+MEpE4FcjvG8dpmOb3c3EfKsloVvYecZPp?= =?us-ascii?Q?CZkz5hq5M1NrMJWMtDFnhq1ak21MMAjEwHFjRoxiEM0jctUySZbN/fjMdd4p?= =?us-ascii?Q?tt7zSYpALBORow8yKUCwT3JOvSB7fTn5eHFiAyT4RV3dcQU1/7mJf/4ICBcq?= =?us-ascii?Q?FjpyOsXjDUwQVLJvZU2oZ2gkjclu+Lpagg3aLKRkvN1aBDQN43s3r6LVbxkf?= =?us-ascii?Q?zSmYTw7xuHSq6aaLdQ/QcwYYuh1M5ZUQt3jM+kMQ3u0pEKsSuVDkyAXHPjFZ?= =?us-ascii?Q?Il3m8IL5rQX1cW0UGOoXGnbu/AqF0LyjT2IFg2sD0JwLYNwrFl72GKyICend?= =?us-ascii?Q?/n4Q52D7apQaxgqa5gcpRo59k2ffsUyHOJOvNtnnyn5cEg1IgWuasZWNJBYO?= =?us-ascii?Q?Qg=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: QtYtnJfEsL6/sZkw+o1LnchZIlwYZvty/BXT6nq/9lH4Mx6mCTwwX6quU1hUaCMXTGlbgQCAqBzdGg8YSeSBsXRuhdCijH+t2TF1q0XQR/33/zNZ5xm8FFGrJX4HcK4/b4lPR3TypUmtpi1X3l4ZKL5AenHN5Qy6ZttBOrvr+4O58Tr1gF/lXsHcsbPAYri5aM3thPXtSDF+iFdEVbb4cqR0uFZ8jsvZMCJWpuKw86msMm1En4m4KyW+zj/+sm6J45n3VIL9/RdcUT5rqha29olt5ivqyNJnpt61jBRogLo3iZpL0ZkemHvCAqFG2q1Cw2dhGp1dsWlc+FMX5mkxV9X5cmrh17MtFENRNqGOtqwA82OlyRlVbxbY4u6qqnp9SETgjJ1RPRD1UZwNm7d1JM/vTt171UrQOoBr+W13+HrULdD100FM8pnRR5RqY9Lads9NVubR6/na3QeDOVNVXPMhfSvuFjjhTTlWkj+Tuvs82islsZmQCX/KPzC5aGCZK2R51Qec/QujmDRbZ5eR4QNc1lTsXezvMXUr1hN9K90tzr9zP204gpvS305lFljjGaRZIVdWe7INdQWzRfyeUrF4WZI3ZABf/inB4rtT3oZwU1eZXn5Ba0GyEzl25zY6KjxHstcEIozoXdHVKsBdbMAstli5pKRmEiQGq/36S7h0qrMaCNWn6RNQmc/ul+E9+zOyqaQPnvzMMIQ4+GWrDcCR9acMaO3W5i0ZAJFlOJlgJ8T6fWO4wrl73sMsZReY X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 58b95289-ba40-4d31-3387-08db2573cbe0 X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2888.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2023 16:39:07.9522 (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: CMPQeivvlJXmDcYNcc59fq7JBJm7Ks9v4yY8hc//pNpCcEiuN0iEL6y/U08DN/c8slQrN8VJT1+JTxAwquvrx3DGh9f4nUTfCrgDwP0hOUU= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR10MB4183 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 adultscore=0 mlxscore=0 bulkscore=0 spamscore=0 phishscore=0 mlxlogscore=955 suspectscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2302240000 definitions=main-2303150139 X-Proofpoint-ORIG-GUID: DA2SS6-aC-AGVhx8tJkuQaZfa-4dOKqZ X-Proofpoint-GUID: DA2SS6-aC-AGVhx8tJkuQaZfa-4dOKqZ X-Spam-Status: No, score=-12.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_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 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 */