From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lj1-x235.google.com (mail-lj1-x235.google.com [IPv6:2a00:1450:4864:20::235]) by sourceware.org (Postfix) with ESMTPS id ACB373858281 for ; Sat, 3 Sep 2022 04:33:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org ACB373858281 Authentication-Results: sourceware.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=google.com Received: by mail-lj1-x235.google.com with SMTP id b19so4045778ljf.8 for ; Fri, 02 Sep 2022 21:33:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=lOl7H/tgEKVOJhEd5EiGTgVSPlw/02lmofUZbEE0Qz0=; b=VS2Ud0Z9qWHphqhVmETeXUSghCaKIJJdb9MjqP8T+Sel6ibVV0sJFr4s6fXxEdZGBv OyutrLVo5kPRxwH9pJVVbhCQqMcfhCxbvwiekq5Pzmg1tgcl9fBwFQlVLCAJBKMHI9Z3 UY9fPIGKdAkRbohJVFJqRN3zFNPLCKo65vB2DpJqsVIRFznjCwfA1TIQPCAISi4v3aqw XLc/9BHuzNJQo3IK+FdRL5Rv0nQkc9I97jHaTFOFr38SMTJR7lKz9A32YJ6Q1f7NnYcc pzOrJNlVUf362+HoQ3uRpvqQ9SqM+UCy9aB6Yi+phhYz9xVcG7Ks6POtrdtDhl2inEb9 BbNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=lOl7H/tgEKVOJhEd5EiGTgVSPlw/02lmofUZbEE0Qz0=; b=gPB8ZOXxU1xKEOjWVhcpuvHu47KZq7RlWZX1c2FK4JQcsGcx17LtuzEO5hIc3KMp7L fYN0Ui2stVORsZ2HvWyTLE31X6++s49nPbhxs8xzrw4K2gxNZ8U0ntyEmcFtnx5QNJdr hmb/uzYK43T3G7ewDNoejw1k/r+QFiuzH4gDKMHxcLXjjNA9IwOFIb/s1X0HDMkU0WEF IOQl7gwPKJxzrFg2fh2cAB65260cGCdlOrMA1RgeS65U2lWXeOH7qA21dsGhiiiB9ZxF Z6rRGQ+DYwmehUo+EMfMMyJeV9FFZR8co1gMA7SpGOrMdwknaqfR2xb1n+3xWkiAsPNe msgw== X-Gm-Message-State: ACgBeo0NNCE6/QYcgdWInlRpRRQT4TmH13Lx/JHcA23KAQpoZJa9H0qo 95ItojVdLaRwK7cmuSteX9ErfFXKGIR0sIvE5sroXevyzl5ZeQ== X-Google-Smtp-Source: AA6agR5SewWa1S/eEYFNIz+8qflX31yEDWNuIobT+wDE20LV3ZMjhIyjrrK0B0Y9ALSODcsKp1y8l8ZbMdMXEJaZNnU= X-Received: by 2002:a05:651c:179f:b0:261:83f5:4b5e with SMTP id bn31-20020a05651c179f00b0026183f54b5emr11543693ljb.197.1662179624827; Fri, 02 Sep 2022 21:33:44 -0700 (PDT) MIME-Version: 1.0 References: <20220903012848.968446-1-liuzhensong@loongson.cn> In-Reply-To: <20220903012848.968446-1-liuzhensong@loongson.cn> From: Fangrui Song Date: Fri, 2 Sep 2022 21:33:33 -0700 Message-ID: Subject: Re: [PATCH] LoongArch:ld: Fix relocation error of pcrel. To: liuzhensong Cc: binutils@sourceware.org, i.swmail@xen0n.name, xry111@xry111.site, chenhuacai@loongson.cn Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-24.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,ENV_AND_HDR_SPF_MATCH,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_WL 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: On Fri, Sep 2, 2022 at 6:29 PM liuzhensong wrote: > > Patch for branch 2.39. > Need to reduce the address of pc when using > reloction R_LARCH_SOP_PUSH_PLT_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 | 11 ++++++ > ld/testsuite/ld-loongarch-elf/pr.exp | 39 +++++++++++++++++++ > 5 files changed, 80 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..72abb204122 > --- /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: > + > +.* : > +#... > +[ ]+4:[ ]+02c03084[ ]+addi.d[ ]+\$a0,[ ]+\$a0,[ ]+12\(0xc\) > +#... > +0+10 <__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..064a6894b4d > --- /dev/null > +++ b/ld/testsuite/ld-loongarch-elf/pcrel-const.lds > @@ -0,0 +1,14 @@ > +ENTRY(foo); > +SECTIONS > +{ > + .text : ALIGN(4) { > + *(.text*) > + } > + > + .data : ALIGN(4) { > + __sec_start = .; > + *(.gzdata) > + __sec_end = .; > + } > +} > +PROVIDE(__sec_size = __sec_end - 4); I do not know the legacy relocation scheme, but for tests I would try removing noise like ALIGN(4). .data output section containing .gzdata input sections looks strange too. Can .data input sections be used instead? `__sec_size = __sec_end - 4` is unusual. Is `- 4` necessary to reproduce the bug? If necessary, add a comment. > 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..bc4fb979a80 > --- /dev/null > +++ b/ld/testsuite/ld-loongarch-elf/pcrel-const.s > @@ -0,0 +1,11 @@ > + .text > + .align 2 > + .globl foo > + .type foo, @function > +foo: > + 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 >