aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authormengqinggang <mengqinggang@loongson.cn>2023-06-25 17:47:42 +0800
committerliuzhensong <liuzhensong@loongson.cn>2023-06-28 16:14:35 +0800
commitbe1ebb6710a8f707bd4b0eecbd00f4f4964050e5 (patch)
tree413bfa848b9cd768137c124d640890f63daf6fab /ld
parent69933be89fe5002d2d541ecf2145d5ccac19bbac (diff)
downloadbinutils-be1ebb6710a8f707bd4b0eecbd00f4f4964050e5.zip
binutils-be1ebb6710a8f707bd4b0eecbd00f4f4964050e5.tar.gz
binutils-be1ebb6710a8f707bd4b0eecbd00f4f4964050e5.tar.bz2
LoongArch: Add R_LARCH_64_PCREL relocation support
Gas defaults to emit R_LARCH_ADD64/R_LARCH_SUB64 unless explcitly declared to emit R_LARCH_64_PCREL. The LoongArch ABI at here: https://github.com/loongson/la-abi-specs/blob/release/la-abi.adoc bfd/ChangeLog: * bfd-in2.h (not): Add R_LARCH_64_PCREL * elfnn-loongarch.c (perform_relocation): Likewise. * elfxx-loongarch.c: Likewise. * libbfd.h: Likewise. * reloc.c: Likewise. gas/ChangeLog: * config/tc-loongarch.c (loongarch_args_parser_can_match_arg_helper): (md_apply_fix): Add R_LARCH_64_PCREL. * testsuite/gas/loongarch/64_pcrel.d: New test. * testsuite/gas/loongarch/64_pcrel.s: New test. include/ChangeLog: * elf/loongarch.h (RELOC_NUMBER): Add R_LARCH_64_PCREL. ld/ChangeLog: * testsuite/ld-loongarch-elf/ld-loongarch-elf.exp: Add test. * testsuite/ld-loongarch-elf/64_pcrel.d: New test. * testsuite/ld-loongarch-elf/64_pcrel.s: New test.
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ld-loongarch-elf/64_pcrel.d4
-rw-r--r--ld/testsuite/ld-loongarch-elf/64_pcrel.s11
-rw-r--r--ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp16
3 files changed, 31 insertions, 0 deletions
diff --git a/ld/testsuite/ld-loongarch-elf/64_pcrel.d b/ld/testsuite/ld-loongarch-elf/64_pcrel.d
new file mode 100644
index 0000000..2ea063b
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/64_pcrel.d
@@ -0,0 +1,4 @@
+#...
+.*0xffffbffc.*
+.*0xffffffff.*
+#pass
diff --git a/ld/testsuite/ld-loongarch-elf/64_pcrel.s b/ld/testsuite/ld-loongarch-elf/64_pcrel.s
new file mode 100644
index 0000000..68af590
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/64_pcrel.s
@@ -0,0 +1,11 @@
+.text
+ nop
+ nop
+L1:
+ nop
+.data
+ nop
+ nop
+ .8byte 0x1234567812345678
+ .reloc 0,R_LARCH_64_PCREL,L1
+ nop
diff --git a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
index 50a1208..b95cc53 100644
--- a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
+++ b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
@@ -40,3 +40,19 @@ if [istarget "loongarch32-*-*"] {
run_dump_test "syscall"
run_dump_test "disas-jirl-32"
}
+
+if [istarget "loongarch64-*-*"] {
+ run_ld_link_tests \
+ [list \
+ [list \
+ "64_pcrel" \
+ "-e 0x0 -z relro" "" \
+ "" \
+ {64_pcrel.s} \
+ [list \
+ [list objdump -D 64_pcrel.d] \
+ ] \
+ "64_pcrel" \
+ ] \
+ ]
+}