]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commit
LoongArch: Fix linker generate PLT entry for data symbol
authormengqinggang <mengqinggang@loongson.cn>
Thu, 1 Dec 2022 09:23:14 +0000 (17:23 +0800)
committerliuzhensong <liuzhensong@loongson.cn>
Thu, 4 Jan 2024 11:08:53 +0000 (19:08 +0800)
commite493ba6255aec08885affbb68ddc0a025583d528
tree907c8311ad1cef9bf1233eb73685c9e10dfbb657
parentb7a5722ebdd24a0d15d56e96d30a649ea1d7b0ee
LoongArch: Fix linker generate PLT entry for data symbol

With old "medium" code model, we call a function with a pair of PCALAU12I
and JIRL instructions. The assembler produces something like:

   8: 1a00000c  pcalau12i    $t0, 0
8: R_LARCH_PCALA_HI20 g
   c: 4c000181  jirl         $ra, $t0, 0
c: R_LARCH_PCALA_LO12 g

The linker generates a "PLT entry" for data without any diagnostic.
If "g" is a data symbol and ld with -shared option, it may load two
instructions in the PLT.

Without -shared option, loongarch_elf_adjust_dynamic_symbol can delete PLT
entry.

For R_LARCH_PCALA_HI20 relocation, linker only generate PLT entry for STT_FUNC
and STT_GNU_IFUNC symbols.
bfd/elfnn-loongarch.c
ld/testsuite/ld-loongarch-elf/data-plt.s [new file with mode: 0644]
ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
ld/testsuite/ld-loongarch-elf/libjirl.s