From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by sourceware.org (Postfix) with ESMTP id 223953858418 for ; Sat, 3 Sep 2022 08:42:06 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 223953858418 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=loongson.cn Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=loongson.cn Received: from 5.5.5 (unknown [10.2.5.5]) by localhost.localdomain (Coremail) with SMTP id AQAAf8DxPGtQExNjaGQQAA--.8159S2; Sat, 03 Sep 2022 16:42:03 +0800 (CST) From: liuzhensong To: binutils@sourceware.org Cc: i.swmail@xen0n.name, xry111@xry111.site, maskray@google.com, liuzhensong Subject: [PATCH v2] LoongArch:ld: Fix relocation error of pcrel. Date: Sat, 3 Sep 2022 16:41:49 +0800 Message-Id: <20220903084149.1612310-1-liuzhensong@loongson.cn> X-Mailer: git-send-email 2.31.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-CM-TRANSID:AQAAf8DxPGtQExNjaGQQAA--.8159S2 X-Coremail-Antispam: 1UD129KBjvJXoWxWFWfJF45Zr15uw4kZw4fKrg_yoWrWr17pa sxuw1Sk3WrJFn3Wr9xGFW5XFn8JFZ7KF12va4fJa1I9rs3try8Xw10yrW3JF43Jw4UJr1f Z3W0qry5uFn8Zw7anT9S1TB71UUUUUUqnTZGkaVYY2UrUUUUjbIjqfuFe4nvWSU5nxnvy2 9KBjDU0xBIdaVrnRJUUUka14x267AKxVWUJVW8JwAFc2x0x2IEx4CE42xK8VAvwI8IcIk0 rVWrJVCq3wAFIxvE14AKwVWUJVWUGwA2ocxC64kIII0Yj41l84x0c7CEw4AK67xGY2AK02 1l84ACjcxK6xIIjxv20xvE14v26r4j6ryUM28EF7xvwVC0I7IYx2IY6xkF7I0E14v26r4j 6F4UM28EF7xvwVC2z280aVAFwI0_Gr1j6F4UJwA2z4x0Y4vEx4A2jsIEc7CjxVAFwI0_Cr 1j6rxdM2AIxVAIcxkEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj 6xIIjxv20xvE14v26r1j6r18McIj6I8E87Iv67AKxVWUJVW8JwAm72CE4IkC6x0Yz7v_Jr 0_Gr1lF7xvr2IYc2Ij64vIr41lF7I21c0EjII2zVCS5cI20VAGYxC7MxkIecxEwVCm-wCF 04k20xvY0x0EwIxGrwCFx2IqxVCFs4IE7xkEbVWUJVW8JwC20s026c02F40E14v26r1j6r 18MI8I3I0E7480Y4vE14v26r106r1rMI8E67AF67kF1VAFwI0_JF0_Jw1lIxkGc2Ij64vI r41lIxAIcVC0I7IYx2IY67AKxVWUJVWUCwCI42IY6xIIjxv20xvEc7CjxVAFwI0_Jr0_Gr 1lIxAIcVCF04k26cxKx2IYs7xG6r1j6r1xMIIF0xvEx4A2jsIE14v26r1j6r4UMIIF0xvE x4A2jsIEc7CjxVAFwI0_Gr0_Gr1UYxBIdaVFxhVjvjDU0xZFpf9x0JUywZ7UUUUU= X-CM-SenderInfo: holx6xphqv003j6o00pqjv00gofq/ X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,SPF_HELO_PASS,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: Patch for branch 2.39. Need to reduce the address of pc when using reloction R_LARCH_SOP_PUSH_PCREL. bfd/ * elfnn-loongarch.c --- bfd/elfnn-loongarch.c | 3 +- ld/testsuite/ld-loongarch-elf/pcrel-const.d | 14 +++++++ ld/testsuite/ld-loongarch-elf/pcrel-const.lds | 14 +++++++ ld/testsuite/ld-loongarch-elf/pcrel-const.s | 12 ++++++ ld/testsuite/ld-loongarch-elf/pr.exp | 39 +++++++++++++++++++ 5 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 ld/testsuite/ld-loongarch-elf/pcrel-const.d create mode 100644 ld/testsuite/ld-loongarch-elf/pcrel-const.lds create mode 100644 ld/testsuite/ld-loongarch-elf/pcrel-const.s create mode 100644 ld/testsuite/ld-loongarch-elf/pr.exp diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c index 5b44901b9e0..fafdc7c7458 100644 --- a/bfd/elfnn-loongarch.c +++ b/bfd/elfnn-loongarch.c @@ -2341,9 +2341,10 @@ loongarch_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, case R_LARCH_SOP_PUSH_PLT_PCREL: unresolved_reloc = false; - if (resolved_to_const) + if (!is_undefweak && resolved_to_const) { relocation += rel->r_addend; + relocation -= pc; break; } else if (is_undefweak) diff --git a/ld/testsuite/ld-loongarch-elf/pcrel-const.d b/ld/testsuite/ld-loongarch-elf/pcrel-const.d new file mode 100644 index 00000000000..ae4705aa531 --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/pcrel-const.d @@ -0,0 +1,14 @@ +#as: -mla-global-with-pcrel +#objdump: -Drsz + +.*:[ ]+file format .* + + +Disassembly of section .text: + +.* : +#... +[ ]+8:[ ]+02c04084[ ]+addi.d[ ]+\$a0,[ ]+\$a0,[ ]+16\(0x10\) +#... +0+14 <__sec_end>: +#pass diff --git a/ld/testsuite/ld-loongarch-elf/pcrel-const.lds b/ld/testsuite/ld-loongarch-elf/pcrel-const.lds new file mode 100644 index 00000000000..34b9861f4fa --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/pcrel-const.lds @@ -0,0 +1,14 @@ +ENTRY(foo); +SECTIONS +{ + .text : { + *(.text*) + } + + .data : { + __sec_start = .; + *(.gzdata) + __sec_end = .; + } +} +PROVIDE(__sec_size = __sec_end); diff --git a/ld/testsuite/ld-loongarch-elf/pcrel-const.s b/ld/testsuite/ld-loongarch-elf/pcrel-const.s new file mode 100644 index 00000000000..8b4a9d7aea0 --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/pcrel-const.s @@ -0,0 +1,12 @@ + .text + .align 2 + .globl foo + .type foo, @function +foo: + nop + la.global $r4,__sec_size + ldptr.w $r4,$r4,0 + jr $r1 + .size foo, .-foo + .data + .word 1 diff --git a/ld/testsuite/ld-loongarch-elf/pr.exp b/ld/testsuite/ld-loongarch-elf/pr.exp new file mode 100644 index 00000000000..c0cc2fc30d2 --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/pr.exp @@ -0,0 +1,39 @@ +# Expect script for LoongArch ELF linker tests +# Copyright (C) 2022 Free Software Foundation, Inc. +# +# This file is part of the GNU Binutils. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. +# + +if ![istarget loongarch64-*-*] { + return +} + +set link_tests [list \ + [list \ + "pcrel const" \ + "-T pcrel-const.lds" "" \ + "-mla-global-with-pcrel" \ + { pcrel-const.s } \ + [list \ + [list objdump -D pcrel-const.d] \ + ] \ + "pcrel-const" \ + ] \ +] + +run_ld_link_tests $link_tests -- 2.31.1