Skip to content

Commit 576773c

Browse files
committed
Modify test loongarch-relax-tlsdesc.s
1 parent a48a2b9 commit 576773c

File tree

1 file changed

+209
-110
lines changed

1 file changed

+209
-110
lines changed

lld/test/ELF/loongarch-relax-tlsdesc.s

+209-110
Original file line numberDiff line numberDiff line change
@@ -3,166 +3,265 @@
33
# RUN: llvm-mc -filetype=obj -triple=loongarch64 -mattr=+relax a.s -o a.64.o
44
# RUN: llvm-mc -filetype=obj -triple=loongarch64 -mattr=+relax c.s -o c.64.o
55
# RUN: ld.lld -shared -soname=c.64.so c.64.o -o c.64.so
6-
# RUN: llvm-mc -filetype=obj -triple=loongarch32 -mattr=+relax --defsym ELF32=1 a.s -o a.32.o
7-
# RUN: llvm-mc -filetype=obj -triple=loongarch32 -mattr=+relax --defsym ELF32=1 c.s -o c.32.o
8-
# RUN: ld.lld -shared -soname=c.32.so c.32.o -o c.32.so
96

107
## Test the TLSDESC relaxation. Also check --emit-relocs.
118
# RUN: ld.lld -shared --emit-relocs -z now a.64.o c.64.o -o a.64.so
129
# RUN: llvm-readobj -r -x .got a.64.so | FileCheck --check-prefix=GD64-RELA %s
13-
# RUN: llvm-objdump --no-show-raw-insn -dr a.64.so | FileCheck %s --check-prefix=GD64
10+
# RUN: llvm-objdump --no-show-raw-insn -dr -h a.64.so | FileCheck %s --check-prefix=GD64
1411

1512
## FIXME: The transition frome TLSDESC to IE/LE has not yet been implemented.
1613
## Keep the dynamic relocations and hand them over to dynamic linker.
1714

1815
# RUN: ld.lld -e 0 -z now --emit-relocs a.64.o c.64.o -o a.64.le
1916
# RUN: llvm-readobj -r -x .got a.64.le | FileCheck --check-prefix=LE64-RELA %s
20-
# RUN: llvm-objdump --no-show-raw-insn -d a.64.le | FileCheck %s --check-prefix=LE64
17+
# RUN: llvm-objdump --no-show-raw-insn -dr -h a.64.le | FileCheck %s --check-prefix=LE64
18+
19+
# RUN: ld.lld -e 0 -z now --no-relax a.64.o c.64.o -o a.64.le.norelax
20+
# RUN: llvm-objdump --no-show-raw-insn -d -h a.64.le.norelax | FileCheck %s --check-prefix=LE64-NORELAX
2121

2222
# RUN: ld.lld -e 0 -z now --emit-relocs a.64.o c.64.so -o a.64.ie
2323
# 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 %s --check-prefix=IE64
25-
26-
## 32-bit code is mostly the same. We only test a few variants.
24+
# RUN: llvm-objdump --no-show-raw-insn -dr -h a.64.ie | FileCheck %s --check-prefix=IE64
2725

28-
# RUN: ld.lld -shared -z now a.32.o c.32.o -o rel.32.so -z rel
29-
# RUN: llvm-readobj -r -x .got rel.32.so | FileCheck --check-prefix=GD32-REL %s
26+
# RUN: ld.lld -e 0 -z now --no-relax a.64.o c.64.so -o a.64.ie.norelax
27+
# RUN: llvm-objdump --no-show-raw-insn -d -h a.64.ie.norelax | FileCheck %s --check-prefix=IE64-NORELAX
3028

