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 69F98385842A for ; Thu, 2 Mar 2023 11:26:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 69F98385842A 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 322Awu8w015464 for ; Thu, 2 Mar 2023 11:26:05 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2022-7-12; bh=nEYeviYz9BIcF3QZ63GJpGf4qdqNPMWe6IRm4u0XHaE=; b=SXUPidrfZ8ca3NDhPxd4kk9Zc+ux/ai4S/nNfwZbGOoazrXnjoK54ROGimB5AjusH9Vf xdAXRp/qXzTXs8+T/z0cgpX2rzHUxwe6+wOo2MWPrlr4v72EdOjujHywSuyvFWeSHXx9 kPa6DLb49XWFKyBiP/2+0mnbxNNHC1dFd29uOPtEXxlAq40Iz+/0m8c422qXOwJGrK8h 6rwWxcCIiJjl+ZR+zwybxZBVNxqg0t3gQe7ZMTWw9SgojtXompI+84s0OF1c2JQysmn0 2HV/a4TCJlgLlLdbsQ9LW99oIuJ7cbbULPDdSNB1ltB42o+E4JbA6JjFTJJHp6oO/SE/ NA== Received: from phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta01.appoci.oracle.com [138.1.114.2]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3nyb72kgb5-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 02 Mar 2023 11:26:04 +0000 Received: from pps.filterd (phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (8.17.1.5/8.17.1.5) with ESMTP id 322AgPx9032926 for ; Thu, 2 Mar 2023 11:26:03 GMT Received: from nam12-bn8-obe.outbound.protection.outlook.com (mail-bn8nam12lp2172.outbound.protection.outlook.com [104.47.55.172]) by phxpaimrmta01.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 3ny8s9w96n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Thu, 02 Mar 2023 11:26:03 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EWvIdF8yekLKmk/L8Dgpb3RQEz9GTsyMbI+MTJx4GR/JKphWIX08olxHmjcrGI0PxTwxegjMJ8d3PXQA06UPOybt8vM6qhBhhczyi1x9rRLiRds8O/7EMhErcZNp6hczvvjbUU3TEsI0glubkzKzHzTFHMq3uXEljngYMUX4mH+c8Mjc6g4S5YnrskRQePxTi1kWVvcUbMUAG/O0MZfUq3v+mLYY5+NsAuiTppDAHzg8Z+8x1tMvPICVRBwRKIrsPAqEcChbMZgmHNTO1S/kh+x1970fpljoqHEi4Ub2HFOh0aNgESPQKYJAdkMGRqtakE87YVyfbeTdKVqd/RurWw== 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=nEYeviYz9BIcF3QZ63GJpGf4qdqNPMWe6IRm4u0XHaE=; b=MXccznGdMAXnFVmHcncckyzg9kRtrO1DwAVhvsoVfG5KsiQhTNWFvOqFzleDqzxPGiRQm1nX6EheYyXeMuCGCQeK88k1z1NeoiEyy5Sbp5mYXNULo+JZTAxAqXekVmSBJ0EEN9VmIkGhPR2LbulO8NmWHqylR85dgm25Wk99sCRg53QUZUxMbajX9eLQe53I2eGlbpaiHtOBZfovliUOD4wUTYUzU97eWYN9crQQPCanYHOwuUq8ob7ENbFnF3qNNOZAToySLxixgTmJ1bXPrf6BMRXqkDLN+cXqAEEstFArDRnhfMpKk1okc4Pm/Iaef4Y3SOxpZnDTD/xzpAam5g== 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=nEYeviYz9BIcF3QZ63GJpGf4qdqNPMWe6IRm4u0XHaE=; b=WRwhGsWIVB/WqeZ+ZB5emyPXz+7cA5K+jUFUieQzdb2JxWJ5wZOAZqql9dASC+fGFHu2eE1pgndsrVEwDffUyAzuSeSs8Ad8ZFLeW0rWcUjyVAbx3tHyX8De08iy2OJosLMAsSxDbaRzgjAXdcJzRLli3fMO6Gr4lORcZbxsCv4= Received: from BN6PR1001MB2340.namprd10.prod.outlook.com (2603:10b6:405:30::36) by CO1PR10MB4449.namprd10.prod.outlook.com (2603:10b6:303:9d::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6156.19; Thu, 2 Mar 2023 11:26:01 +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.6156.014; Thu, 2 Mar 2023 11:26:01 +0000 From: Cupertino Miranda To: binutils@sourceware.org Cc: jose.marchesi@oracle.com, elena.zannoni@oracle.com, cupertino.miranda@oracle.com Subject: [PATCH] BPF relocations review / refactoring Date: Thu, 2 Mar 2023 11:25:31 +0000 Message-Id: <20230302112531.200647-2-cupertino.miranda@oracle.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230302112531.200647-1-cupertino.miranda@oracle.com> References: <20230302112531.200647-1-cupertino.miranda@oracle.com> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-ClientProxiedBy: LO4P123CA0640.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:296::21) To BN6PR1001MB2340.namprd10.prod.outlook.com (2603:10b6:405:30::36) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN6PR1001MB2340:EE_|CO1PR10MB4449:EE_ X-MS-Office365-Filtering-Correlation-Id: 97a088ee-fd89-4c8c-0c8c-08db1b10e6bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 2dot10u4gk2mXGojbjMGIOUQdHgTqlxs3t1Z1hUVvofs6crQDvD301ud/VvVFqhzzzpDXJhIbuQ51npaB2A8uCR0wSUdM/APqz4W3pEtOMJtHmKxlIjxgb5RlYxcRgvlpQympGbwfVjr93mnI7hDLntLhLfJArkpr/bXbWTZnoCoszdpL0i4CnEqPpI37KtX3YZ9EP2OsmKDTNFmI0p8Q7qHvWMAAWuDiTzxVsYiwT0zES4VcFu06WLYaKG+FvBOdeNXFGoXTtqVmIQVpl4PhVptQnDnsqrVLW3PdrT/JNjGtqOqbCPE1XyHpvHSjhlg1NjYN2HiGPSe9RACiGKXpFkxXWxjALhQFordNKhtQ7o7O+e2+cSov1ZZxc/KxVp5oGXBEGrUVAvRpQKnfqXa0COzMpNith8txLPIcBQUNdWdFUl9DrUTO8dZHfO6iiutfVRjk/PCjIB0P8CEmF67RgTmiVk2KyT/JmKKf+tA0g4XQZ6QLZimt3IJO79AlHojXntJOZmxA5jGrDwoBrPNS00lTEelG9gWT8yRB6HNGVekVFDUdUFA6M3sFnY3fB4IcLH5NZ9wc/aBDMLdTzmn7EvzKVMAKej3zu5gpIy02wZuNDauQJxC/IJgYIoKsOImv7fvA98qIwIyT9hFVtcHnA== 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)(366004)(39860400002)(396003)(346002)(136003)(376002)(451199018)(36756003)(107886003)(6666004)(1076003)(6486002)(6506007)(2616005)(186003)(6512007)(316002)(6916009)(41300700001)(4326008)(66476007)(66556008)(66946007)(44832011)(8676002)(30864003)(2906002)(8936002)(5660300002)(478600001)(38100700002)(86362001)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?2ArL/1kQgnuOVstb2Yz1aokK6KVQqJcGiO6hBa3rs8XsOdmBsjuD+HaBzZWz?= =?us-ascii?Q?d/SIkJTqCATws9Ag2KRuqb7iGzFbWvMT4WVNqcVLv6MTWTyXKarkVNakyHA7?= =?us-ascii?Q?s2Z7JejNn+CIJfU8QAn5YwHeSoMrIGvKar8v0eM939Bol1V3Womh0PJwU0Oy?= =?us-ascii?Q?MTbFwRwl7hL0VOv2RERVx7muylASvF0HtLBq9OdUX2sCxnmWisBWOwNNq5nh?= =?us-ascii?Q?oFQVFV/okeC6YtOxCSHRkMH44iyYwMf6SwxRAc0o65DNbpckx/0QgeiIE3HI?= =?us-ascii?Q?G26mCvQupRcEWa4nkETku3WnYtbNX3rApHpvAmOg3HuKx+Jf4t7psU4ceEj/?= =?us-ascii?Q?KSVl1nnjCqgSxW+lpTKyAgxxyzakyrP8CF945sYVJFAqrELVhGEa5Ks6pxXp?= =?us-ascii?Q?cNDy0M4/uDNJkUIE5NjHp/6TmqP/3iMSRJ5+aBNrcoqE8FWdx0Fp3EfgFuHb?= =?us-ascii?Q?yeeoSYkXqqiJ4jPcByPOZAxOlwsU/8LGBrqNvlmcr5/oTLS+hZDYClLiOm9e?= =?us-ascii?Q?GeqTYwazvmuJUnnwrRZBm0COkFfkhuY585ilhAPh+qKuw6vZLBpuKEs3QN4x?= =?us-ascii?Q?TvflRmytJcYq8NPpDoT8PoPJ92964MMWouYsznaaMTxUFZVKTgAqJtP5C3Mt?= =?us-ascii?Q?CG9QDXyn7UwojKU1XFQ+iNypk2+jSOp+2HRRZK4v5pEF6gqboIFyyRC1gnDO?= =?us-ascii?Q?ynZsvs5V694vjrEACxcWnqU10UC9uBZbhYzEgcaVURvZnGQOpIXREUCE/f6z?= =?us-ascii?Q?/slDOrK/GGC1iTkzuNmF9W9lmOGLu7P8qcDiMu5B5ufxDEf/logR8nDC2uwH?= =?us-ascii?Q?gxxQyfax6ObuSP5QfV89Nui2cSTVpiuc3FLpGSn0ps5o8miIoHSVA6PtPgGi?= =?us-ascii?Q?kGo3JhTGxrZzEq2lwCUqjqbiAGr+1c3+OrF6bg2oTMdd1sLiAExFAISrKiLM?= =?us-ascii?Q?u7F+xjZXLeFNVLMolI6bvh4IXBYW/2JkHT2T7wjCD85IEBk3nHGC+e+Z3biD?= =?us-ascii?Q?+9GEFo+JeX9kcOHxTnvo5kT060LjhsfHzBoc6ApQDc2debrzjBACnhehFyoA?= =?us-ascii?Q?QrghTuJ45C/AdQwuuGvuwaGtu0rRBv/JIUzmQNIC3Sa92zjJRFIYYkchbhqs?= =?us-ascii?Q?BUGYEmhABi/IduqEAG56RkaddRzK1pfrPKfipkIKMz/KnoscJ6VqMuD7JwHX?= =?us-ascii?Q?erUytk43feydzfTcdDjSGf+ynrqzSH19VeUhzFUp+fQCKkEwlz9nbTjE5UIy?= =?us-ascii?Q?pBTWQmiqEfCUmVzHOQ3wH0WFecnBZoFDE4UBFEcDnsPcWmC8Eylj17ZAfek4?= =?us-ascii?Q?1+XSUf2b8KcYLRo6T69rDx6z4ra2CKRYttRMeZpOzzzXHstsud6olu0XlcHx?= =?us-ascii?Q?4XbiBCxtgwIv4vl1YC7O0dPll69yfZrFtvbLb/25BmNmdlUYKqKGzvkEUkcJ?= =?us-ascii?Q?9W67JKRVTR3aYlG4mq6ZHfwj69LIwR6SKjFDlFOL26LiSb8RNMn8Ih92606G?= =?us-ascii?Q?OrxsA/+9lMOqU4dKZELIYu5MQCZJ4Qyeo439wixqbG8EbvbeeC3QVGdUiE+p?= =?us-ascii?Q?QpK5fJas6PwWM30iLjAcVg3w8DR2TK6HlkvAM7OxDBS23qw3XWB5HGLQLEXw?= =?us-ascii?Q?cjCujXFf3dTbNyJGlqXpfruLGQ2Fx+kWmldY6+d4ajzI?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: QUHwWSVEfj6Fg0TGSNrdDNNkzKjhDNRskilDbyrZLY+9+40Udpsk3M/R36a5P58wdYJY1BOzJCntSUvSiUK6TpU9S9IUZUpxkgNYBcmYYbCm6J3nbMpYYdnc2VUUn9Oe+wOewrgnBwF0OlNcGHxiTH3ppyroAnvEbQyaGTL9C7LrNAZyP8F+fh9N4qNmYMA9GDWNIZphkOEBbHVuZYrLZRzxa39Ob4KosFL5mxWnzBwzXvfqTm8cnlrJFfv4O4H9OqDlkJx1wmSkWroyD2Sh2P5IsD9aLfkPEYtmm7c9Bq9RdGgwCj4DS8+pYtUrtkZMmtsSbxhvaJm4DvlB5ooGM0FFCtmzE9KsIO7ALw28WXCSIqK2t7Z2ovSYYggvm9Yha+eks0UQj3K7bw2OrfV7MsFeKVEAy7khybEVnWyKJAdj2wwb1Mgl0D5D4Sg5FA6N6bi5r9EkdUdm+MYMSAI4wn5ydOxty1wMiSOwCdkZCEWr/RZ5EGB5bqoml4EeMcZBFksmTCOZkYaGYdOLhoB1yYGM1A3jvJ7cDYbasiQPOTdMOVwLk7+1PCkiRJVaggwTYn/L1TrbVAjivsvuzhjiJsLyDYnCaDksWaAQDH4YreLfe+CncJDzfq1nED1zVFSlgcSXTIPVPTUxMgiIJOoGgBGYQiI4C0lqKCQMQVcNsmbGLnZiLh0R4/bB7khbRy4S6OWPLLy7QvqAV8YRGSRd0NOwmdBKpVcwHtTiyGctdZIuUYZhi2f0hnYxdXJKG8d2 X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 97a088ee-fd89-4c8c-0c8c-08db1b10e6bb X-MS-Exchange-CrossTenant-AuthSource: BN6PR1001MB2340.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2023 11:26:00.9533 (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: ErIyoHe3BCzCfHVo4k9bJLqzkK1KvBV3wriib8l7dI8oFaUuQ7dmLSV4fGJ8SIx7ckD5QswxlH11ppWeifMxqhfPAuQKrQQ7fPB2uPKmhPg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR10MB4449 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.219,Aquarius:18.0.942,Hydra:6.0.573,FMLib:17.11.170.22 definitions=2023-03-02_06,2023-03-02_02,2023-02-09_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 malwarescore=0 mlxlogscore=840 phishscore=0 bulkscore=0 spamscore=0 suspectscore=0 adultscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2212070000 definitions=main-2303020099 X-Proofpoint-ORIG-GUID: EEhO-I_DBKnK8mm3VWgRb2RTSUQyG5nr X-Proofpoint-GUID: EEhO-I_DBKnK8mm3VWgRb2RTSUQyG5nr X-Spam-Status: No, score=-12.3 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: - 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 */ -- 2.30.2