From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [IPv6:2001:67c:2178:6::1c]) by sourceware.org (Postfix) with ESMTPS id B4F55385783F for ; Wed, 10 May 2023 14:04:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B4F55385783F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from relay2.suse.de (relay2.suse.de [149.44.160.134]) by smtp-out1.suse.de (Postfix) with ESMTP id EBE2E21977 for ; Wed, 10 May 2023 14:04:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1683727467; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=4k/WjsDqxrpdmLqykDLhGqaB487+X335tvCvvwrsUc4=; b=0Gfqb25o4JEeih7GCgxeHOGPy+ooJ42QiUMKo5M84FYDJqLjnkcNlcsedYavIKa9lUMF30 HgZcp8yAmP33SXyqvh0L1bMb3GIO4t42U0m+CYs39/1j0xYfCQUv54uQjvUXYbTwKu9fuW JvjMFolEWHCCIr4MGAjzBe7Q19/c58Q= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1683727467; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version:content-type:content-type; bh=4k/WjsDqxrpdmLqykDLhGqaB487+X335tvCvvwrsUc4=; b=zvKUhiupLp+8hb4wLFjb5Rs56599x16vitoVSD04F2IXLTpMKeE9l18Om6G6zl4GzTUbns DxcMoXbgH6HeInAA== Received: from wotan.suse.de (wotan.suse.de [10.160.0.1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by relay2.suse.de (Postfix) with ESMTPS id E24DE2C141 for ; Wed, 10 May 2023 14:04:27 +0000 (UTC) Received: by wotan.suse.de (Postfix, from userid 10510) id D2FFD6441; Wed, 10 May 2023 14:04:27 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by wotan.suse.de (Postfix) with ESMTP id CF0656379 for ; Wed, 10 May 2023 14:04:27 +0000 (UTC) Date: Wed, 10 May 2023 14:04:27 +0000 (UTC) From: Michael Matz To: binutils@sourceware.org Subject: [PATCH] PR30437 aarch64: make RELA relocs idempotent Message-ID: User-Agent: Alpine 2.20 (LSU 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Spam-Status: No, score=-9.2 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE 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: normally RELA relocs in BFD should not consider the contents of the relocated place. The aarch64 psABI is even stricter, it specifies (section 5.7.16) that all RELA relocs _must_ be idempotent. Since the inception of the aarch64 BFD backend all the relocs have a non-zero src_mask, and hence break this invariant. It's normally not a very visible problem as one can see it only when the relocated place already contains a non-zero value, which usually only happens sometimes when using 'ld -r' (or as in the testcase when jumping through hoops to generate the relocations). Or with alternative toolchains that do encode stuff in the relocated places with the assumption that a relocation to that place ignores whatever is there (as they can according to the psABI). Golang is such a toolchain and https://github.com/golang/go/issues/39927 is ultimately caused by this problem: the testcase testGCData failing is caused by the garbage collection data-structure to describe a type containing pointers to be wrong. It's wrong because a field that's supposed to contain a file-relative offset (to some gcbits) has a relocation applied and that relocation has an addend which also is already part of the go-produced object file (so the addend is implicitely applied twice). bfd/ PR ld/30437 * elfnn-aarch64.c (elfNN_aarch64_howto_table): Clear src_mask if all relocation descriptors. ld/ * testsuite/ld-aarch64/rela-idempotent.s: New testcase. * testsuite/ld-aarch64/rela-idempotent.d: New. * testsuite/ld-aarch64/aarch64-elf.exp: Run it. --- Tested for aarch64-elf and aarch64-linux (and the other ~150 targets, though those can't be affected). Also tested natively on aarch64-suse-linux-gnu. Okay for master? Ciao, Michael. bfd/elfnn-aarch64.c | 208 +++++++++++----------- ld/testsuite/ld-aarch64/aarch64-elf.exp | 2 + ld/testsuite/ld-aarch64/rela-idempotent.d | 19 ++ ld/testsuite/ld-aarch64/rela-idempotent.s | 14 ++ 4 files changed, 139 insertions(+), 104 deletions(-) create mode 100644 ld/testsuite/ld-aarch64/rela-idempotent.d create mode 100644 ld/testsuite/ld-aarch64/rela-idempotent.s diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c index c23cbd3601a..32799b6b009 100644 --- a/bfd/elfnn-aarch64.c +++ b/bfd/elfnn-aarch64.c @@ -478,7 +478,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (ABS64), /* name */ false, /* partial_inplace */ - ALL_ONES, /* src_mask */ + 0, /* src_mask */ ALL_ONES, /* dst_mask */ false), /* pcrel_offset */ @@ -493,7 +493,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (ABS32), /* name */ false, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0, /* src_mask */ 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ @@ -508,7 +508,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (ABS16), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -523,7 +523,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (PREL64), /* name */ false, /* partial_inplace */ - ALL_ONES, /* src_mask */ + 0, /* src_mask */ ALL_ONES, /* dst_mask */ true), /* pcrel_offset */ @@ -538,7 +538,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (PREL32), /* name */ false, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0, /* src_mask */ 0xffffffff, /* dst_mask */ true), /* pcrel_offset */ @@ -553,7 +553,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (PREL16), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ true), /* pcrel_offset */ @@ -571,7 +571,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_UABS_G0), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -586,7 +586,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_UABS_G0_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -601,7 +601,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_UABS_G1), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -616,7 +616,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_UABS_G1_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -631,7 +631,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_UABS_G2), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -646,7 +646,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_UABS_G2_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -661,7 +661,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_UABS_G3), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -680,7 +680,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_SABS_G0), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -695,7 +695,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_SABS_G1), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -710,7 +710,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_SABS_G2), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -728,7 +728,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_PREL_G0), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ true), /* pcrel_offset */ @@ -743,7 +743,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_PREL_G0_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ true), /* pcrel_offset */ @@ -758,7 +758,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_PREL_G1), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ true), /* pcrel_offset */ @@ -773,7 +773,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_PREL_G1_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ true), /* pcrel_offset */ @@ -788,7 +788,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_PREL_G2), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ true), /* pcrel_offset */ @@ -803,7 +803,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_PREL_G2_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ true), /* pcrel_offset */ @@ -818,7 +818,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_PREL_G3), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ true), /* pcrel_offset */ @@ -836,7 +836,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LD_PREL_LO19), /* name */ false, /* partial_inplace */ - 0x7ffff, /* src_mask */ + 0, /* src_mask */ 0x7ffff, /* dst_mask */ true), /* pcrel_offset */ @@ -851,7 +851,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (ADR_PREL_LO21), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ true), /* pcrel_offset */ @@ -866,7 +866,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (ADR_PREL_PG_HI21), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ true), /* pcrel_offset */ @@ -881,7 +881,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (ADR_PREL_PG_HI21_NC), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ true), /* pcrel_offset */ @@ -896,7 +896,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (ADD_ABS_LO12_NC), /* name */ false, /* partial_inplace */ - 0x3ffc00, /* src_mask */ + 0, /* src_mask */ 0x3ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -911,7 +911,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LDST8_ABS_LO12_NC), /* name */ false, /* partial_inplace */ - 0xfff, /* src_mask */ + 0, /* src_mask */ 0xfff, /* dst_mask */ false), /* pcrel_offset */ @@ -928,7 +928,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TSTBR14), /* name */ false, /* partial_inplace */ - 0x3fff, /* src_mask */ + 0, /* src_mask */ 0x3fff, /* dst_mask */ true), /* pcrel_offset */ @@ -943,7 +943,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (CONDBR19), /* name */ false, /* partial_inplace */ - 0x7ffff, /* src_mask */ + 0, /* src_mask */ 0x7ffff, /* dst_mask */ true), /* pcrel_offset */ @@ -958,7 +958,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (JUMP26), /* name */ false, /* partial_inplace */ - 0x3ffffff, /* src_mask */ + 0, /* src_mask */ 0x3ffffff, /* dst_mask */ true), /* pcrel_offset */ @@ -973,7 +973,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (CALL26), /* name */ false, /* partial_inplace */ - 0x3ffffff, /* src_mask */ + 0, /* src_mask */ 0x3ffffff, /* dst_mask */ true), /* pcrel_offset */ @@ -988,7 +988,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LDST16_ABS_LO12_NC), /* name */ false, /* partial_inplace */ - 0xffe, /* src_mask */ + 0, /* src_mask */ 0xffe, /* dst_mask */ false), /* pcrel_offset */ @@ -1003,7 +1003,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LDST32_ABS_LO12_NC), /* name */ false, /* partial_inplace */ - 0xffc, /* src_mask */ + 0, /* src_mask */ 0xffc, /* dst_mask */ false), /* pcrel_offset */ @@ -1018,7 +1018,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LDST64_ABS_LO12_NC), /* name */ false, /* partial_inplace */ - 0xff8, /* src_mask */ + 0, /* src_mask */ 0xff8, /* dst_mask */ false), /* pcrel_offset */ @@ -1033,7 +1033,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LDST128_ABS_LO12_NC), /* name */ false, /* partial_inplace */ - 0xff0, /* src_mask */ + 0, /* src_mask */ 0xff0, /* dst_mask */ false), /* pcrel_offset */ @@ -1049,7 +1049,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (GOT_LD_PREL19), /* name */ false, /* partial_inplace */ - 0xffffe0, /* src_mask */ + 0, /* src_mask */ 0xffffe0, /* dst_mask */ true), /* pcrel_offset */ @@ -1065,7 +1065,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (ADR_GOT_PAGE), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ true), /* pcrel_offset */ @@ -1080,7 +1080,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LD64_GOT_LO12_NC), /* name */ false, /* partial_inplace */ - 0xff8, /* src_mask */ + 0, /* src_mask */ 0xff8, /* dst_mask */ false), /* pcrel_offset */ @@ -1095,7 +1095,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LD32_GOT_LO12_NC), /* name */ false, /* partial_inplace */ - 0xffc, /* src_mask */ + 0, /* src_mask */ 0xffc, /* dst_mask */ false), /* pcrel_offset */ @@ -1110,7 +1110,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_GOTOFF_G0_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1125,7 +1125,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (MOVW_GOTOFF_G1), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1140,7 +1140,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LD64_GOTOFF_LO15), /* name */ false, /* partial_inplace */ - 0x7ff8, /* src_mask */ + 0, /* src_mask */ 0x7ff8, /* dst_mask */ false), /* pcrel_offset */ @@ -1156,7 +1156,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LD32_GOTPAGE_LO14), /* name */ false, /* partial_inplace */ - 0x5ffc, /* src_mask */ + 0, /* src_mask */ 0x5ffc, /* dst_mask */ false), /* pcrel_offset */ @@ -1172,7 +1172,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (LD64_GOTPAGE_LO15), /* name */ false, /* partial_inplace */ - 0x7ff8, /* src_mask */ + 0, /* src_mask */ 0x7ff8, /* dst_mask */ false), /* pcrel_offset */ @@ -1188,7 +1188,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSGD_ADR_PAGE21), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ true), /* pcrel_offset */ @@ -1202,7 +1202,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSGD_ADR_PREL21), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ true), /* pcrel_offset */ @@ -1217,7 +1217,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSGD_ADD_LO12_NC), /* name */ false, /* partial_inplace */ - 0xfff, /* src_mask */ + 0, /* src_mask */ 0xfff, /* dst_mask */ false), /* pcrel_offset */ @@ -1232,7 +1232,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSGD_MOVW_G0_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1247,7 +1247,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSGD_MOVW_G1), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1261,7 +1261,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSIE_ADR_GOTTPREL_PAGE21), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1275,7 +1275,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSIE_LD64_GOTTPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0xff8, /* src_mask */ + 0, /* src_mask */ 0xff8, /* dst_mask */ false), /* pcrel_offset */ @@ -1289,7 +1289,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSIE_LD32_GOTTPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0xffc, /* src_mask */ + 0, /* src_mask */ 0xffc, /* dst_mask */ false), /* pcrel_offset */ @@ -1303,7 +1303,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSIE_LD_GOTTPREL_PREL19), /* name */ false, /* partial_inplace */ - 0x1ffffc, /* src_mask */ + 0, /* src_mask */ 0x1ffffc, /* dst_mask */ false), /* pcrel_offset */ @@ -1317,7 +1317,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSIE_MOVW_GOTTPREL_G0_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1331,7 +1331,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSIE_MOVW_GOTTPREL_G1), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1346,7 +1346,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_ADD_DTPREL_HI12), /* name */ false, /* partial_inplace */ - 0xfff, /* src_mask */ + 0, /* src_mask */ 0xfff, /* dst_mask */ false), /* pcrel_offset */ @@ -1361,7 +1361,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_ADD_DTPREL_LO12), /* name */ false, /* partial_inplace */ - 0xfff, /* src_mask */ + 0, /* src_mask */ 0xfff, /* dst_mask */ false), /* pcrel_offset */ @@ -1376,7 +1376,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_ADD_DTPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0xfff, /* src_mask */ + 0, /* src_mask */ 0xfff, /* dst_mask */ false), /* pcrel_offset */ @@ -1391,7 +1391,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_ADD_LO12_NC), /* name */ false, /* partial_inplace */ - 0xfff, /* src_mask */ + 0, /* src_mask */ 0xfff, /* dst_mask */ false), /* pcrel_offset */ @@ -1407,7 +1407,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_ADR_PAGE21), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ true), /* pcrel_offset */ @@ -1421,7 +1421,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_ADR_PREL21), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ true), /* pcrel_offset */ @@ -1436,7 +1436,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_LDST16_DTPREL_LO12), /* name */ false, /* partial_inplace */ - 0x1ffc00, /* src_mask */ + 0, /* src_mask */ 0x1ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1451,7 +1451,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_LDST16_DTPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0x1ffc00, /* src_mask */ + 0, /* src_mask */ 0x1ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1466,7 +1466,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_LDST32_DTPREL_LO12), /* name */ false, /* partial_inplace */ - 0x3ffc00, /* src_mask */ + 0, /* src_mask */ 0x3ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1481,7 +1481,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_LDST32_DTPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0xffc00, /* src_mask */ + 0, /* src_mask */ 0xffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1496,7 +1496,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_LDST64_DTPREL_LO12), /* name */ false, /* partial_inplace */ - 0x3ffc00, /* src_mask */ + 0, /* src_mask */ 0x3ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1511,7 +1511,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_LDST64_DTPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0x7fc00, /* src_mask */ + 0, /* src_mask */ 0x7fc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1526,7 +1526,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_LDST8_DTPREL_LO12), /* name */ false, /* partial_inplace */ - 0x3ffc00, /* src_mask */ + 0, /* src_mask */ 0x3ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1541,7 +1541,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_LDST8_DTPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0x3ffc00, /* src_mask */ + 0, /* src_mask */ 0x3ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1556,7 +1556,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_MOVW_DTPREL_G0), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1571,7 +1571,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_MOVW_DTPREL_G0_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1586,7 +1586,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_MOVW_DTPREL_G1), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1601,7 +1601,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_MOVW_DTPREL_G1_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1616,7 +1616,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLD_MOVW_DTPREL_G2), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1630,7 +1630,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_MOVW_TPREL_G2), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1644,7 +1644,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_MOVW_TPREL_G1), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1658,7 +1658,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_MOVW_TPREL_G1_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1672,7 +1672,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_MOVW_TPREL_G0), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1686,7 +1686,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_MOVW_TPREL_G0_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1700,7 +1700,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_ADD_TPREL_HI12), /* name */ false, /* partial_inplace */ - 0xfff, /* src_mask */ + 0, /* src_mask */ 0xfff, /* dst_mask */ false), /* pcrel_offset */ @@ -1714,7 +1714,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_ADD_TPREL_LO12), /* name */ false, /* partial_inplace */ - 0xfff, /* src_mask */ + 0, /* src_mask */ 0xfff, /* dst_mask */ false), /* pcrel_offset */ @@ -1728,7 +1728,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_ADD_TPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0xfff, /* src_mask */ + 0, /* src_mask */ 0xfff, /* dst_mask */ false), /* pcrel_offset */ @@ -1743,7 +1743,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_LDST16_TPREL_LO12), /* name */ false, /* partial_inplace */ - 0x1ffc00, /* src_mask */ + 0, /* src_mask */ 0x1ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1758,7 +1758,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_LDST16_TPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0x1ffc00, /* src_mask */ + 0, /* src_mask */ 0x1ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1773,7 +1773,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_LDST32_TPREL_LO12), /* name */ false, /* partial_inplace */ - 0xffc00, /* src_mask */ + 0, /* src_mask */ 0xffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1788,7 +1788,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_LDST32_TPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0xffc00, /* src_mask */ + 0, /* src_mask */ 0xffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1803,7 +1803,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_LDST64_TPREL_LO12), /* name */ false, /* partial_inplace */ - 0x7fc00, /* src_mask */ + 0, /* src_mask */ 0x7fc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1818,7 +1818,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_LDST64_TPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0x7fc00, /* src_mask */ + 0, /* src_mask */ 0x7fc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1833,7 +1833,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_LDST8_TPREL_LO12), /* name */ false, /* partial_inplace */ - 0x3ffc00, /* src_mask */ + 0, /* src_mask */ 0x3ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1848,7 +1848,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSLE_LDST8_TPREL_LO12_NC), /* name */ false, /* partial_inplace */ - 0x3ffc00, /* src_mask */ + 0, /* src_mask */ 0x3ffc00, /* dst_mask */ false), /* pcrel_offset */ @@ -1862,7 +1862,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSDESC_LD_PREL19), /* name */ false, /* partial_inplace */ - 0x0ffffe0, /* src_mask */ + 0, /* src_mask */ 0x0ffffe0, /* dst_mask */ true), /* pcrel_offset */ @@ -1876,7 +1876,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSDESC_ADR_PREL21), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ true), /* pcrel_offset */ @@ -1892,7 +1892,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSDESC_ADR_PAGE21), /* name */ false, /* partial_inplace */ - 0x1fffff, /* src_mask */ + 0, /* src_mask */ 0x1fffff, /* dst_mask */ true), /* pcrel_offset */ @@ -1907,7 +1907,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSDESC_LD64_LO12), /* name */ false, /* partial_inplace */ - 0xff8, /* src_mask */ + 0, /* src_mask */ 0xff8, /* dst_mask */ false), /* pcrel_offset */ @@ -1922,7 +1922,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSDESC_LD32_LO12_NC), /* name */ false, /* partial_inplace */ - 0xffc, /* src_mask */ + 0, /* src_mask */ 0xffc, /* dst_mask */ false), /* pcrel_offset */ @@ -1937,7 +1937,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSDESC_ADD_LO12), /* name */ false, /* partial_inplace */ - 0xfff, /* src_mask */ + 0, /* src_mask */ 0xfff, /* dst_mask */ false), /* pcrel_offset */ @@ -1951,7 +1951,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSDESC_OFF_G1), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -1965,7 +1965,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (TLSDESC_OFF_G0_NC), /* name */ false, /* partial_inplace */ - 0xffff, /* src_mask */ + 0, /* src_mask */ 0xffff, /* dst_mask */ false), /* pcrel_offset */ @@ -2021,7 +2021,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (COPY), /* name */ true, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0, /* src_mask */ 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ @@ -2035,7 +2035,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (GLOB_DAT), /* name */ true, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0, /* src_mask */ 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ @@ -2049,7 +2049,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (JUMP_SLOT), /* name */ true, /* partial_inplace */ - 0xffffffff, /* src_mask */ + 0, /* src_mask */ 0xffffffff, /* dst_mask */ false), /* pcrel_offset */ @@ -2063,7 +2063,7 @@ static reloc_howto_type elfNN_aarch64_howto_table[] = bfd_elf_generic_reloc, /* special_function */ AARCH64_R_STR (RELATIVE), /* name */ true, /* partial_inplace */ - ALL_ONES, /* src_mask */ + 0, /* src_mask */ ALL_ONES, /* dst_mask */ false), /* pcrel_offset */ diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp index ec55bf49931..b025fcbd567 100644 --- a/ld/testsuite/ld-aarch64/aarch64-elf.exp +++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp @@ -401,6 +401,8 @@ run_dump_test_lp64 "rela-abs-relative" run_dump_test_lp64 "rela-abs-relative-be" run_dump_test_lp64 "rela-abs-relative-opt" +run_dump_test_lp64 "rela-idempotent" + run_dump_test_lp64 "pie-bind-locally" run_dump_test "property-bti-pac1" diff --git a/ld/testsuite/ld-aarch64/rela-idempotent.d b/ld/testsuite/ld-aarch64/rela-idempotent.d new file mode 100644 index 00000000000..f3b5ffb988b --- /dev/null +++ b/ld/testsuite/ld-aarch64/rela-idempotent.d @@ -0,0 +1,19 @@ +#name: rela-idempotent +#source: rela-idempotent.s +#target: [check_shared_lib_support] +#ld: -shared -Ttext-segment=0x100000 -Tdata=0x200000 -Trelocs.ld +#notarget: aarch64_be-*-* +#objdump: -dR -j .data +#... + +Disassembly of section .data: + +.* : + 200000: 00200032.* + 200000: R_AARCH64_RELATIVE \*ABS\*\+0x200032 + 200004: 00000000.* + +.* : + 200008: 00200054.* + 200008: R_AARCH64_RELATIVE \*ABS\*\+0x200054 + 20000c: 00000000.* diff --git a/ld/testsuite/ld-aarch64/rela-idempotent.s b/ld/testsuite/ld-aarch64/rela-idempotent.s new file mode 100644 index 00000000000..7cb5dffb3bd --- /dev/null +++ b/ld/testsuite/ld-aarch64/rela-idempotent.s @@ -0,0 +1,14 @@ +# this checks that aarch64 RELA relocs are ignoring existing section +# content of the relocated place + .text + .global _start +_start: + ret + + .data + .p2align 4 +l: .long 0x11111111, 0x22222222 +q: .quad 0x4444444433333333 + + .reloc l, BFD_RELOC_64, q+42 + .reloc q, BFD_RELOC_64, l+84 -- 2.39.1