Skip to content

Commit 894a97a

Browse files
committed
Modify loongarch-relax-tlsdesc.s init.
1 parent 459e25d commit 894a97a

File tree

1 file changed

+140
-110
lines changed

1 file changed

+140
-110
lines changed

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

Lines changed: 140 additions & 110 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,18 @@
99
# RUN: llvm-readobj -r -x .got a.64.so | FileCheck --check-prefix=GD64-RELA %s
1010
# RUN: llvm-objdump --no-show-raw-insn -dr -h a.64.so | FileCheck %s --check-prefix=GD64
1111

12-
## FIXME: The transition frome TLSDESC to IE/LE has not yet been implemented.
13-
## Keep the dynamic relocations and hand them over to dynamic linker.
14-
15-
# RUN: ld.lld --relax -e 0 -z now a.64.o c.64.o -o a.64.le
16-
# RUN: llvm-readobj -r -x .got a.64.le | FileCheck --check-prefix=LE64-RELA %s
17-
# RUN: llvm-objdump --no-show-raw-insn -d -h a.64.le | FileCheck %s --check-prefix=LE64
12+
## FIXME: IE/LE relaxation have not yet been implemented, --relax/--no-relax obtain the same results.
13+
## Transition from TLSDESC to IE/LE. Also check --emit-relocs.
14+
# RUN: ld.lld --relax -e 0 -z now --emit-relocs a.64.o c.64.o -o a.64.le
15+
# RUN: llvm-readobj -r -x .got a.64.le 2>&1 | FileCheck --check-prefix=LE64-RELA %s
16+
# RUN: llvm-objdump --no-show-raw-insn -dr -h a.64.le | FileCheck %s --check-prefix=LE64
1817

1918
# RUN: ld.lld --no-relax -e 0 -z now a.64.o c.64.o -o a.64.le.norelax
2019
# RUN: llvm-objdump --no-show-raw-insn -d -h a.64.le.norelax | FileCheck %s --check-prefix=LE64-NORELAX
2120

22-
# RUN: ld.lld --relax -e 0 -z now a.64.o c.64.so -o a.64.ie
21+
# RUN: ld.lld --relax -e 0 -z now --emit-relocs a.64.o c.64.so -o a.64.ie
2322
# RUN: llvm-readobj -r -x .got a.64.ie | FileCheck --check-prefix=IE64-RELA %s
24-
# RUN: llvm-objdump --no-show-raw-insn -d -h a.64.ie | FileCheck %s --check-prefix=IE64
23+
# RUN: llvm-objdump --no-show-raw-insn -dr -h a.64.ie | FileCheck %s --check-prefix=IE64
2524

2625
# RUN: ld.lld --no-relax -e 0 -z now a.64.o c.64.so -o a.64.ie.norelax
2726
# RUN: llvm-objdump --no-show-raw-insn -d -h a.64.ie.norelax | FileCheck %s --check-prefix=IE64-NORELAX
@@ -71,165 +70,196 @@
7170
# GD64-NEXT: jirl $ra, $ra, 0
7271
# GD64-NEXT: add.d $a4, $a0, $tp
7372

74-
# LE64-RELA: .rela.dyn {
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
79-
# LE64-RELA-NEXT: }
80-
# LE64-RELA: Hex dump of section '.got':
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
73+
# LE64-RELA: could not find section '.got'
74+
75+
## a@tprel = 0x8
76+
# LE64: 20158: nop
77+
# LE64-NEXT: R_LARCH_TLS_DESC_PC_HI20 a
78+
# LE64-NEXT: R_LARCH_RELAX *ABS*
79+
# LE64-NEXT: nop
80+
# LE64-NEXT: R_LARCH_TLS_DESC_PC_LO12 a
81+
# LE64-NEXT: R_LARCH_RELAX *ABS*
82+
# LE64-NEXT: nop
83+
# LE64-NEXT: R_LARCH_TLS_DESC_LD a
84+
# LE64-NEXT: R_LARCH_RELAX *ABS*
85+
# LE64-NEXT: ori $a0, $zero, 8
86+
# LE64-NEXT: R_LARCH_TLS_DESC_CALL a
87+
# LE64-NEXT: R_LARCH_RELAX *ABS*
9288
# LE64-NEXT: add.d $a1, $a0, $tp
9389