3129
# GD64-RELA: .rela.dyn {
32-
# GD64-RELA-NEXT: 0x20448 R_LARCH_TLS_DESC64 - 0x7FF
33-
# GD64-RELA-NEXT: 0x20418 R_LARCH_TLS_DESC64 a 0x0
34-
# GD64-RELA-NEXT: 0x20428 R_LARCH_TLS_DESC64 c 0x0
35-
# GD64-RELA-NEXT: 0x20438 R_LARCH_TLS_DESC64 d 0x0
30+
# GD64-RELA-NEXT: 0x20460 R_LARCH_TLS_DESC64 - 0x7FF
31+
# GD64-RELA-NEXT: 0x20430 R_LARCH_TLS_DESC64 a 0x0
32+
# GD64-RELA-NEXT: 0x20440 R_LARCH_TLS_DESC64 c 0x0
33+
# GD64-RELA-NEXT: 0x20450 R_LARCH_TLS_DESC64 d 0x0
3634
# GD64-RELA-NEXT: }
3735
# GD64-RELA: Hex dump of section '.got':
38-
# GD64-RELA-NEXT: 0x00020418 00000000 00000000 00000000 00000000 .
39-
# GD64-RELA-NEXT: 0x00020428 00000000 00000000 00000000 00000000 .
40-
# GD64-RELA-NEXT: 0x00020438 00000000 00000000 00000000 00000000 .
41-
# GD64-RELA-NEXT: 0x00020448 00000000 00000000 00000000 00000000 .
36+
# GD64-RELA-NEXT: 0x00020430 00000000 00000000 00000000 00000000 .
37+
# GD64-RELA-NEXT: 0x00020440 00000000 00000000 00000000 00000000 .
38+
# GD64-RELA-NEXT: 0x00020450 00000000 00000000 00000000 00000000 .
39+
# GD64-RELA-NEXT: 0x00020460 00000000 00000000 00000000 00000000 .
40+
41+
# GD64: .got 00000040 0000000000020430
4242

43-
## &.got[a]-. = 0x20418 - 0x10318 = 16448<<2
44-
# GD64: 10318: pcaddi $a0, 16448
43+
## &.got[a]-. = 0x20430 - 0x10318 = 16454<<2
44+
# GD64: 10318: pcaddi $a0, 16454
4545
# GD64-NEXT: ld.d $ra, $a0, 0
4646
# GD64-NEXT: jirl $ra, $ra, 0
4747
# GD64-NEXT: add.d $a1, $a0, $tp
4848

49-
## &.got[b]-. = 0x20418+48 - 0x10328 = 16456<<2
50-
# GD64: 10328: pcaddi $a0, 16456
49+
## &.got[b]-. = 0x20430+48 - 0x10328: 0x10 pages, page offset 0x460
50+
## R_LARCH_RELAX does not appear in pairs. No relaxation.
51+
# GD64: 10328: pcalau12i $a0, 16
52+
# GD64-NEXT: addi.d $a0, $a0, 1120
5153
# GD64-NEXT: ld.d $ra, $a0, 0
5254
# GD64-NEXT: jirl $ra, $ra, 0
5355
# GD64-NEXT: add.d $a2, $a0, $tp
5456

55-
## &.got[c]-. = 0x20418+16 - 0x10338 = 16444<<2
56-
# GD64: 10338: pcaddi $a0, 16
57+
## &.got[c]-. = 0x20430+16 - 0x1033c: 0x10 pages, page offset 0x440
58+
## Without R_LARCH_RELAX relocation. No relaxation.
59+
# GD64: 1033c: pcalau12i $a0, 16
60+
# GD64-NEXT: addi.d $t0, $zero, 0
61+
# GD64-NEXT: addi.d $a0, $a0, 1088
62+
# GD64-NEXT: addi.d $t0, $t0, 1
5763
# GD64-NEXT: ld.d $ra, $a0, 0
64+
# GD64-NEXT: addi.d $t0, $t0, 1
5865
# GD64-NEXT: jirl $ra, $ra, 0
5966
# GD64-NEXT: add.d $a3, $a0, $tp
6067

