Skip to content

Commit de7e23f

Browse files
committed
Sparc: Improve tests
* Remove unuseful -filetype=asm -show-encoding output from relocation tests. * Test STT_TLS for TLS relocations * Test r_offset for a few relocations * Test ASM output for many relocations
1 parent c34d2fb commit de7e23f

File tree

4 files changed

+165
-211
lines changed

4 files changed

+165
-211
lines changed
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
# RUN: llvm-mc %s -triple=sparc | FileCheck %s --check-prefix=ASM
2+
# RUN: llvm-mc %s -triple=sparcv9 | FileCheck %s --check-prefix=ASM
3+
4+
# RUN: llvm-mc %s -triple=sparc -filetype=obj -o %t
5+
# RUN: llvm-objdump -dr %t | FileCheck %s --check-prefix=OBJDUMP
6+
# RUN: llvm-mc %s -triple=sparcv9 -filetype=obj -o %t
7+
# RUN: llvm-objdump -dr %t | FileCheck %s --check-prefix=OBJDUMP
8+
# RUN: llvm-readelf -s - < %t | FileCheck %s --check-prefix=READELF --implicit-check-not=TLS
9+
10+
# READELF: TLS LOCAL DEFAULT [[#]] s_tle_hix22
11+
# READELF: TLS LOCAL DEFAULT [[#]] s_tldo_hix22
12+
# READELF: TLS GLOBAL DEFAULT UND s_tle_lox10
13+
# READELF: TLS GLOBAL DEFAULT UND s_tie_hi22
14+
# READELF: TLS GLOBAL DEFAULT UND s_tie_lo10
15+
# READELF: TLS GLOBAL DEFAULT UND s_tie_ld
16+
# READELF: TLS GLOBAL DEFAULT UND s_tie_ldx
17+
# READELF: TLS GLOBAL DEFAULT UND s_tie_add
18+
# READELF: TLS GLOBAL DEFAULT UND s_tldm_hi22
19+
# READELF: TLS GLOBAL DEFAULT UND s_tldm_lo10
20+
# READELF: TLS GLOBAL DEFAULT UND s_tldm_add
21+
# READELF: TLS GLOBAL DEFAULT UND s_tldo_lox10
22+
# READELF: TLS GLOBAL DEFAULT UND s_tldo_add
23+
# READELF: TLS GLOBAL DEFAULT UND s_tgd_hi22
24+
# READELF: TLS GLOBAL DEFAULT UND s_tgd_lo10
25+
# READELF: TLS GLOBAL DEFAULT UND s_tgd_add
26+
27+
# ASM: or %g1, %lo(sym), %g3
28+
# ASM-NEXT: sethi %hi(sym), %l0
29+
# ASM-NEXT: sethi %h44(sym), %l0
30+
# ASM-NEXT: or %g1, %m44(sym), %g3
31+
# ASM-NEXT: or %g1, %l44(sym), %g3
32+
# OBJDUMP: 0000000: R_SPARC_LO10 sym
33+
# OBJDUMP: 0000004: R_SPARC_HI22 sym
34+
# OBJDUMP: 0000008: R_SPARC_H44 sym
35+
# OBJDUMP: 000000c: R_SPARC_M44 sym
36+
# OBJDUMP: 0000010: R_SPARC_L44 sym
37+
or %g1, %lo(sym), %g3
38+
sethi %hi(sym), %l0
39+
sethi %h44(sym), %l0
40+
or %g1, %m44(sym), %g3
41+
or %g1, %l44(sym), %g3
42+
43+
# ASM: sethi %hh(sym), %l0
44+
# ASM-NEXT: sethi %hh(sym), %l0
45+
# ASM-NEXT: or %g1, %hm(sym), %g3
46+
# ASM-NEXT: or %g1, %hm(sym), %g3
47+
# ASM-NEXT: sethi %lm(sym), %l0
48+
# OBJDUMP: 0000014: R_SPARC_HH22 sym
49+
# OBJDUMP: 0000018: R_SPARC_HH22 sym
50+
# OBJDUMP: 000001c: R_SPARC_HM10 sym
51+
# OBJDUMP: 0000020: R_SPARC_HM10 sym
52+
# OBJDUMP: 0000024: R_SPARC_LM22 sym
53+
sethi %hh(sym), %l0
54+
sethi %uhi(sym), %l0
55+
or %g1, %hm(sym), %g3
56+
or %g1, %ulo(sym), %g3
57+
sethi %lm(sym), %l0
58+
59+
# ASM: sethi %hix(sym), %g1
60+
# ASM-NEXT: xor %g1, %lox(sym), %g1
61+
# ASM-NEXT: sethi %gdop_hix22(sym), %l1
62+
# ASM-NEXT: or %l1, %gdop_lox10(sym), %l1
63+
# ASM-NEXT: ldx [%l7+%l1], %l2, %gdop(sym)
64+
# OBJDUMP: R_SPARC_HIX22 sym
65+
# OBJDUMP: R_SPARC_LOX10 sym
66+
# OBJDUMP: R_SPARC_GOTDATA_HIX22 sym
67+
# OBJDUMP: R_SPARC_GOTDATA_LOX10 sym
68+
# OBJDUMP: R_SPARC_GOTDATA_OP sym
69+
sethi %hix(sym), %g1
70+
xor %g1, %lox(sym), %g1
71+
sethi %gdop_hix22(sym), %l1
72+
or %l1, %gdop_lox10(sym), %l1
73+
ldx [%l7 + %l1], %l2, %gdop(sym)
74+
75+
# OBJDUMP-LABEL: <.tls>:
76+
.section .tls,"ax"
77+
## Local Executable model:
78+
# ASM: sethi %tle_hix22(s_tle_hix22), %i0
79+
# ASM-NEXT: xor %i0, %tle_lox10(s_tle_lox10), %i0
80+
81+
# OBJDUMP: 31 00 00 00 sethi 0x0, %i0
82+
# OBJDUMP-NEXT: 00000000: R_SPARC_TLS_LE_HIX22 s_tle_hix22
83+
# OBJDUMP-NEXT: b0 1e 20 00 xor %i0, 0x0, %i0
84+
# OBJDUMP-NEXT: 00000004: R_SPARC_TLS_LE_LOX10 s_tle_lox10
85+
sethi %tle_hix22(s_tle_hix22), %i0
86+
xor %i0, %tle_lox10(s_tle_lox10), %i0
87+
88+
## Initial Executable model
89+
# ASM: sethi %tie_hi22(s_tie_hi22), %i1
90+
# ASM-NEXT: add %i1, %tie_lo10(s_tie_lo10), %i1
91+
# ASM-NEXT: ld [%i0+%i1], %i0, %tie_ld(s_tie_ld)
92+
# ASM-NEXT: ldx [%i0+%i1], %i0, %tie_ldx(s_tie_ldx)
93+
# ASM-NEXT: add %g7, %i0, %o0, %tie_add(s_tie_add)
94+
95+
# OBJDUMP: R_SPARC_TLS_IE_HI22 s_tie_hi22
96+
# OBJDUMP: R_SPARC_TLS_IE_LO10 s_tie_lo10
97+
# OBJDUMP: R_SPARC_TLS_IE_LD s_tie_ld
98+
# OBJDUMP: R_SPARC_TLS_IE_LDX s_tie_ldx
99+
# OBJDUMP: R_SPARC_TLS_IE_ADD s_tie_add
100+
sethi %tie_hi22(s_tie_hi22), %i1
101+
add %i1, %tie_lo10(s_tie_lo10), %i1
102+
ld [%i0+%i1], %i0, %tie_ld(s_tie_ld)
103+
ldx [%i0+%i1], %i0, %tie_ldx(s_tie_ldx)
104+
add %g7, %i0, %o0, %tie_add(s_tie_add)
105+
106+
## Local Dynamic model
107+
# ASM: sethi %tldo_hix22(s_tldo_hix22), %i1
108+
# ASM-NEXT: sethi %tldm_hi22(s_tldm_hi22), %i2
109+
# ASM-NEXT: add %i2, %tldm_lo10(s_tldm_lo10), %i2
110+
# ASM-NEXT: add %i0, %i2, %o0, %tldm_add(s_tldm_add)
111+
# ASM-NEXT: xor %i1, %tldo_lox10(s_tldo_lox10), %i0
112+
# ASM-NEXT: call __tls_get_addr, %tldm_call(s_tldm_call)
113+
# ASM-NEXT: nop
114+
# ASM-NEXT: add %o0, %i0, %o0, %tldo_add(s_tldo_add)
115+
116+
# OBJDUMP: R_SPARC_TLS_LDO_HIX22 s_tldo_hix22
117+
# OBJDUMP: R_SPARC_TLS_LDM_HI22 s_tldm_hi22
118+
# OBJDUMP: R_SPARC_TLS_LDM_LO10 s_tldm_lo10
119+
# OBJDUMP: R_SPARC_TLS_LDM_ADD s_tldm_add
120+
# OBJDUMP: R_SPARC_TLS_LDO_LOX10 s_tldo_lox10
121+
# OBJDUMP: R_SPARC_TLS_LDM_CALL s_tldm_call
122+
# OBJDUMP: R_SPARC_TLS_LDO_ADD s_tldo_add
123+
sethi %tldo_hix22(s_tldo_hix22), %i1
124+
sethi %tldm_hi22(s_tldm_hi22), %i2
125+
add %i2, %tldm_lo10(s_tldm_lo10), %i2
126+
add %i0, %i2, %o0, %tldm_add(s_tldm_add)
127+
xor %i1, %tldo_lox10(s_tldo_lox10), %i0
128+
call __tls_get_addr, %tldm_call(s_tldm_call)
129+
nop
130+
add %o0, %i0, %o0, %tldo_add(s_tldo_add)
131+
132+
## General Dynamic model
133+
# ASM: sethi %tgd_hi22(s_tgd_hi22), %i1
134+
# ASM-NEXT: add %i1, %tgd_lo10(s_tgd_lo10), %i1
135+
# ASM-NEXT: add %i0, %i1, %o0, %tgd_add(s_tgd_add)
136+
# ASM-NEXT: call __tls_get_addr, %tgd_call(s_tgd_call)
137+
138+
# OBJDUMP: R_SPARC_TLS_GD_HI22 s_tgd_hi22
139+
# OBJDUMP: R_SPARC_TLS_GD_LO10 s_tgd_lo10
140+
# OBJDUMP: R_SPARC_TLS_GD_ADD s_tgd_add
141+
# OBJDUMP: R_SPARC_TLS_GD_CALL s_tgd_call
142+
sethi %tgd_hi22(s_tgd_hi22), %i1
143+
add %i1, %tgd_lo10(s_tgd_lo10), %i1
144+
add %i0, %i1, %o0, %tgd_add(s_tgd_add)
145+
call __tls_get_addr, %tgd_call(s_tgd_call)
146+
147+
.type Local,@object
148+
.section .tbss,#alloc,#write,#tls
149+
s_tle_hix22:
150+
s_tldo_hix22:
151+
.word 0
152+
.size Local, 4