94-
## &.got[b]-. = 0x30280+48 - 0x20238: 0x10 pages, page offset 0x2b0
90+
## b@tprel = 0x7ff
9591
## 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
92+
# LE64: 2016c: nop
93+
# LE64-NEXT: R_LARCH_TLS_DESC_PC_HI20 b
94+
# LE64-NEXT: R_LARCH_RELAX *ABS*
95+
# LE64-NEXT: nop
96+
# LE64-NEXT: R_LARCH_TLS_DESC_PC_LO12 b
97+
# LE64-NEXT: nop
98+
# LE64-NEXT: R_LARCH_TLS_DESC_LD b
99+
# LE64-NEXT: ori $a0, $zero, 2047
100+
# LE64-NEXT: R_LARCH_TLS_DESC_CALL b
100101
# LE64-NEXT: add.d $a2, $a0, $tp
101102

102-
## &.got[c]-. = 0x30280+16 - 0x2024c: 0x10 pages, page offset 0x290
103+
## c@tprel = 0x800
103104
## Without R_LARCH_RELAX relocation. No relaxation.
104-
# LE64: 2024c: pcalau12i $a0, 16
105+
# LE64: 20180: nop
106+
# LE64-NEXT: R_LARCH_TLS_DESC_PC_HI20 c
105107
# LE64-NEXT: addi.d $t0, $zero, 0
106-
# LE64-NEXT: addi.d $a0, $a0, 656
108+
# LE64-NEXT: nop
109+
# LE64-NEXT: R_LARCH_TLS_DESC_PC_LO12 c
107110
# LE64-NEXT: addi.d $t0, $t0, 1
108-
# LE64-NEXT: ld.d $ra, $a0, 0
111+
# LE64-NEXT: nop
112+
# LE64-NEXT: R_LARCH_TLS_DESC_LD c
109113
# LE64-NEXT: addi.d $t0, $t0, 1
110-
# LE64-NEXT: jirl $ra, $ra, 0
114+
# LE64-NEXT: ori $a0, $zero, 2048
115+
# LE64-NEXT: R_LARCH_TLS_DESC_CALL c
111116
# LE64-NEXT: add.d $a3, $a0, $tp
112117

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
118+
## d@tprel = 0x1000
119+
# LE64: 201a0: nop
120+
# LE64-NEXT: R_LARCH_TLS_DESC_PC_HI20 d
121+
# LE64-NEXT: R_LARCH_RELAX *ABS*
122+
# LE64-NEXT: nop
123+
# LE64-NEXT: R_LARCH_TLS_DESC_PC_LO12 d
124+
# LE64-NEXT: R_LARCH_RELAX *ABS*
125+
# LE64-NEXT: lu12i.w $a0, 1
126+
# LE64-NEXT: R_LARCH_TLS_DESC_LD d
127+
# LE64-NEXT: ori $a0, $a0, 0
128+
# LE64-NEXT: R_LARCH_TLS_DESC_CALL d
117129
# LE64-NEXT: add.d $a4, $a0, $tp
118130

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
131+
## a@tprel = 0x8
132+
# LE64-NORELAX: 20158: nop
133+
# LE64-NORELAX-NEXT: nop
134+
# LE64-NORELAX-NEXT: nop
135+
# LE64-NORELAX-NEXT: ori $a0, $zero, 8
126136
# LE64-NORELAX-NEXT: add.d $a1, $a0, $tp
127137

128-
## &.got[b]-. = 0x30288+48 - 0x2023c: 0x10 pages, page offset 0x2b8
138+
## b@tprel = 0x7ff
129139
## 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
140+
# LE64-NORELAX: 2016c: nop
141+
# LE64-NORELAX-NEXT: nop
142+
# LE64-NORELAX-NEXT: nop
143+
# LE64-NORELAX-NEXT: ori $a0, $zero, 2047
134144
# LE64-NORELAX-NEXT: add.d $a2, $a0, $tp
135145