61-
## &.got[d]-. = 0x20418+32 - 0x10348 = 16444<<2
62-
# GD64: 10348: pcaddi $a0, 16444
68+
## &.got[d]-. = 0x20430+32 - 0x1035c = 16445<<2
69+
# GD64: 1035c: pcaddi $a0, 16445
6370
# GD64-NEXT: ld.d $ra, $a0, 0
6471
# GD64-NEXT: jirl $ra, $ra, 0
6572
# GD64-NEXT: add.d $a4, $a0, $tp
6673

6774
# LE64-RELA: .rela.dyn {
68-
# LE64-RELA-NEXT: 0x30268 R_LARCH_TLS_DESC64 - 0x8
69-
# LE64-RELA-NEXT: 0x30278 R_LARCH_TLS_DESC64 - 0x800
70-
# LE64-RELA-NEXT: 0x30288 R_LARCH_TLS_DESC64 - 0x1000
71-
# LE64-RELA-NEXT: 0x30298 R_LARCH_TLS_DESC64 - 0x7FF
75+
# LE64-RELA-NEXT: 0x30280 R_LARCH_TLS_DESC64 - 0x8
76+
# LE64-RELA-NEXT: 0x30290 R_LARCH_TLS_DESC64 - 0x800
77+
# LE64-RELA-NEXT: 0x302A0 R_LARCH_TLS_DESC64 - 0x1000
78+
# LE64-RELA-NEXT: 0x302B0 R_LARCH_TLS_DESC64 - 0x7FF
7279
# LE64-RELA-NEXT: }
7380
# LE64-RELA: Hex dump of section '.got':
74-
# LE64-RELA-NEXT: 0x00030268 00000000 00000000 00000000 00000000 .
75-
# LE64-RELA-NEXT: 0x00030278 00000000 00000000 00000000 00000000 .
76-
# LE64-RELA-NEXT: 0x00030288 00000000 00000000 00000000 00000000 .
77-
# LE64-RELA-NEXT: 0x00030298 00000000 00000000 00000000 00000000 .
78-
79-
# LE64-LABEL: <.text>:
80-
## &.got[a]-. = 0x30268 - 0x20228 = 16400<<2
81-
# LE64-NEXT: 20228: pcaddi $a0, 16400
82-
# LE64-NEXT: ld.d $ra, $a0, 0
83-
# LE64-NEXT: jirl $ra, $ra, 0
84-
# LE64-NEXT: add.d $a1, $a0, $tp
85-
## &.got[b]-. = 0x30298 - 0x20238 = 16408<<2
86-
# LE64-NEXT: 20238: pcaddi $a0, 16408
87-
# LE64-NEXT: ld.d $ra, $a0, 0
88-
# LE64-NEXT: jirl $ra, $ra, 0
89-
# LE64-NEXT: add.d $a2, $a0, $tp
90-
## &.got[c]-. = 0x30278 - 0x20248 = 16396<<2
91-
# LE64-NEXT: 20248: pcaddi $a0, 16396
92-
# LE64-NEXT: ld.d $ra, $a0, 0
93-
# LE64-NEXT: jirl $ra, $ra, 0
94-
# LE64-NEXT: add.d $a3, $a0, $tp
95-
## &.got[d]-. = 0x30288 - 0x20258 = 16396<<2
96-
# LE64-NEXT: 20258: pcaddi $a0, 16396
97-
# LE64-NEXT: ld.d $ra, $a0, 0
98-
# LE64-NEXT: jirl $ra, $ra, 0
99-
# LE64-NEXT: add.d $a4, $a0, $tp
81+
# LE64-RELA-NEXT: 0x00030280 00000000 00000000 00000000 00000000 .
82+
# LE64-RELA-NEXT: 0x00030290 00000000 00000000 00000000 00000000 .
83+
# LE64-RELA-NEXT: 0x000302a0 00000000 00000000 00000000 00000000 .
84+
# LE64-RELA-NEXT: 0x000302b0 00000000 00000000 00000000 00000000 .
85+
86+
# LE64: .got 00000040 0000000000030280
87+
88+
## &.got[a]-. = 0x30280 - 0x20228 = 16406<<2
89+
# LE64: 20228: pcaddi $a0, 16406
90+
# LE64-NEXT: ld.d $ra, $a0, 0
91+
# LE64-NEXT: jirl $ra, $ra, 0
92+
# LE64-NEXT: add.d $a1, $a0, $tp
93+
94+
## &.got[b]-. = 0x30280+48 - 0x20238: 0x10 pages, page offset 0x2b0
95+
## R_LARCH_RELAX does not appear in pairs. No relaxation.
96+
# LE64: 20238: pcalau12i $a0, 16
97+
# LE64-NEXT: addi.d $a0, $a0, 688
98+
# LE64-NEXT: ld.d $ra, $a0, 0
99+
# LE64-NEXT: jirl $ra, $ra, 0
100+
# LE64-NEXT: add.d $a2, $a0, $tp
101+
102+
## &.got[c]-. = 0x30280+16 - 0x2024c: 0x10 pages, page offset 0x290
103+
## Without R_LARCH_RELAX relocation. No relaxation.
104+
# LE64: 2024c: pcalau12i $a0, 16
105+
# LE64-NEXT: addi.d $t0, $zero, 0
106+
# LE64-NEXT: addi.d $a0, $a0, 656
107+
# LE64-NEXT: addi.d $t0, $t0, 1
108+
# LE64-NEXT: ld.d $ra, $a0, 0
109+
# LE64-NEXT: addi.d $t0, $t0, 1
110+
# LE64-NEXT: jirl $ra, $ra, 0
111+
# LE64-NEXT: add.d $a3, $a0, $tp
112+
113+
## &.got[d]-. = 0x30280+32 - 0x2026c = 16397<<2
114+
# LE64: 2026c: pcaddi $a0, 16397
115+
# LE64-NEXT: ld.d $ra, $a0, 0
116+
# LE64-NEXT: jirl $ra, $ra, 0
117+
# LE64-NEXT: add.d $a4, $a0, $tp
118+
119+
# LE64-NORELAX: .got 00000040 0000000000030288
120+
121+
## &.got[a]-. = 0x30288 - 0x20228 = 0x10 pages, page offset 0x288
122+
# LE64-NORELAX: 20228: pcalau12i $a0, 16
123+
# LE64-NORELAX-NEXT: addi.d $a0, $a0, 648
124+
# LE64-NORELAX-NEXT: ld.d $ra, $a0, 0
125+
# LE64-NORELAX-NEXT: jirl $ra, $ra, 0
126+
# LE64-NORELAX-NEXT: add.d $a1, $a0, $tp
127+
128+
## &.got[b]-. = 0x30288+48 - 0x2023c: 0x10 pages, page offset 0x2b8
129+
## R_LARCH_RELAX does not appear in pairs. No relaxation.
130+
# LE64-NORELAX: 2023c: pcalau12i $a0, 16
131+
# LE64-NORELAX-NEXT: addi.d $a0, $a0, 696
132+
# LE64-NORELAX-NEXT: ld.d $ra, $a0, 0
133+
# LE64-NORELAX-NEXT: jirl $ra, $ra, 0
134+
# LE64-NORELAX-NEXT: add.d $a2, $a0, $tp
135+
136+
## &.got[c]-. = 0x30288+16 - 0x20250: 0x10 pages, page offset 0x298
137+
## Without R_LARCH_RELAX relocation. No relaxation.
138+
# LE64-NORELAX: 20250: pcalau12i $a0, 16
139+
# LE64-NORELAX-NEXT: addi.d $t0, $zero, 0
140+
# LE64-NORELAX-NEXT: addi.d $a0, $a0, 664
141+
# LE64-NORELAX-NEXT: addi.d $t0, $t0, 1
142+
# LE64-NORELAX-NEXT: ld.d $ra, $a0, 0
143+
# LE64-NORELAX-NEXT: addi.d $t0, $t0, 1
144+
# LE64-NORELAX-NEXT: jirl $ra, $ra, 0
145+
# LE64-NORELAX-NEXT: add.d $a3, $a0, $tp
146+
147+
## &.got[d]-. = 0x30288+32 - 0x20270: 0x10 pages, page offset 0x2a8
148+
# LE64-NORELAX: 20270: pcalau12i $a0, 16
149+
# LE64-NORELAX-NEXT: addi.d $a0, $a0, 680
150+
# LE64-NORELAX-NEXT: ld.d $ra, $a0, 0
151+
# LE64-NORELAX-NEXT: jirl $ra, $ra, 0
152+
# LE64-NORELAX-NEXT: add.d $a4, $a0, $tp
100153

