Skip to content

Commit 459e25d

Browse files
committed
Modify loongarch-tlsdesc.s and loongarch-tlsdesc-pcrel20-s2.s
1 parent dff3031 commit 459e25d

File tree

2 files changed

+86
-38
lines changed

2 files changed

+86
-38
lines changed

lld/test/ELF/loongarch-tlsdesc-pcrel20-s2.s

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
# RUN: ld.lld -shared -z now a.64.o c.64.o -o rel.64.so -z rel
1515
# RUN: llvm-readobj -r -x .got rel.64.so | FileCheck --check-prefix=GD64-REL %s
1616

17-
## FIXME: The transition frome TLSDESC to IE/LE has not yet been implemented.
18-
## Keep the dynamic relocations and hand them over to dynamic linker.
19-
17+
## Transition from TLSDESC to IE/LE.
2018
# RUN: ld.lld -e 0 -z now a.64.o c.64.o -o a.64.le
21-
# RUN: llvm-readobj -r -x .got a.64.le | FileCheck --check-prefix=LE64-RELA %s
19+
# RUN: llvm-readobj -r -x .got a.64.le 2>&1 | FileCheck --check-prefix=LE64-RELA %s
20+
# RUN: llvm-objdump --no-show-raw-insn -d a.64.le | FileCheck --check-prefix=LE64 %s
2221

2322
# RUN: ld.lld -e 0 -z now a.64.o c.64.so -o a.64.ie
2423
# RUN: llvm-readobj -r -x .got a.64.ie | FileCheck --check-prefix=IE64-RELA %s
24+
# RUN: llvm-objdump --no-show-raw-insn -d a.64.ie | FileCheck --check-prefix=IE64 %s
2525

2626
## 32-bit code is mostly the same. We only test a few variants.
2727

@@ -68,25 +68,46 @@
6868
# GD64-NEXT: jirl $ra, $ra, 0
6969
# GD64-NEXT: add.d $a3, $a0, $tp
7070

71-
# LE64-RELA: .rela.dyn {
72-
# LE64-RELA-NEXT: 0x30240 R_LARCH_TLS_DESC64 - 0x8
73-
# LE64-RELA-NEXT: 0x30250 R_LARCH_TLS_DESC64 - 0x800
74-
# LE64-RELA-NEXT: 0x30260 R_LARCH_TLS_DESC64 - 0x7FF
75-
# LE64-RELA-NEXT: }
76-
# LE64-RELA: Hex dump of section '.got':
77-
# LE64-RELA-NEXT: 0x00030240 00000000 00000000 00000000 00000000 .
78-
# LE64-RELA-NEXT: 0x00030250 00000000 00000000 00000000 00000000 .
79-
# LE64-RELA-NEXT: 0x00030260 00000000 00000000 00000000 00000000 .
71+
# LE64-RELA: could not find section '.got'
72+
73+
# LE64-LABEL: <.text>:
74+
## st_value(a) = 8
75+
# LE64-NEXT: nop
76+
# LE64-NEXT: nop
77+
# LE64-NEXT: ori $a0, $zero, 8
78+
# LE64-NEXT: add.d $a1, $a0, $tp
79+
## st_value(b) = 2047
80+
# LE64-NEXT: nop
81+
# LE64-NEXT: nop
82+
# LE64-NEXT: ori $a0, $zero, 2047
83+
# LE64-NEXT: add.d $a2, $a0, $tp
84+
## st_value(c) = 2048
85+
# LE64-NEXT: nop
86+
# LE64-NEXT: nop
87+
# LE64-NEXT: ori $a0, $zero, 2048
88+
# LE64-NEXT: add.d $a3, $a0, $tp
8089

8190
# IE64-RELA: .rela.dyn {
82-
# IE64-RELA-NEXT: 0x303C8 R_LARCH_TLS_DESC64 - 0x8
83-
# IE64-RELA-NEXT: 0x303E8 R_LARCH_TLS_DESC64 - 0x7FF
84-
# IE64-RELA-NEXT: 0x303D8 R_LARCH_TLS_DESC64 c 0x0
91+
# IE64-RELA-NEXT: 0x30398 R_LARCH_TLS_TPREL64 c 0x0
8592
# IE64-RELA-NEXT: }
8693
# IE64-RELA: Hex dump of section '.got':
87-
# IE64-RELA-NEXT: 0x000303c8 00000000 00000000 00000000 00000000 .
88-
# IE64-RELA-NEXT: 0x000303d8 00000000 00000000 00000000 00000000 .
89-
# IE64-RELA-NEXT: 0x000303e8 00000000 00000000 00000000 00000000 .
94+
# IE64-RELA-NEXT: 0x00030398 00000000 00000000 .
95+
96+
## a and b are optimized to use LE. c is optimized to IE.
97+
# IE64-LABEL: <.text>:
98+
# IE64-NEXT: nop
99+
# IE64-NEXT: nop
100+
# IE64-NEXT: ori $a0, $zero, 8
101+
# IE64-NEXT: add.d $a1, $a0, $tp
102+
# IE64-NEXT: nop
103+
# IE64-NEXT: nop
104+
# IE64-NEXT: ori $a0, $zero, 2047
105+
# IE64-NEXT: add.d $a2, $a0, $tp
106+
## &.got[c]-. = 0x30398 - 0x202ac: 0x10 pages, page offset 0x398
107+
# IE64-NEXT: nop
108+
# IE64-NEXT: 202ac: pcalau12i $a0, 16
109+
# IE64-NEXT: ld.d $a0, $a0, 920
110+
# IE64-NEXT: add.d $a3, $a0, $tp
90111

91112
# GD32-REL: .rel.dyn {
92113
# GD32-REL-NEXT: 0x20264 R_LARCH_TLS_DESC32 -

