[binutils-gdb/binutils-2_43-branch] LoongArch: Add relaxation support for call36 that jump to PLT entry

liu & zhensong liuzhensong@sourceware.org
Mon Dec 30 01:40:36 GMT 2024


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=bb9a0a36e78aa564021b377a4a7fab4851b2c22b

commit bb9a0a36e78aa564021b377a4a7fab4851b2c22b
Author: mengqinggang <mengqinggang@loongson.cn>
Date:   Thu Dec 26 14:14:12 2024 +0800

    LoongArch: Add relaxation support for call36 that jump to PLT entry
    
    Part of commit a104f0a3e620 ("LoongArch: Add more relaxation support for
    call36") in master.  This part is needed for 2.43 branch to fix a link
    failure of QtWebEngine-6.8.1, which can be demonstrated with a reduced
    test case (with -shared):
    
        .text
        .zero 1 << 27   # pretending we have a lot of code in .text
        .globl f        # preemptible, thus must be called via PLT
        f:
          move $a0, $r0
          ret
        g:
          pcaddu18i $t0, %call36(f)
          jr $t0
    
    Signed-off-by: Xi Ruoyao <xry111@xry111.site>

Diff:
---
 bfd/elfnn-loongarch.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/bfd/elfnn-loongarch.c b/bfd/elfnn-loongarch.c
index 7760b5279f8..610713a9d7e 100644
--- a/bfd/elfnn-loongarch.c
+++ b/bfd/elfnn-loongarch.c
@@ -5410,6 +5410,11 @@ loongarch_elf_relax_section (bfd *abfd, asection *sec,
 		    && GOT_TLS_GD_BOTH_P (tls_type))
 		symval += 2 * GOT_ENTRY_SIZE;
 	    }
+	  else if (h->plt.offset != MINUS_ONE)
+	    {
+	      sym_sec = htab->elf.splt ? htab->elf.splt : htab->elf.iplt;
+	      symval = h->plt.offset;
+	    }
 	  else if ((h->root.type == bfd_link_hash_defined
 		  || h->root.type == bfd_link_hash_defweak)
 		&& h->root.u.def.section != NULL


More information about the Binutils-cvs mailing list