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 0D9293858C83 for ; Wed, 15 Mar 2023 20:57:23 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0D9293858C83 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 (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 32FKtGs6006144 for ; Wed, 15 Mar 2023 20:57:22 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=3ymxcdOBdQldAt1qJ9ST8WDw4ryKeKKlj1u6vhLlUqE=; b=2dA9pVsyaxoLBkXxDJBTcQ3GY5VIHqFAJ2e0Y/lZICH3y+oqd9mcQc+jmmPygi8BC3I1 iSZbUR53NCC+pWV9emNP1EC+aPrVseJ/v5JqcUwD7ExQbh/djTReuN6cEUFIRI7+sA9o /ZpHL0m2aBdXRVQSPWm7ODCAQnnnh/lkex9nNMkGHqBoljDm9jE/L+VKDgwuHX6f6sMz hUBGzRRrzgEgAEhp1aLtk9rMK8MP/KrrApItm1Np/som5Pq056CLgCIpkWmP9XCfI40P PuPpIq1iigHkOEdzBRQE2NHUGAl8G32wcgiRiIIOMXypsCAsHOHuT05PShE3/RSjanmV 5Q== Received: from iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta03.appoci.oracle.com [130.35.103.27]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3pbmvt02ee-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 15 Mar 2023 20:57:22 +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 32FKkd7R014176 for ; Wed, 15 Mar 2023 20:57:22 GMT Received: from nam02-bn1-obe.outbound.protection.outlook.com (mail-bn1nam02lp2041.outbound.protection.outlook.com [104.47.51.41]) by iadpaimrmta03.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3pbnbt0b6b-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Wed, 15 Mar 2023 20:57:21 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PfKOQI8Jj5ETNaDtX83LhUjaVoadIMCYgU7VEAIz8/AdXaM7yUr/kEq4C9g7aNMH1zW0poxISHobW30ecsCumMbBVfkUsAEMhlgyaQ6zKefJidv9X6F0j+DzEgSM0Wi+u2Yi92bUN5vWnDhM0q1UglMLpD9tdOHzFwyMadxR2IKDL3nWameXTR6zU2NudzdZvCA/8F8B0c8eBL+lEhll7KUJOQs6FdycrZzXe2idVwX+cjwbIXjKVLw04zzzxz5ajO/FKG9D6Hs5injQ7Ae4DDev0tIbac0C+xvnOob2FPFGyiwVHH6/kLLbQ9RTv1Dq0a8MciSQfPIi4AImRLoKvA== 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=3ymxcdOBdQldAt1qJ9ST8WDw4ryKeKKlj1u6vhLlUqE=; b=hoLzpK9GDgR0Ph2eYlmdlewljmAp6kIWAWmkdfLPK9msuL74tRGN2WuNzAnkdnpqxYypn48Nlsk/2FEj70urjnlfDB56beaXQQBUXK5VF2uXxJbiX00282jwbncq2JklcWapwjFvT3/lb0k3u4QVXIftUjn563GCotPLvBASM3gSBV7pK47mZWdMJJZC015KlIQTpXPueYPZKhKd3S5UWDcOh8Yi7Kd0xPAVOS4I9poscD3PmGG4+uEew0aA0SOFyGTJuBfC3O/D9sCw1dCtW3kpFHiiIXKY0zhH8XCeq+I/Tg42TffkW42z+eYNw4IcoTB7WCU5sBb4thjgTrTpUQ== 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=3ymxcdOBdQldAt1qJ9ST8WDw4ryKeKKlj1u6vhLlUqE=; b=R9gBNvCCfN+IxxMe40tzjJ93z2OqdffJi2rbyMRSoosf9RpYy8LpuBhv/pLTRp9hOpa2II6QeuD2/8x2yKs6k2F3Cfm30LzwiBya37RRvUZ0/6q6zGRpcBC8rTYmCvfaa0dBTK6gjWts9F5tz7MDj+4eOtY12uk5xduayjfrhIg= Received: from BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) by CH3PR10MB7414.namprd10.prod.outlook.com (2603:10b6:610:155::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.26; Wed, 15 Mar 2023 20:57:19 +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 20:57:19 +0000 From: "Jose E. Marchesi" To: Cupertino Miranda Cc: binutils@sourceware.org Subject: Re: [PATCH] BPF relocations review / refactoring In-Reply-To: <87ttymorjp.fsf@oracle.com> (Cupertino Miranda's message of "Wed, 15 Mar 2023 17:25:30 +0000") References: <20230302112531.200647-1-cupertino.miranda@oracle.com> <20230302112531.200647-2-cupertino.miranda@oracle.com> <87wn3irmu2.fsf@oracle.com> <87ttymorjp.fsf@oracle.com> Date: Wed, 15 Mar 2023 21:57:12 +0100 Message-ID: <87a60dspg7.fsf@oracle.com> User-Agent: Gnus/5.13 (Gnus v5.13) Content-Type: text/plain X-ClientProxiedBy: AM3PR05CA0119.eurprd05.prod.outlook.com (2603:10a6:207:2::21) To BYAPR10MB2888.namprd10.prod.outlook.com (2603:10b6:a03:88::32) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BYAPR10MB2888:EE_|CH3PR10MB7414:EE_ X-MS-Office365-Filtering-Correlation-Id: 5643088b-a508-4c5c-872e-08db2597dd9d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: +JvmLyHH4pMx6NNuo53I/JIxL13U7l3jJBmMqnUMsgmkPywwDem6AjPNELxlGtRc6mus63/Xy92co9QOaAg1fA0bzV1m4ziqFxJAPuIeT7o6KbtJ0WVG3rldffSHKClqSq1XHdVe3LST9AtZq+a0h5vRQC54ySp2r/rl2DpIdzizQd3x6dv4aOloLkTWIJwNNyLWaCo6/DKgoEjG3m+Ajy8PGl8kTFXEa1IcETIOzkJ3IwDNb18ZPeDEoxJAkNwQgKS6nbWX/VFtErS7d96gAnKon6et3IW4eWrnG6FJMcNhFItKRGWkq+zWMWyTXT0eQvJ2VcbJI8mBlN0chKoquMDOf0MSHHRFdGiMkX9AXoJacG3S+k6OJ6TO8cLYsnKgyQ83B2D8pemLpklOpaAu9stL40XWP1fGONKGF7vAMrAdzGxxU8l8tvoHh1npGSJ6hwvq2u81aQ7X3ltzJVi7Zkt1zG/2nvrwZU4NvqqmZVi0+u4agEJZ9HzIjIQVQKoQlARHfTy5+Q+ygc0oPs3ame0Ky9bJJLnDB+aSOt8+3aae1YaCdVOpIwqCqZ01cxNUqwOZlg2tCaPuzNOdyRzXFU1bv0mPAqYp99hFwTXXzXunJtRuv4auejFe0qa3qr2PwJEuCuhfZ7VuIJ1wZ1a4CA== 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)(396003)(136003)(376002)(39860400002)(346002)(366004)(451199018)(5660300002)(37006003)(6486002)(478600001)(6636002)(316002)(41300700001)(8676002)(4326008)(2616005)(2906002)(6862004)(8936002)(30864003)(83380400001)(6512007)(38100700002)(6666004)(6506007)(66476007)(66946007)(66556008)(26005)(186003)(86362001)(36756003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?HU6ZAhxIID40JQ0rRH4d4LM5htiShWBQskK4DeUCLrjuiyH7Lqu34mhuAalJ?= =?us-ascii?Q?W4f99Wzx7iAL9Pea+CQ3gtwu7B6Bqafhi+XfiN45eiZnFBqTCJ/OBCZi2ZOb?= =?us-ascii?Q?8M4z3nv6B6W4XDX8H85+gMVk52SFC58+ivI5NOWZQ3YyIQPAGcKWhQTbIpAm?= =?us-ascii?Q?ID9x57L2dh+8BZ9oqYIHZG3weLpl7b2Z+GxfY+3F3SuhicXDCTYvV36zwvYW?= =?us-ascii?Q?ZmBcl1UMOX+3jtbpGSneP3O7xZbT1QGkUc9tCqDz/w0OjSmyYx6L/HHNsfKH?= =?us-ascii?Q?4Y85RzOHCt8Fc90OVip2wYqJ0GXW8UV4+jJBlixtXU61BQOmNzWkMaT78QH5?= =?us-ascii?Q?uvxrCYTIWxn+7fCcJ2/4ki0nBUdouZ7H9hnKG23q7hxW/5yaqIhCqjq90fLL?= =?us-ascii?Q?aei2xsoOYkpl3U6DZbmZ6TdmglTo5DxpU45/xzPgvyw/pZP4p7GIfBa3v7aY?= =?us-ascii?Q?qCOwHPT9s+s0TIJDstu8z+lgc9+Q0jZZlU66b/uvPhX3NVHiof6bssCXYB+D?= =?us-ascii?Q?oLUQNPGkPatpfUCXj7tgruGtlGaBjFSnU1AiL9Ld+ybG2t6Quaww9jf6PuUm?= =?us-ascii?Q?degpcdVDhyPC7qVdbbrS18Obyp4xQVHQtwUFP7QgtxOEcl2H7qip+qyGhlz+?= =?us-ascii?Q?Na6RPvi71Vsrbq8h9KWx+twBVNbKCzdeJqnjTi/A/FQKszek5RdEhEu0po5Y?= =?us-ascii?Q?jvNFUQImj84esr/9PByHEIbObdiRWXqYu/NHQf9Y0S/soYnRlWbpI/82IowH?= =?us-ascii?Q?PImWp51qtw+zPxUKjcY68RMTJZLCAKiKWya+5QxRgyIA/31p4NdX6UOoemsk?= =?us-ascii?Q?JdIlvSd2j4QFgfAz9uCMJBHzehc2mlASJMU8kap6NOVvYXHy6NHbUtrmXbDj?= =?us-ascii?Q?aMbVPy4iIl0QDRZEH+Mzb4N4FI9t/dQUaaiMykk6vRgYuXsRGZNgItsxeUD+?= =?us-ascii?Q?+qBM5Z9OEQiSPeO4Kuhs6y+6nKaZCY0akaznDuj/x70x8sQ7rQPX8Zodq6mz?= =?us-ascii?Q?6OB3k0HLgmbe0Jakvossubjpjr9/iqcffQSbE5mz29oOC1QXVptWHMnYimIm?= =?us-ascii?Q?zOpNxHzcJmRcNuGmHhYHdLhme5TohkoqBF+CXx6ARGKdet2s1JOZJvxIyRfz?= =?us-ascii?Q?ueUaaOq3egNgZt/ZIQdQ9NEbF+8gnyAmtbzKuftdTw7vjeoJKZiAVirv4qCY?= =?us-ascii?Q?i0CFfUjtCPriDnumNf7nj1pXQQQLyKgg3U2076VlKFOCeyzFkD2p3eTmGpFL?= =?us-ascii?Q?Crn9EIAhsyFWsMo0HBKSr4RKeOD0EegfZmvxeILY+Loc+PAsvnHeLiEWT0kz?= =?us-ascii?Q?xn+6+u2mqQ5c2CNSfwy1brI3Rs8P8p1Ojo2G0imRqNAHixCher9IXuvODHSc?= =?us-ascii?Q?g5QCHKUnwKJMgFwQ0+xMbypXff9Ndnhvz0nj32a3KfKD1beCNWwR046uzEoC?= =?us-ascii?Q?Z0O/cEWMN+FXIo/3YMfFLbR9y0d8Yx8HwnNQwgkqpIDFJcSzIPDVCQFqtagP?= =?us-ascii?Q?M8SRExrRbQQxhKXhRMirxo8xuaE5lrztg9RclU9l4r2dTk5D8rAio2UehKMA?= =?us-ascii?Q?yBluPwSIxh0tYzY4JZSp1+Kc4vOM9IFF4WC9hbDcbWa32EFBaAiXxZ/OmUQh?= =?us-ascii?Q?4A=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: uUC3yZkDmtGWJ6XE0908IuCJBegYKL+UAoY6gqNYYO8Hv6W5+IAqr3s749mPQ+ReIFsjpArBBtiM4K6igqEI3dVdTtWwXByZu3P35bz8dGl+i5BXPuDIx4r8qIYRnP6vwFuIvxHpqNVta4BEJy2fbmMsjGONyu29ZQuP5Pqf+F2rKPsxeWFUYQMWIVcMs0B0pbmPQrr/DpZ0hTBKa2uXZCG/7HE4Tue4Jja+dzYR3/AdcE5WJ0WGCy4fGzdoQYWm2ZeA3G13rUPexNUXWEtj7z/F7JofuADMW9P6x1acwVr9rSnLgd77pqQ/5Mptcqgdc/lyAfTdWHZ2yIzxWGvuV7OrABlhDAJlHcFH72F2NY085fihk4m2Q5l4HaMUG6fPQd24YUyQsGZdyqYNqKWnk5YxGSwFBSJXCkp7br1wbnw4fL2x7+x9/re/Mwodts56pIRHu+4TjQLOG9eyv6dBdCh5V2T6Wi/80jGLuJIWmIAWZlFOz98NlacE+XJhKtouRMEG7P2ycSk2uEMbUyOYfFx1OBeh5hA0MOOhVLFSqCuz4gRPuAPZfJrM2zPpJ5106/Q+wC+ABrVbzpbN5jce1P57R9DDw3MkLrFg+6wBngc7Ltgy2ZObBEiic9WtH7KWg/qGAOSZJQn/8zMIG61br6LE9R28/qgAmWrN5EcUwJtxIpdUAJZjiId8xnEDUu2ma8AJYm2jmV0r3Afvs2wb7C8QkkVD96pYNGl8Dw+nYf1XFb3fr5aL3NJWnLfs2PEL X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5643088b-a508-4c5c-872e-08db2597dd9d X-MS-Exchange-CrossTenant-AuthSource: BYAPR10MB2888.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Mar 2023 20:57:19.5965 (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: kwPqGHxEPKt5JNF1AqyQaOmcmPI2iV/0t+Zx6I4Ue35Wrs8qe13X36XOj17IeK9K5nF8kVYYgUgqUtOhRi6SiIw2Kewmsu74iDkgwHB85JY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR10MB7414 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_12,2023-03-15_01,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 phishscore=0 bulkscore=0 adultscore=0 mlxscore=0 mlxlogscore=999 spamscore=0 suspectscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2303150000 definitions=main-2303150171 X-Proofpoint-ORIG-GUID: PZAGdQ-sCDi1eIm87fkZzp3HNCJP_s4E X-Proofpoint-GUID: PZAGdQ-sCDi1eIm87fkZzp3HNCJP_s4E 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 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 Thanks for checking. The patch is OK for master. > 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 */