From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42c.google.com (mail-wr1-x42c.google.com [IPv6:2a00:1450:4864:20::42c]) by sourceware.org (Postfix) with ESMTPS id 01FE73858D28 for ; Wed, 18 Jan 2023 05:11:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 01FE73858D28 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=harmstone.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-x42c.google.com with SMTP id n7so6669036wrx.5 for ; Tue, 17 Jan 2023 21:11:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:sender:from:to:cc:subject:date:message-id:reply-to; bh=37Yj++UOFGfD6MOMuW3QDUvuuwsLLNglepvmCODLP/0=; b=PY83b2sUxKEYTQX2SG+Sdm5wJk8BG6O6Bt2FHfLjaLTfvgAj+eu9Vsh9jcTPjuhnLZ APhw/35sJgBVeaMvYHPDBkz0I2jDcczqn/Of6PPZ+ISqkJJBe6PJUkp3xuTgccqM2L4C 0NkG+eoky+40FLM2ok5R2TacOazo81+D8Wb5a2mbQb5v6Ra1HVhf7M3tpPfg4coRtoSD UTAD/HlSJ3M/cw2GjLzupIx5aVMrpQxtfZNiU32debyjS5p9vWg2JP8LzGyNPuZOKybo PiBH1snGhMHSUCKtmOTgfxFOSaoW3s7ZKs8uDib1UywkaBRIH6ymQrG/vX8hVGYJGAmq HCAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:sender:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=37Yj++UOFGfD6MOMuW3QDUvuuwsLLNglepvmCODLP/0=; b=N3F6wu6H2LnMEKoCy7QsZts6r6X1c4GUoRkb/yP3wHNgj0VSl7qweNkTuFQq0pculS 3viTayUoMB/7y2/zUl+pYNn/UPRFymS9N8PA8WQ8oulpEB83N46cXqmPDijO6Dp6lSOk qP7ofkb3mR4Xmzl3V/n2BNdgZsBmXiz4JLieBOKOozfOYHv1/ZaB8ID0tH9NTnVwBaB1 0mW1saIHUhT06ou/C9fhzq2Qc88gS6xc2QQtY2H1VNq8l0wVXIRXrOg+JvOFzpmRfFbr rzBBRI86X0hgmiuKCZRPKhj3XaqBTxvk7pA7wboYp8RjZTuZhogZH9SJj3C8Z3VhYbL2 OIOg== X-Gm-Message-State: AFqh2kqvVnTHbFg3meMLFSxWrj5tn64AQa92WG9wpplqDKJtPzYd1YD7 q6+MfYqrInfC/iE0AcTFS8mLFRM0QV4= X-Google-Smtp-Source: AMrXdXvQpsuoHrzuDUcKe2aTBujf57KOsBFZFUn4LANjIkfSC3u7kzCoQrvvh7oYY4Geom52WlO6Rg== X-Received: by 2002:adf:e38f:0:b0:2bd:d76f:23eb with SMTP id e15-20020adfe38f000000b002bdd76f23ebmr1022094wrm.29.1674018699401; Tue, 17 Jan 2023 21:11:39 -0800 (PST) Received: from beren.harmstone.com ([2a02:8010:64ea:0:8eb8:7eff:fe53:9d5f]) by smtp.gmail.com with ESMTPSA id q15-20020adfab0f000000b002bde7999cd6sm12310228wrc.61.2023.01.17.21.11.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 17 Jan 2023 21:11:38 -0800 (PST) Sender: Mark Harmstone From: Mark Harmstone To: binutils@sourceware.org, amodra@gmail.com Cc: Mark Harmstone Subject: [PATCH] ld: Fix ADDR32/64 incorrect outputs in pe-aarch64 Date: Wed, 18 Jan 2023 05:11:36 +0000 Message-Id: <20230118051136.10243-1-mark@harmstone.com> X-Mailer: git-send-email 2.38.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-10.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_EF,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_NUMSUBJECT,RCVD_IN_DNSWL_NONE,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 List-Id: This changes coff_pe_aarch64_relocate_section to also perform IMAGE_REL_ARM64_ADDR32 and IMAGE_REL_ARM64_ADDR64 relocations, which fixes the test failures shown by 52936661. --- bfd/coff-aarch64.c | 45 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/bfd/coff-aarch64.c b/bfd/coff-aarch64.c index 7f6511c82cb..a0cc4f01ae6 100644 --- a/bfd/coff-aarch64.c +++ b/bfd/coff-aarch64.c @@ -526,10 +526,7 @@ coff_pe_aarch64_relocate_section (bfd *output_bfd, asection *sec = NULL; uint64_t dest_vma; - /* skip trivial relocations */ - if (rel->r_type == IMAGE_REL_ARM64_ADDR32 - || rel->r_type == IMAGE_REL_ARM64_ADDR64 - || rel->r_type == IMAGE_REL_ARM64_ABSOLUTE) + if (rel->r_type == IMAGE_REL_ARM64_ABSOLUTE) continue; symndx = rel->r_symndx; @@ -564,6 +561,46 @@ coff_pe_aarch64_relocate_section (bfd *output_bfd, switch (rel->r_type) { + case IMAGE_REL_ARM64_ADDR32: + { + uint64_t val; + int32_t addend; + + addend = bfd_getl32 (contents + rel->r_vaddr); + + dest_vma += addend; + + val = dest_vma; + + if (val > 0xffffffff) + (*info->callbacks->reloc_overflow) + (info, h ? &h->root : NULL, syms[symndx]._n._n_name, + "IMAGE_REL_ARM64_ADDR32", addend, input_bfd, + input_section, rel->r_vaddr - input_section->vma); + + bfd_putl32 (val, contents + rel->r_vaddr); + rel->r_type = IMAGE_REL_ARM64_ABSOLUTE; + + break; + } + + case IMAGE_REL_ARM64_ADDR64: + { + uint64_t val; + int64_t addend; + + addend = bfd_getl64 (contents + rel->r_vaddr); + + dest_vma += addend; + + val = dest_vma; + + bfd_putl64 (val, contents + rel->r_vaddr); + rel->r_type = IMAGE_REL_ARM64_ABSOLUTE; + + break; + } + case IMAGE_REL_ARM64_ADDR32NB: { uint64_t val; -- 2.38.2