llvm/test/MC/Sparc/sparc-assembly-exprs.s

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
1-
! RUN: llvm-mc %s -triple=sparc -show-encoding | FileCheck %s
1+
! RUN: llvm-mc %s -triple=sparc | FileCheck %s
22
! RUN: llvm-mc %s -triple=sparc -filetype=obj | llvm-objdump -r -d - | FileCheck %s --check-prefix=OBJDUMP
33

4-
! CHECK: mov 1033, %o1 ! encoding: [0x92,0x10,0x24,0x09]
4+
! CHECK: mov 1033, %o1
55
mov (0x400|9), %o1
6-
! CHECK: mov 60, %o2 ! encoding: [0x94,0x10,0x20,0x3c]
6+
! CHECK: mov 60, %o2
77
mov ((12+3)<<2), %o2
88

9-
! CHECK: ba symStart+4 ! encoding: [0x10,0b10AAAAAA,A,A]
9+
! CHECK: ba symStart+4
1010
! OBJDUMP: ba 0x1
1111
symStart:
1212
b symStart + 4
1313

14-
! CHECK: mov symEnd-symStart, %g1 ! encoding: [0x82,0x10,0b001AAAAA,A]
14+
! CHECK: mov symEnd-symStart, %g1
1515
! OBJDUMP: mov 0x18, %g1
1616
mov symEnd - symStart, %g1
1717