lld/test/ELF/loongarch-tlsdesc.s

Lines changed: 46 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@
1414
# RUN: ld.lld -shared -z now a.64.o c.64.o -o rel.64.so -z rel
1515
# RUN: llvm-readobj -r -x .got rel.64.so | FileCheck --check-prefix=GD64-REL %s
1616

17-
## FIXME: The transition frome TLSDESC to IE/LE has not yet been implemented.
18-
## Keep the dynamic relocations and hand them over to dynamic linker.
19-
17+
## Transition from TLSDESC to IE/LE.
2018
# RUN: ld.lld -e 0 -z now a.64.o c.64.o -o a.64.le
21-
# RUN: llvm-readobj -r -x .got a.64.le | FileCheck --check-prefix=LE64-RELA %s
19+
# RUN: llvm-readobj -r -x .got a.64.le 2>&1 | FileCheck --check-prefix=LE64-RELA %s
20+
# RUN: llvm-objdump --no-show-raw-insn -d a.64.le | FileCheck --check-prefix=LE64 %s
2221

2322
# RUN: ld.lld -e 0 -z now a.64.o c.64.so -o a.64.ie
2423
# RUN: llvm-readobj -r -x .got a.64.ie | FileCheck --check-prefix=IE64-RELA %s
24+
# RUN: llvm-objdump --no-show-raw-insn -d a.64.ie | FileCheck --check-prefix=IE64 %s
2525

2626
## 32-bit code is mostly the same. We only test a few variants.
2727

@@ -71,25 +71,52 @@
7171
# GD64-NEXT: jirl $ra, $ra, 0
7272
# GD64-NEXT: add.d $a3, $a0, $tp
7373

74-
# LE64-RELA: .rela.dyn {
75-
# LE64-RELA-NEXT: 0x30250 R_LARCH_TLS_DESC64 - 0x8
76-
# LE64-RELA-NEXT: 0x30260 R_LARCH_TLS_DESC64 - 0x800
77-
# LE64-RELA-NEXT: 0x30270 R_LARCH_TLS_DESC64 - 0x7FF
78-
# LE64-RELA-NEXT: }
79-
# LE64-RELA: Hex dump of section '.got':
80-
# LE64-RELA-NEXT: 0x00030250 00000000 00000000 00000000 00000000 .
81-
# LE64-RELA-NEXT: 0x00030260 00000000 00000000 00000000 00000000 .
82-
# LE64-RELA-NEXT: 0x00030270 00000000 00000000 00000000 00000000 .
74+
# LE64-RELA: could not find section '.got'
75+
76+
# LE64-LABEL: <.text>:
77+
## st_value(a) = 8
78+
# LE64-NEXT: nop
79+
# LE64-NEXT: nop
80+
# LE64-NEXT: nop
81+
# LE64-NEXT: ori $a0, $zero, 8
82+
# LE64-NEXT: add.d $a1, $a0, $tp
83+
## st_value(b) = 2047
84+
# LE64-NEXT: nop
85+
# LE64-NEXT: nop
86+
# LE64-NEXT: nop
87+
# LE64-NEXT: ori $a0, $zero, 2047
88+
# LE64-NEXT: add.d $a2, $a0, $tp
89+
## st_value(c) = 2048
90+
# LE64-NEXT: nop
91+
# LE64-NEXT: nop
92+
# LE64-NEXT: nop
93+
# LE64-NEXT: ori $a0, $zero, 2048
94+
# LE64-NEXT: add.d $a3, $a0, $tp
8395

8496
# IE64-RELA: .rela.dyn {
85-
# IE64-RELA-NEXT: 0x303D8 R_LARCH_TLS_DESC64 - 0x8
86-
# IE64-RELA-NEXT: 0x303F8 R_LARCH_TLS_DESC64 - 0x7FF
87-
# IE64-RELA-NEXT: 0x303E8 R_LARCH_TLS_DESC64 c 0x0
97+
# IE64-RELA-NEXT: 0x303A8 R_LARCH_TLS_TPREL64 c 0x0
8898
# IE64-RELA-NEXT: }
8999
# IE64-RELA: Hex dump of section '.got':
90-
# IE64-RELA-NEXT: 0x000303d8 00000000 00000000 00000000 00000000 .
91-
# IE64-RELA-NEXT: 0x000303e8 00000000 00000000 00000000 00000000 .
92-
# IE64-RELA-NEXT: 0x000303f8 00000000 00000000 00000000 00000000 .
100+
# IE64-RELA-NEXT: 0x000303a8 00000000 00000000 .
101+
102+
## a and b are optimized to use LE. c is optimized to IE.
103+
# IE64-LABEL: <.text>:
104+
# IE64-NEXT: nop
105+
# IE64-NEXT: nop
106+
# IE64-NEXT: nop
107+
# IE64-NEXT: ori $a0, $zero, 8
108+
# IE64-NEXT: add.d $a1, $a0, $tp
109+
# IE64-NEXT: nop
110+
# IE64-NEXT: nop
111+
# IE64-NEXT: nop
112+
# IE64-NEXT: ori $a0, $zero, 2047
113+
# IE64-NEXT: add.d $a2, $a0, $tp
114+
## &.got[c]-. = 0x303a8 - 0x202b8: 0x10 pages, page offset 0x3a8
115+
# IE64-NEXT: nop
116+
# IE64-NEXT: nop
117+
# IE64-NEXT: 202b8: pcalau12i $a0, 16
118+
# IE64-NEXT: ld.d $a0, $a0, 936
119+
# IE64-NEXT: add.d $a3, $a0, $tp
93120

94121
# GD32-REL: .rel.dyn {
95122
# GD32-REL-NEXT: 0x20270 R_LARCH_TLS_DESC32 -

0 commit comments

Comments
 (0)