From patchwork Mon Aug 14 13:51:43 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Beulich X-Patchwork-Id: 135442 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b824:0:b0:3f2:4152:657d with SMTP id z4csp2758735vqi; Mon, 14 Aug 2023 06:51:57 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFU1nPXvW5U+6RfZ2gsdBLaT6ULlA3BbI7E3m9b6is+zBrEU+JMA/6qMzmWRMpkrXqFEAJE X-Received: by 2002:a17:907:75ea:b0:99c:c8bb:ff49 with SMTP id jz10-20020a17090775ea00b0099cc8bbff49mr8330751ejc.20.1692021117630; Mon, 14 Aug 2023 06:51:57 -0700 (PDT) Received: from server2.sourceware.org (server2.sourceware.org. [2620:52:3:1:0:246e:9693:128c]) by mx.google.com with ESMTPS id me11-20020a170906aecb00b00988c92d2861si7898689ejb.397.2023.08.14.06.51.57 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Aug 2023 06:51:57 -0700 (PDT) Received-SPF: pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) client-ip=2620:52:3:1:0:246e:9693:128c; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.s=default header.b=lMnSvwRk; arc=fail (signature failed); spf=pass (google.com: domain of binutils-bounces+ouuuleilei=gmail.com@sourceware.org designates 2620:52:3:1:0:246e:9693:128c as permitted sender) smtp.mailfrom="binutils-bounces+ouuuleilei=gmail.com@sourceware.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 4A996385841B for ; Mon, 14 Aug 2023 13:51:56 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 4A996385841B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1692021116; bh=s/B5N3dyEEzlXShZzHMydrl/ckiW8uhOVO222kpm6h8=; h=Date:To:Subject:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=lMnSvwRkahbPfN5JbGO+uI+n4BGFvJAsNHxHxF1M+PYh01j+zS4NwoO54sr9XWN+Z HhPWRUoHdxSM2Fz8kQlhaaMVL3FahkVI6fa2IKLkB0P4l1ug7eMlCs5xPPBL+bf4MF GeJHXY1tYPDB9tj+9V2668kbSTYRcRrzwSCjZw9U= X-Original-To: binutils@sourceware.org Delivered-To: binutils@sourceware.org Received: from EUR03-DBA-obe.outbound.protection.outlook.com (mail-dbaeur03on2081.outbound.protection.outlook.com [40.107.104.81]) by sourceware.org (Postfix) with ESMTPS id 2EF933858C1F for ; Mon, 14 Aug 2023 13:51:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2EF933858C1F ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Mol9KvwGZEJvKH/DmtEhivXRlguuK0JOUaH8j2o8XeXfrLoM9NiU8CXB/15H54BvUoQvRdXBIWCjlzSDH8Cdo0O3BfMKf4Sy5BWT/++gFEvxvEoU2+oSevAKnaPdnXA4W6IxI75t885a4kM4njjgweIaPzMZMfeRQ+ndbc2knpItdYOYR5tLA2r5oQOIL2LcFSVisvnzXWex3d7oatWaojY1nmZSTlcqzb/zjfVvdYlCDeaEwPjKyKiMjUxfPCifMIsPk8FA3BLdzPzcoDBblbxgMHkxQJCnC3KeyQiQteY3CbpDvHGkQozrgXWVW+7AptdZ9m8f7PUIyfyZMFGlpw== 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=s/B5N3dyEEzlXShZzHMydrl/ckiW8uhOVO222kpm6h8=; b=PjUYnrnAlgs7VzAvPFmScwEk5dFulof+BnBRzk4Cw4cxNGtd8yowI8DY2VKpt8WbnHN7bSf9Ilu370qTKyaITlK3RSI+uVGwUYdmuPq30J72/B5Ww13YhrS+6Szt6Ql3G/YGPmrn636exs4dv2mDG7wVpMCGz/0iw4pgdgOb6p/hom6eDCnyVbhaDcM5MqCnFrWkv0rz4o5TyH/fjt0v1E6eNeElJiVJOrPY/z4kMjIhdtmZ9dsGihjG2BetCedQBFSghTgpDDFtUU1dFMAL9hMKDhVp6bp4p58vj/XJvuEXRqK2dvWRNgKZiFezt6sVwQyOiMOSeTARTSV5QG0xug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none Received: from DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) by DU0PR04MB9321.eurprd04.prod.outlook.com (2603:10a6:10:354::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6678.24; Mon, 14 Aug 2023 13:51:45 +0000 Received: from DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::79a:54ba:8003:fbe7]) by DU2PR04MB8790.eurprd04.prod.outlook.com ([fe80::79a:54ba:8003:fbe7%6]) with mapi id 15.20.6678.022; Mon, 14 Aug 2023 13:51:45 +0000 Message-ID: Date: Mon, 14 Aug 2023 15:51:43 +0200 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.14.0 Content-Language: en-US To: Binutils Subject: [PATCH] bfd: correct relocation handling for objcopy COFF -> ELF X-ClientProxiedBy: FR0P281CA0001.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::6) To DU2PR04MB8790.eurprd04.prod.outlook.com (2603:10a6:10:2e1::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DU2PR04MB8790:EE_|DU0PR04MB9321:EE_ X-MS-Office365-Filtering-Correlation-Id: c686fa40-9d81-438d-264a-08db9ccd9908 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xNJKP98cq9Bl14EM4xeEPaUNYTOsOzdMbBH2yEyTbnE1OJB9pCnvtJW7zXJVp9jkktW/FFHBXCojvtVZHupLY7Euyt/wnBH0YDwhzpT1o9bWDc9Is7h/SuPXilMgM6iESI/H6OZVotSa29IKy3pJuWoTO4lSBGAOEpiI/k/KCoZnHvbn7trGpRjUqO6QNNw0tTijTwZduk2QiI5pJrbEMUpFyjIvql+8QumhDL7qGaNzANr1YGbGOtXqcDTWFsYK/HhGPhTOkWlDhRzl3aXgbJxdavHT/3zjXmluIdI/+PI2yNL3FGi+6VRTqHNjUAlHZ2k+D+GpLGkLU3FbmkxNBo8bVjytixNZsyitJWueghWSu12SUMRULT4pPkbVfeaxRQhgPbzi/4ycJcMQ/KS+k8MTPUCQJ8PSM4E1IjP9iswNo5gBN8Sno6oU7br2J1znbCo2HydruSQWz6ud5T4WhPRdqocoBlQ29SKdrCI3YgajqZ1AZiWSX++2tHgvDdGVWdFJKLQVhqSh6q0dAxwo7RMr56xW+COkF9eiSg8y5bfi4ekx+PvknLOEkAStzPJHCNQ4oeb00rlKMYeGCwLP1FWT2o8xFXICJs3a1PkmIggJZRw2JzVaWir8R9TduwJVQmdFgc5Wfb1592CiM8SlGQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DU2PR04MB8790.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(136003)(346002)(396003)(366004)(376002)(39860400002)(1800799006)(186006)(451199021)(6506007)(26005)(8936002)(41300700001)(66476007)(66556008)(66946007)(8676002)(316002)(6512007)(31686004)(2616005)(83380400001)(6486002)(478600001)(38100700002)(31696002)(36756003)(86362001)(6916009)(5660300002)(2906002)(43740500002)(45980500001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?ph1La/b+8TtBjFkDPHZNjmbMl+yK?= =?utf-8?q?mQZxEjx3tCT1BNuBuQi2qyVQGpjapkSb8/YAcCLp18sGtvHgzhtvgXMaUdisvI3MM?= =?utf-8?q?QW5sg/LhU+RY8FSxAF5j1/CekRdMaTMKHfeDr0FSqnZOzbBSsQ8G0BHmsDwHnPdAI?= =?utf-8?q?8QqwdZ3JfSmDiAXge2+JU0vW+noUmP3NKP6xPGLpMyDyjWGNHhmNgcquCmHd4lxVr?= =?utf-8?q?cS7KvW5/FZsNwA8Hfueq8yIKpe8aui8STDZ5gfNHahbZtZrWL/0wOJ3a/qmfInLuF?= =?utf-8?q?ISlETPCWOAQxAykJiEVnbMCzkZC9fIQMCNgevmoPGbexFY69qbv8FVuNeImmh4bf/?= =?utf-8?q?4CizR1it9TrYlUkII01mWgC75Zqki/Y2vZG2u01Z/SteroKQuPh+rWNGjkv+N0DVZ?= =?utf-8?q?PWeoMysux6/CnYEYk6440kP/ez7Me+NKZAY8Issg/ykSexQ/NPBI5bwzTh+WcDvnQ?= =?utf-8?q?ZGd6h80mVl84QC+UL99XEphz5/OxMKG8E/ZHxDmRUGDmN7nHt6HTV/mTnKxI7j6bo?= =?utf-8?q?IGR+NTshc+X69xkRbGTUUtcDlAS73wnx/BYKlnDqvvmlVW9j1F09/C6RdbyKBpttV?= =?utf-8?q?YdE+75VSeUwkdtK7rj6j7tL09Ja5MQ8jSUUosZRwDzH2s2dKf+qF2zkv5lJXnsBqT?= =?utf-8?q?FZsQW/BnHFmuILsaE2LFjCUBHUFwTfQ3Z7FpmEo+TBXMKR/QpLCXKEeAzl3FoRRM6?= =?utf-8?q?GcGNXPhFFiTidn8fVDzYWdu8zUKbec2Qc7M2x4E7BkX6san9Rwg17rZeplgvnbhUh?= =?utf-8?q?EZ2eboGEeL/i6SAqkRA7ZLbXyfdhtpF4TJ67GEjSw8o/NHPShib+aOuXXSX2UUMUB?= =?utf-8?q?hTTYhOqEsMLxabScs3cj2N+ug4/PZ+iRWoU/VVYCSOKIaD45CyweazrL4f7qI2xrG?= =?utf-8?q?FuMZ+Go9UqRB1DWsQeIwMQWNWIQIDcYw4UwWSPSJE1Kn7dKvN68uLMsP9mgmuOop8?= =?utf-8?q?zSx9303BlZdduU/3neYzozPxo532N0YnaKzEU5X51mdONNQAjP1ynXcORXbHXF7zj?= =?utf-8?q?ClsIcV+CQf8sDiD2j5+xFT/6duvk1SdRNNWJ/n6sI25XxgOcMch+2InC5dtGT5Sih?= =?utf-8?q?sYr5aLizMKSdr4KAeeL9NKiPC9Y4xHISsqD1nRutYKEUU1iafYnLNcdIRfj1CQQZu?= =?utf-8?q?z4tgutN7XiaoAiHUOKXAvhgJycWIvllFMX6GHDm/b8qMdwekuz9ruDK6hLjete0Gi?= =?utf-8?q?v+c5TPbkwtL+zmYQUiYYoEP69A2JfvMcKePHOWTM4iWTLvJYjxPAwDv8oCtdRT5uT?= =?utf-8?q?S0VCu+L282hbv6bSBTKNNBZE94KHB69QjVuDgRr9ZUrs1A4BYlD3Ajk+y1O9c1CTQ?= =?utf-8?q?tR+/ohk1b0bVM25GuNjloTXwJOCY+KGZBxZ+C4byau/mlmXg0qgTeuIK54ruXNUvA?= =?utf-8?q?jngOCCdlpsZ23Dixvk+X8nO/55ug0YGR5YP+A/Bm0n5tChs8gPQfGfTyj9CHvm5Pg?= =?utf-8?q?SycjD6jAXZuwcixsQQPm21saT15RALT0TyfcosJPvxop3CHv8CPVU1oXZ1mjBxFge?= =?utf-8?q?1E/BztTXWXCS?= X-OriginatorOrg: suse.com X-MS-Exchange-CrossTenant-Network-Message-Id: c686fa40-9d81-438d-264a-08db9ccd9908 X-MS-Exchange-CrossTenant-AuthSource: DU2PR04MB8790.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Aug 2023 13:51:45.3620 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f7a17af6-1c5c-4a36-aa8b-f5be247aa4ba X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: PO4ML4q6wmXR7Aa+L0BephsCkL1cfC9f4DbDWyyTMl4TOa9UoK+vpfVlKj2blwrAJ6lu+xpvvF9dsfLJUGWGZA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR04MB9321 X-Spam-Status: No, score=-3027.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, 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 X-BeenThere: binutils@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Binutils mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Jan Beulich via Binutils From: Jan Beulich Reply-To: Jan Beulich Errors-To: binutils-bounces+ouuuleilei=gmail.com@sourceware.org Sender: "Binutils" X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1774212735719017489 X-GMAIL-MSGID: 1774212735719017489 While documented to not be reliable, it is still odd for objcopy to silently produce bad output when converting COFF/PE object files to ELF ones. The issue there is that relocation addends all are screwed up by subtracting the symbol's section offset. In the COFF/PE world, to my knowledge, section contents stores the addends alone, not the result of symbol value plus addend. Hence the compensation talked about in a comment ahead of the sole use site of CALC_ADDEND() may need to account for the VMA (which is always zero for object files anyway), but not for the symbol value. The coff-sh.c adjustment is based upon guessing that behavior there is the same. Note also how coff-aarch64.c short-circuits CALC_ADDEND() altogether, which may suggest that a much simpler macro might do for the COFF_WITH_PE case in the three arch-specific files touched here. For (at least) Arm/WinCE this actually results in more appropriate objdump output as well, as can be seen in the one testcase which has its expectations adjusted (the generated binary doesn't change). --- a/bfd/coff-i386.c +++ b/bfd/coff-i386.c @@ -405,7 +405,8 @@ static reloc_howto_type howto_table[] = cache_ptr->addend = - coffsym->native->u.syment.n_value; \ else if (ptr && bfd_asymbol_bfd (ptr) == abfd \ && ptr->section != (asection *) NULL) \ - cache_ptr->addend = - (ptr->section->vma + ptr->value); \ + cache_ptr->addend = - (ptr->section->vma \ + + COFF_PE_ADDEND_BIAS (ptr)); \ else \ cache_ptr->addend = 0; \ if (ptr && reloc.r_type < NUM_HOWTOS \ --- a/bfd/coff-sh.c +++ b/bfd/coff-sh.c @@ -544,7 +544,8 @@ sh_coff_reloc_name_lookup (bfd *abfd ATT cache_ptr->addend = 0; \ else if (ptr && bfd_asymbol_bfd (ptr) == abfd \ && ptr->section != (asection *) NULL) \ - cache_ptr->addend = - (ptr->section->vma + ptr->value); \ + cache_ptr->addend = - (ptr->section->vma \ + + COFF_PE_ADDEND_BIAS (ptr)); \ else \ cache_ptr->addend = 0; \ if ((reloc).r_type == R_SH_SWITCH8 \ --- a/bfd/coff-x86_64.c +++ b/bfd/coff-x86_64.c @@ -542,7 +542,8 @@ static reloc_howto_type howto_table[] = cache_ptr->addend = - coffsym->native->u.syment.n_value; \ else if (ptr && bfd_asymbol_bfd (ptr) == abfd \ && ptr->section != NULL) \ - cache_ptr->addend = - (ptr->section->vma + ptr->value); \ + cache_ptr->addend = - (ptr->section->vma \ + + COFF_PE_ADDEND_BIAS (ptr)); \ else \ cache_ptr->addend = 0; \ if (ptr && reloc.r_type < NUM_HOWTOS \ --- a/bfd/coffcode.h +++ b/bfd/coffcode.h @@ -5151,6 +5151,12 @@ SUBSUBSECTION final-linked object. See @code{CALC_ADDEND}. */ +#ifdef COFF_WITH_PE +#define COFF_PE_ADDEND_BIAS(ptr) 0 /* Symbol value not stored in raw data. */ +#else +#define COFF_PE_ADDEND_BIAS(ptr) ((ptr)->value) +#endif + #ifndef CALC_ADDEND #define CALC_ADDEND(abfd, ptr, reloc, cache_ptr) \ { \ @@ -5167,7 +5173,8 @@ SUBSUBSECTION cache_ptr->addend = 0; \ else if (ptr && bfd_asymbol_bfd (ptr) == abfd \ && ptr->section != NULL) \ - cache_ptr->addend = - (ptr->section->vma + ptr->value); \ + cache_ptr->addend = - (ptr->section->vma \ + + COFF_PE_ADDEND_BIAS (ptr)); \ else \ cache_ptr->addend = 0; \ } --- a/gas/testsuite/gas/arm/wince.d +++ b/gas/testsuite/gas/arm/wince.d @@ -15,11 +15,11 @@ Disassembly of section .text: 0+008 e1a00000 nop @ \(mov r0, r0\) 0+00c e1a00000 nop @ \(mov r0, r0\) 0+010 eafffffb b f+ff8 - 10: ARM_26D global_sym-0x4 + 10: ARM_26D global_sym 0+014 ebfffffa bl f+ff4 - 14: ARM_26D global_sym-0x4 + 14: ARM_26D global_sym 0+018 0afffff9 beq f+ff0 - 18: ARM_26D global_sym-0x4 + 18: ARM_26D global_sym 0+01c eafffff8 b 0+004 0+020 ebfffff7 bl 0+004 0+024 0afffff6 beq 0+004