136-
## &.got[c]-. = 0x30288+16 - 0x20250: 0x10 pages, page offset 0x298
146+
## c@tprel = 0x800
137147
## Without R_LARCH_RELAX relocation. No relaxation.
138-
# LE64-NORELAX: 20250: pcalau12i $a0, 16
148+
# LE64-NORELAX: 20180: nop
139149
# LE64-NORELAX-NEXT: addi.d $t0, $zero, 0
140-
# LE64-NORELAX-NEXT: addi.d $a0, $a0, 664
150+
# LE64-NORELAX-NEXT: nop
141151
# LE64-NORELAX-NEXT: addi.d $t0, $t0, 1
142-
# LE64-NORELAX-NEXT: ld.d $ra, $a0, 0
152+
# LE64-NORELAX-NEXT: nop
143153
# LE64-NORELAX-NEXT: addi.d $t0, $t0, 1
144-
# LE64-NORELAX-NEXT: jirl $ra, $ra, 0
154+
# LE64-NORELAX-NEXT: ori $a0, $zero, 2048
145155
# LE64-NORELAX-NEXT: add.d $a3, $a0, $tp
146156

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
157+
## d@tprel = 0x1000
158+
# LE64-NORELAX: 201a0: nop
159+
# LE64-NORELAX-NEXT: nop
160+
# LE64-NORELAX-NEXT: lu12i.w $a0, 1
161+
# LE64-NORELAX-NEXT: ori $a0, $a0, 0
152162
# LE64-NORELAX-NEXT: add.d $a4, $a0, $tp
153163

154164
# IE64-RELA: .rela.dyn {
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
165+
# IE64-RELA-NEXT: 0x30408 R_LARCH_TLS_TPREL64 c 0x0
166+
# IE64-RELA-NEXT: 0x30410 R_LARCH_TLS_TPREL64 d 0x0
159167
# IE64-RELA-NEXT: }
160168
# IE64-RELA: Hex dump of section '.got':
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 .
169+
# IE64-RELA-NEXT: 0x00030408 00000000 00000000 00000000 00000000 .
165170

166-
# IE64: .got 00000040 0000000000030430
171+
# IE64: .got 00000010 0000000000030408
167172

168173
## a and b are optimized to use LE. c and d are optimized to IE.
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
174+
## a@tprel = 0x8
175+
# IE64: 202c8: nop
176+
# IE64-NEXT: R_LARCH_TLS_DESC_PC_HI20 a
177+
# IE64-NEXT: R_LARCH_RELAX *ABS*
178+
# IE64-NEXT: nop
179+
# IE64-NEXT: R_LARCH_TLS_DESC_PC_LO12 a
180+
# IE64-NEXT: R_LARCH_RELAX *ABS*
181+
# IE64-NEXT: nop
182+
# IE64-NEXT: R_LARCH_TLS_DESC_LD a
183+
# IE64-NEXT: R_LARCH_RELAX *ABS*
184+
# IE64-NEXT: ori $a0, $zero, 8
185+
# IE64-NEXT: R_LARCH_TLS_DESC_CALL a
186+
# IE64-NEXT: R_LARCH_RELAX *ABS*
173187
# IE64-NEXT: add.d $a1, $a0, $tp
174188

175-
## &.got[b]-. = 0x30430+48 - 0x20308: 0x10 pages, page offset 0x460
189+
## b@tprel = 0x7ff
176190
## 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
191+
# IE64: 202dc: nop
192+
# IE64-NEXT: R_LARCH_TLS_DESC_PC_HI20 b
193+
# IE64-NEXT: R_LARCH_RELAX *ABS*
194+
# IE64-NEXT: nop
195+
# IE64-NEXT: R_LARCH_TLS_DESC_PC_LO12 b
196+
# IE64-NEXT: nop
197+
# IE64-NEXT: R_LARCH_TLS_DESC_LD b
198+
# IE64-NEXT: ori $a0, $zero, 2047
199+
# IE64-NEXT: R_LARCH_TLS_DESC_CALL b
181200
# IE64-NEXT: add.d $a2, $a0, $tp
182201

