diff options
author | Lulu Cai <cailulu@loongson.cn> | 2025-01-14 21:13:01 +0800 |
---|---|---|
committer | cailulu <cailulu@loongson.cn> | 2025-01-17 18:35:56 +0800 |
commit | 48984d3da79f340b814e43b6576993ea1a927f5a (patch) | |
tree | 610072c2124d63330c0b3b75eb76c6fdbd7a9659 /ld | |
parent | 2c4b5f54b8432bb442f95748cd60fcdcc48f239b (diff) | |
download | fsf-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.dd | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-loongarch-elf/desc-ie-norelax.rd | 3 | ||||
-rw-r--r-- | ld/testsuite/ld-loongarch-elf/desc-ie-norelax.s | 15 | ||||
-rw-r--r-- | ld/testsuite/ld-loongarch-elf/desc-ie-norelax.sd | 6 | ||||
-rw-r--r-- | ld/testsuite/ld-loongarch-elf/ld-loongarch-elf.exp | 15 |
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-*-*"] { |