18-
! CHECK: sethi %hi(sym+10), %g2 ! encoding: [0x05,0b00AAAAAA,A,A]
18+
! CHECK: sethi %hi(sym+10), %g2
1919
! OBJDUMP: R_SPARC_HI22 sym+0xa
2020
sethi %hi(sym + 10), %g2
2121

22-
! CHECK: call foo+40 ! encoding: [0b01AAAAAA,A,A,A]
22+
! CHECK: call foo+40
2323
! OBJDUMP: R_SPARC_WDISP30 foo+0x28
2424
call foo + 40
2525

26-
! CHECK: add %g1, val+100, %g1 ! encoding: [0x82,0x00,0b011AAAAA,A]
26+
! CHECK: add %g1, val+100, %g1
2727
! OBJDUMP: R_SPARC_13 val+0x64
2828
add %g1, val + 100, %g1
2929

30-
! CHECK: add %g1, 100+val, %g2 ! encoding: [0x84,0x00,0b011AAAAA,A]
30+
! CHECK: add %g1, 100+val, %g2
3131
! OBJDUMP: R_SPARC_13 val+0x64
3232
add %g1, 100 + val, %g2
3333
symEnd:

llvm/test/MC/Sparc/sparc-relocations.s

Lines changed: 4 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,23 @@
1-
! RUN: llvm-mc %s -triple=sparcv9 -show-encoding | FileCheck %s
1+
! RUN: llvm-mc %s -triple=sparcv9 | FileCheck %s
22
! RUN: llvm-mc %s -triple=sparcv9 -filetype=obj | llvm-readobj -r - | FileCheck %s --check-prefix=CHECK-OBJ
33