101154
# IE64-RELA: .rela.dyn {
102-
# IE64-RELA-NEXT: 0x30418 R_LARCH_TLS_DESC64 - 0x8
103-
# IE64-RELA-NEXT: 0x30448 R_LARCH_TLS_DESC64 - 0x7FF
104-
# IE64-RELA-NEXT: 0x30428 R_LARCH_TLS_DESC64 c 0x0
105-
# IE64-RELA-NEXT: 0x30438 R_LARCH_TLS_DESC64 d 0x0
155+
# IE64-RELA-NEXT: 0x30430 R_LARCH_TLS_DESC64 - 0x8
156+
# IE64-RELA-NEXT: 0x30460 R_LARCH_TLS_DESC64 - 0x7FF
157+
# IE64-RELA-NEXT: 0x30440 R_LARCH_TLS_DESC64 c 0x0
158+
# IE64-RELA-NEXT: 0x30450 R_LARCH_TLS_DESC64 d 0x0
106159
# IE64-RELA-NEXT: }
107160
# IE64-RELA: Hex dump of section '.got':
108-
# IE64-RELA-NEXT: 0x00030418 00000000 00000000 00000000 00000000 .
109-
# IE64-RELA-NEXT: 0x00030428 00000000 00000000 00000000 00000000 .
110-
# IE64-RELA-NEXT: 0x00030438 00000000 00000000 00000000 00000000 .
111-
# IE64-RELA-NEXT: 0x00030448 00000000 00000000 00000000 00000000 .
161+
# IE64-RELA-NEXT: 0x00030430 00000000 00000000 00000000 00000000 .
162+
# IE64-RELA-NEXT: 0x00030440 00000000 00000000 00000000 00000000 .
163+
# IE64-RELA-NEXT: 0x00030450 00000000 00000000 00000000 00000000 .
164+
# IE64-RELA-NEXT: 0x00030460 00000000 00000000 00000000 00000000 .
165+
166+
# IE64: .got 00000040 0000000000030430
112167

