aboutsummaryrefslogtreecommitdiff
path: root/ld
diff options
context:
space:
mode:
authorLulu Cai <cailulu@loongson.cn>2025-01-14 21:13:01 +0800
committercailulu <cailulu@loongson.cn>2025-01-17 18:35:56 +0800
commit48984d3da79f340b814e43b6576993ea1a927f5a (patch)
tree610072c2124d63330c0b3b75eb76c6fdbd7a9659 /ld
parent2c4b5f54b8432bb442f95748cd60fcdcc48f239b (diff)
downloadfsf-binutils-gdb-48984d3da79f340b814e43b6576993ea1a927f5a.zip
fsf-binutils-gdb-48984d3da79f340b814e43b6576993ea1a927f5a.tar.gz
fsf-binutils-gdb-48984d3da79f340b814e43b6576993ea1a927f5a.tar.bz2
LoongArch: Allocate GOT entry for TLS DESC when -mno-relax is enabled
The type transition of TLSDESC is only done when -mrelax is enabled. So when -mno-relax is enabled, keep GOT_TLS_GDESC to allocate the GOT entry instead of just keeping GOT_TLS_IE.
Diffstat (limited to 'ld')
-rw-r--r--ld/testsuite/ld-loongarch-elf/desc-ie-norelax.dd8
-rw-r--r--ld/testsuite/ld-loongarch-elf/desc-ie-norelax.rd3
-rw-r--r--ld/testsuite/ld-loongarch-elf/desc-ie-norelax.s15
-rw-r--r--ld/testsuite/ld-loongarch-elf/desc-ie-norelax.sd6
-rw-r--r--ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp15
5 files changed, 47 insertions, 0 deletions
diff --git a/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.dd b/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.dd
new file mode 100644
index 0000000..bf26f31
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.dd
@@ -0,0 +1,8 @@
+#...
+.*pcalau12i.*
+.*addi.d.*
+.*ld.d.*
+.*jirl.*
+.*pcalau12i.*
+.*ld.d.*
+#pass
diff --git a/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.rd b/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.rd
new file mode 100644
index 0000000..17e74a5
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.rd
@@ -0,0 +1,3 @@
+#...
+.*R_LARCH_TLS_DESC64.*
+#pass
diff --git a/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.s b/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.s
new file mode 100644
index 0000000..2905d5d
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.s
@@ -0,0 +1,15 @@
+ .globl var
+ .section .tdata,"awT",@progbits
+ .type tls, @object
+var:
+ .word 1
+ .text
+ .globl _start
+_start:
+ pcalau12i $a0,%desc_pc_hi20(var)
+ addi.d $a0,$a0,%desc_pc_lo12(var)
+ ld.d $ra,$a0,%desc_ld(var)
+ jirl $ra,$ra,%desc_call(var)
+
+ pcalau12i $t0,%ie_pc_hi20(var)
+ ld.d $t0,$t0,%ie_pc_lo12(var)
diff --git a/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.sd b/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.sd
new file mode 100644
index 0000000..053c886
--- /dev/null
+++ b/ld/testsuite/ld-loongarch-elf/desc-ie-norelax.sd
@@ -0,0 +1,6 @@
+
+.*: file format .*
+
+Contents of section .got:
+ [0-9a-f]+ [0-9a-f]+ 00000000 00000000 00000000 ................
+ [0-9a-f]+ 00000000 00000000 00000000 00000000 ................
diff --git a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
index 105305c..0295be8 100644
--- a/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
+++ b/ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp
@@ -154,6 +154,21 @@ if [istarget "loongarch64-*-*"] {
] \
]
+ # Using DESC and IE to access the same tls symbol but with
+ # -mno-relax requires allocating GOT entries for both DESC and IE,
+ # not just IE
+ run_ld_link_tests [list \
+ [list \
+ "desc and ie do not type transition" \
+ "-pie -e0 --hash-style=both" "" \
+ "-mno-relax" \
+ {desc-ie-norelax.s} \
+ {{objdump {-d} desc-ie-norelax.dd} \
+ {readelf {-rW} desc-ie-norelax.rd} \
+ {objdump {-sj.got} desc-ie-norelax.sd}} \
+ "desc-ie-norelax" \
+ ] \
+ ] \
}
if [istarget "loongarch64-*-*"] {