183-
## &.got[c]-. = 0x30430+16 - 0x2031c: 0x10 pages, page offset 0x440
202+
## &.got[c]-. = 0x30408 - 0x20300: 0x10 pages, page offset 0x408
184203
## Without R_LARCH_RELAX relocation. No relaxation.
185-
# IE64: 2031c: pcalau12i $a0, 16
204+
# IE64: 202f0: nop
205+
# IE64-NEXT: R_LARCH_TLS_DESC_PC_HI20 c
186206
# IE64-NEXT: addi.d $t0, $zero, 0
187-
# IE64-NEXT: addi.d $a0, $a0, 1088
207+
# IE64-NEXT: nop
208+
# IE64-NEXT: R_LARCH_TLS_DESC_PC_LO12 c
188209
# IE64-NEXT: addi.d $t0, $t0, 1
189-
# IE64-NEXT: ld.d $ra, $a0, 0
210+
# IE64-NEXT: pcalau12i $a0, 16
211+
# IE64-NEXT: R_LARCH_TLS_DESC_LD c
190212
# IE64-NEXT: addi.d $t0, $t0, 1
191-
# IE64-NEXT: jirl $ra, $ra, 0
213+
# IE64-NEXT: ld.d $a0, $a0, 1032
214+
# IE64-NEXT: R_LARCH_TLS_DESC_CALL c
192215
# IE64-NEXT: add.d $a3, $a0, $tp
193216

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
217+
## &.got[d]-. = 0x30408+8 - 0x20318: 0x10 pages, page offset 0x410
218+
# IE64: 20310: nop
219+
# IE64-NEXT: R_LARCH_TLS_DESC_PC_HI20 d
220+
# IE64-NEXT: R_LARCH_RELAX *ABS*
221+
# IE64-NEXT: nop
222+
# IE64-NEXT: R_LARCH_TLS_DESC_PC_LO12 d
223+
# IE64-NEXT: R_LARCH_RELAX *ABS*
224+
# IE64-NEXT: pcalau12i $a0, 16
225+
# IE64-NEXT: R_LARCH_TLS_DESC_LD d
226+
# IE64-NEXT: ld.d $a0, $a0, 1040
227+
# IE64-NEXT: R_LARCH_TLS_DESC_CALL d
198228
# IE64-NEXT: add.d $a4, $a0, $tp
199229

200-
# IE64-NORELAX: .got 00000040 0000000000030438
230+
# IE64-NORELAX: .got 00000010 0000000000030408
201231

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
232+
## a@tprel = 0x8
233+
# IE64-NORELAX: 202c8: nop
234+
# IE64-NORELAX-NEXT: nop
235+
# IE64-NORELAX-NEXT: nop
236+
# IE64-NORELAX-NEXT: ori $a0, $zero, 8
207237
# IE64-NORELAX-NEXT: add.d $a1, $a0, $tp
208238

209-
## &.got[b]-. = 0x30438+48 - 0x2030c: 0x10 pages, page offset 0x468
239+
## b@tprel = 0x7ff
210240
## 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
241+
# IE64-NORELAX: 202dc: nop
242+
# IE64-NORELAX-NEXT: nop
243+
# IE64-NORELAX-NEXT: nop
244+
# IE64-NORELAX-NEXT: ori $a0, $zero, 2047
215245
# IE64-NORELAX-NEXT: add.d $a2, $a0, $tp
216246

217-
## &.got[c]-. = 0x30438+16 - 0x20320: 0x10 pages, page offset 0x448
247+
## &.got[c]-. = 0x30408 - 0x20300: 0x10 pages, page offset 0x408
218248
## Without R_LARCH_RELAX relocation. No relaxation.
219-
# IE64-NORELAX: 20320: pcalau12i $a0, 16
249+
# IE64-NORELAX: 202f0: nop
220250
# IE64-NORELAX-NEXT: addi.d $t0, $zero, 0
221-
# IE64-NORELAX-NEXT: addi.d $a0, $a0, 1096
251+
# IE64-NORELAX-NEXT: nop
222252
# IE64-NORELAX-NEXT: addi.d $t0, $t0, 1
223-
# IE64-NORELAX-NEXT: ld.d $ra, $a0, 0
253+
# IE64-NORELAX-NEXT: pcalau12i $a0, 16
224254
# IE64-NORELAX-NEXT: addi.d $t0, $t0, 1
225-
# IE64-NORELAX-NEXT: jirl $ra, $ra, 0
255+
# IE64-NORELAX-NEXT: ld.d $a0, $a0, 1032
226256
# IE64-NORELAX-NEXT: add.d $a3, $a0, $tp
227257

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
258+
## &.got[d]-. = 0x30408+8 - 0x20318: 0x10 pages, page offset 0x410
259+
# IE64-NORELAX: 20310: nop
260+
# IE64-NORELAX-NEXT: nop
261+
# IE64-NORELAX-NEXT: pcalau12i $a0, 16
262+
# IE64-NORELAX-NEXT: ld.d $a0, $a0, 1040
233263
# IE64-NORELAX-NEXT: add.d $a4, $a0, $tp
234264

235265
#--- a.s

0 commit comments

Comments
 (0)