113168
## a and b are optimized to use LE. c and d are optimized to IE.
114-
# IE64-LABEL: <.text>:
115-
## &.got[a]-. = 0x30418 - 0x202f8 = 16456<<2
116-
# IE64-NEXT: 202f8: pcaddi $a0, 16456
117-
# IE64-NEXT: ld.d $ra, $a0, 0
118-
# IE64-NEXT: jirl $ra, $ra, 0
119-
# IE64-NEXT: add.d $a1, $a0, $tp
120-
## &.got[b]-. = 0x30448 - 0x20308 = 16464<<2
121-
# IE64-NEXT: 20308: pcaddi $a0, 16464
122-
# IE64-NEXT: ld.d $ra, $a0, 0
123-
# IE64-NEXT: jirl $ra, $ra, 0
124-
# IE64-NEXT: add.d $a2, $a0, $tp
125-
## &.got[c]-. = 0x30428 - 0x20318 = 16452<<2
126-
# IE64-NEXT: 20318: pcaddi $a0, 16452
127-
# IE64-NEXT: ld.d $ra, $a0, 0
128-
# IE64-NEXT: jirl $ra, $ra, 0
129-
# IE64-NEXT: add.d $a3, $a0, $tp
130-
## &.got[d]-. = 0x30438 - 0x20328 = 16452<<2
131-
# IE64-NEXT: 20328: pcaddi $a0, 16452
132-
# IE64-NEXT: ld.d $ra, $a0, 0
133-
# IE64-NEXT: jirl $ra, $ra, 0
134-
# IE64-NEXT: add.d $a4, $a0, $tp
135-
136-
# GD32-REL: .rel.dyn {
137-
# GD32-REL-NEXT: 0x202A4 R_LARCH_TLS_DESC32 -
138-
# GD32-REL-NEXT: 0x2028C R_LARCH_TLS_DESC32 a
139-
# GD32-REL-NEXT: 0x20294 R_LARCH_TLS_DESC32 c
140-
# GD32-REL-NEXT: 0x2029C R_LARCH_TLS_DESC32 d
141-
# GD32-REL-NEXT: }
142-
# GD32-REL: Hex dump of section '.got':
143-
# GD32-REL-NEXT: 0x0002028c 00000000 00000000 00000000 00000000 .
144-
# GD32-REL-NEXT: 0x0002029c 00000000 00000000 00000000 ff070000 .
169+
## &.got[a]-. = 0x30430 - 0x202f8 = 16462<<2
170+
# IE64: 202f8: pcaddi $a0, 16462
171+
# IE64-NEXT: ld.d $ra, $a0, 0
172+
# IE64-NEXT: jirl $ra, $ra, 0
173+
# IE64-NEXT: add.d $a1, $a0, $tp
145174