44
! CHECK-OBJ: Format: elf64-sparc
55
! CHECK-OBJ: .rela.text {
66
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_WDISP30 foo
7-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_LO10 sym
8-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HI22 sym
9-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_H44 sym
10-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_M44 sym
11-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_L44 sym
12-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HH22 sym
13-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HH22 sym
14-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HM10 sym
15-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HM10 sym
16-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_LM22 sym
177
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_13 sym
188
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_13 sym
19-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_HIX22 sym
20-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_LOX10 sym
21-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOTDATA_HIX22 sym
22-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOTDATA_LOX10 sym
23-
! CHECK-OBJ-NEXT: 0x{{[0-9,A-F]+}} R_SPARC_GOTDATA_OP sym
249
! CHECK-OBJ-NEXT: }
2510

2611
call a
27-
! CHECK: call foo ! encoding: [0b01AAAAAA,A,A,A]
12+
! CHECK: call foo
2813
call foo
2914

30-
! CHECK: or %g1, %lo(sym), %g3 ! encoding: [0x86,0x10,0b011000AA,A]
31-
or %g1, %lo(sym), %g3
32-
33-
! CHECK: sethi %hi(sym), %l0 ! encoding: [0x21,0b00AAAAAA,A,A]
34-
sethi %hi(sym), %l0
35-
36-
! CHECK: sethi %h44(sym), %l0 ! encoding: [0x21,0b00AAAAAA,A,A]
37-
sethi %h44(sym), %l0
38-
39-
! CHECK: or %g1, %m44(sym), %g3 ! encoding: [0x86,0x10,0b011000AA,A]
40-
or %g1, %m44(sym), %g3
41-
42-
! CHECK: or %g1, %l44(sym), %g3 ! encoding: [0x86,0x10,0b0110AAAA,A]
43-
or %g1, %l44(sym), %g3
44-
45-
! CHECK: sethi %hh(sym), %l0 ! encoding: [0x21,0b00AAAAAA,A,A]
46-
sethi %hh(sym), %l0
47-
48-
! CHECK: sethi %hh(sym), %l0 ! encoding: [0x21,0b00AAAAAA,A,A]
49-
sethi %uhi(sym), %l0
50-
51-
! CHECK: or %g1, %hm(sym), %g3 ! encoding: [0x86,0x10,0b011000AA,A]
52-
or %g1, %hm(sym), %g3
53-
54-
! CHECK: or %g1, %hm(sym), %g3 ! encoding: [0x86,0x10,0b011000AA,A]
55-
or %g1, %ulo(sym), %g3
56-
57-
! CHECK: sethi %lm(sym), %l0 ! encoding: [0x21,0b00AAAAAA,A,A]
58-
sethi %lm(sym), %l0
59-
60-
! CHECK: or %g1, sym, %g3 ! encoding: [0x86,0x10,0b011AAAAA,A]
15+
! CHECK: or %g1, sym, %g3
6116
or %g1, sym, %g3
6217

63-
! CHECK: or %g1, sym+4, %g3 ! encoding: [0x86,0x10,0b011AAAAA,A]
18+
! CHECK: or %g1, sym+4, %g3
6419
or %g1, (sym+4), %g3
6520

66-
! CHECK: sethi %hix(sym), %g1 ! encoding: [0x03,0b00AAAAAA,A,A]
67-
sethi %hix(sym), %g1
68-
69-
! CHECK: xor %g1, %lox(sym), %g1 ! encoding: [0x82,0x18,0b011AAAAA,A]
70-
xor %g1, %lox(sym), %g1
71-
72-
! CHECK: sethi %gdop_hix22(sym), %l1 ! encoding: [0x23,0x00,0x00,0x00]
73-
sethi %gdop_hix22(sym), %l1
74-
75-
! CHECK: or %l1, %gdop_lox10(sym), %l1 ! encoding: [0xa2,0x14,0x60,0x00]
76-
or %l1, %gdop_lox10(sym), %l1
77-
78-
! CHECK: ldx [%l7+%l1], %l2, %gdop(sym) ! encoding: [0xe4,0x5d,0xc0,0x11]
79-
ldx [%l7 + %l1], %l2, %gdop(sym)
80-
8121
! This test needs to placed last in the file
8222
! CHECK: .half a-.Ltmp0
8323
.half a - .

0 commit comments

Comments
 (0)