146-
#--- a.s
147-
.macro add dst, src1, src2
148-
.ifdef ELF32
149-
add.w \dst, \src1, \src2
150-
.else
151-
add.d \dst, \src1, \src2
152-
.endif
153-
.endm
175+
## &.got[b]-. = 0x30430+48 - 0x20308: 0x10 pages, page offset 0x460
176+
## R_LARCH_RELAX does not appear in pairs. No relaxation.
177+
# IE64: 20308: pcalau12i $a0, 16
178+
# IE64-NEXT: addi.d $a0, $a0, 1120
179+
# IE64-NEXT: ld.d $ra, $a0, 0
180+
# IE64-NEXT: jirl $ra, $ra, 0
181+
# IE64-NEXT: add.d $a2, $a0, $tp
182+
183+
## &.got[c]-. = 0x30430+16 - 0x2031c: 0x10 pages, page offset 0x440
184+
## Without R_LARCH_RELAX relocation. No relaxation.
185+
# IE64: 2031c: pcalau12i $a0, 16
186+
# IE64-NEXT: addi.d $t0, $zero, 0
187+
# IE64-NEXT: addi.d $a0, $a0, 1088
188+
# IE64-NEXT: addi.d $t0, $t0, 1
189+
# IE64-NEXT: ld.d $ra, $a0, 0
190+
# IE64-NEXT: addi.d $t0, $t0, 1
191+
# IE64-NEXT: jirl $ra, $ra, 0
192+
# IE64-NEXT: add.d $a3, $a0, $tp
193+
194+
## &.got[d]-. = 0x30430+32 - 0x2033c = 16453<<2
195+
# IE64: 2033c: pcaddi $a0, 16453
196+
# IE64-NEXT: ld.d $ra, $a0, 0
197+
# IE64-NEXT: jirl $ra, $ra, 0
198+
# IE64-NEXT: add.d $a4, $a0, $tp
199+
200+
# IE64-NORELAX: .got 00000040 0000000000030438
154201

202+
## &.got[a]-. = 0x30438 - 0x202f8 = 0x10 pages, page offset 0x438
203+
# IE64-NORELAX: 202f8: pcalau12i $a0, 16
204+
# IE64-NORELAX-NEXT: addi.d $a0, $a0, 1080
205+
# IE64-NORELAX-NEXT: ld.d $ra, $a0, 0
206+
# IE64-NORELAX-NEXT: jirl $ra, $ra, 0
207+
# IE64-NORELAX-NEXT: add.d $a1, $a0, $tp
208+
209+
## &.got[b]-. = 0x30438+48 - 0x2030c: 0x10 pages, page offset 0x468
210+
## R_LARCH_RELAX does not appear in pairs. No relaxation.
211+
# IE64-NORELAX: 2030c: pcalau12i $a0, 16
212+
# IE64-NORELAX-NEXT: addi.d $a0, $a0, 1128
213+
# IE64-NORELAX-NEXT: ld.d $ra, $a0, 0
214+
# IE64-NORELAX-NEXT: jirl $ra, $ra, 0
215+
# IE64-NORELAX-NEXT: add.d $a2, $a0, $tp
216+
217+
## &.got[c]-. = 0x30438+16 - 0x20320: 0x10 pages, page offset 0x448
218+
## Without R_LARCH_RELAX relocation. No relaxation.
219+
# IE64-NORELAX: 20320: pcalau12i $a0, 16
220+
# IE64-NORELAX-NEXT: addi.d $t0, $zero, 0
221+
# IE64-NORELAX-NEXT: addi.d $a0, $a0, 1096
222+
# IE64-NORELAX-NEXT: addi.d $t0, $t0, 1
223+
# IE64-NORELAX-NEXT: ld.d $ra, $a0, 0
224+
# IE64-NORELAX-NEXT: addi.d $t0, $t0, 1
225+
# IE64-NORELAX-NEXT: jirl $ra, $ra, 0
226+
# IE64-NORELAX-NEXT: add.d $a3, $a0, $tp
227+
228+
## &.got[d]-. = 0x30438+32 - 0x20340: 0x10 pages, page offset 0x458
229+
# IE64-NORELAX: 20340: pcalau12i $a0, 16
230+
# IE64-NORELAX-NEXT: addi.d $a0, $a0, 1112
231+
# IE64-NORELAX-NEXT: ld.d $ra, $a0, 0
232+
# IE64-NORELAX-NEXT: jirl $ra, $ra, 0
233+
# IE64-NORELAX-NEXT: add.d $a4, $a0, $tp
234+
235+
#--- a.s
155236
la.tls.desc $a0, a
156-
add $a1, $a0, $tp
237+
add.d $a1, $a0, $tp
157238

158-
la.tls.desc $a0, b
159-
add $a2, $a0, $tp
239+
# ADDI.D does not have R_LARCH_RELAX. No relaxation.
240+
pcalau12i $a0, %desc_pc_hi20(b)
241+
.reloc .-4, R_LARCH_RELAX, 0
242+
addi.d $a0, $a0, %desc_pc_lo12(b)
243+
ld.d $ra, $a0, %desc_ld(b)
244+
jirl $ra, $ra, %desc_call(b)
245+
add.d $a2, $a0, $tp
160246

161-
la.tls.desc $a0, c
162-
add $a3, $a0, $tp
247+
# TLSDESC to LE. No relaxation.
248+
pcalau12i $a0, %desc_pc_hi20(c)
249+
addi.d $t0, $zero, 0
250+
addi.d $a0, $a0, %desc_pc_lo12(c)
251+
addi.d $t0, $t0, 1
252+
ld.d $ra, $a0, %desc_ld(c)
253+
addi.d $t0, $t0, 1
254+
jirl $ra, $ra, %desc_call(c)
255+
add.d $a3, $a0, $tp
163256

164-
la.tls.desc $a0, d
165-
add $a4, $a0, $tp
257+
# PCALAU12I and ADDI.D have R_LARCH_RELAX. We preform relaxation.
258+
pcalau12i $a0, %desc_pc_hi20(d)
259+
.reloc .-4, R_LARCH_RELAX, 0
260+
addi.d $a0, $a0, %desc_pc_lo12(d)
261+
.reloc .-4, R_LARCH_RELAX, 0
262+
ld.d $ra, $a0, %desc_ld(d)
263+
jirl $ra, $ra, %desc_call(d)
264+
add.d $a4, $a0, $tp
166265

167266
.section .tbss,"awT",@nobits
168267
.globl a

0 commit comments

Comments
 (0)