Add AArch64 as an experimental target.
[oota-llvm.git] / test / MC / AArch64 / tls-relocs.s
1 // RUN: llvm-mc -arch=aarch64 -show-encoding < %s | FileCheck %s
2 // RUN: llvm-mc -arch=aarch64 -filetype=obj < %s -o %t
3 // RUN: elf-dump %t | FileCheck --check-prefix=CHECK-ELF %s
4 // RUN: llvm-objdump -r %t | FileCheck --check-prefix=CHECK-ELF-NAMES %s
5
6 // CHECK-ELF:  .rela.text
7
8         // TLS local-dynamic forms
9         movz x1, #:dtprel_g2:var
10         movn x2, #:dtprel_g2:var
11         movz x3, #:dtprel_g2:var
12         movn x4, #:dtprel_g2:var
13 // CHECK: movz    x1, #:dtprel_g2:var     // encoding: [0x01'A',A,0xc0'A',0x92'A']
14 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2
15 // CHECK-NEXT: movn    x2, #:dtprel_g2:var     // encoding: [0x02'A',A,0xc0'A',0x92'A']
16 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2
17 // CHECK-NEXT: movz    x3, #:dtprel_g2:var     // encoding: [0x03'A',A,0xc0'A',0x92'A']
18 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2
19 // CHECK-NEXT: movn    x4, #:dtprel_g2:var     // encoding: [0x04'A',A,0xc0'A',0x92'A']
20 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g2:var, kind: fixup_a64_movw_dtprel_g2
21
22 // CHECK-ELF: # Relocation 0
23 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000000)
24 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM:0x[0-9a-f]+]])
25 // CHECK-ELF-NEXT:  ('r_type', 0x0000020b)
26 // CHECK-ELF: # Relocation 1
27 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000004)
28 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
29 // CHECK-ELF-NEXT:  ('r_type', 0x0000020b)
30 // CHECK-ELF: # Relocation 2
31 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000008)
32 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
33 // CHECK-ELF-NEXT:  ('r_type', 0x0000020b)
34 // CHECK-ELF: # Relocation 3
35 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000000c)
36 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
37 // CHECK-ELF-NEXT:  ('r_type', 0x0000020b)
38
39 // CHECK-ELF-NAMES: 0 R_AARCH64_TLSLD_MOVW_DTPREL_G2
40 // CHECK-ELF-NAMES: 4 R_AARCH64_TLSLD_MOVW_DTPREL_G2
41 // CHECK-ELF-NAMES: 8 R_AARCH64_TLSLD_MOVW_DTPREL_G2
42 // CHECK-ELF-NAMES: 12 R_AARCH64_TLSLD_MOVW_DTPREL_G2
43
44         movz x5, #:dtprel_g1:var
45         movn x6, #:dtprel_g1:var
46         movz w7, #:dtprel_g1:var
47         movn w8, #:dtprel_g1:var
48 // CHECK: movz    x5, #:dtprel_g1:var     // encoding: [0x05'A',A,0xa0'A',0x92'A']
49 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1
50 // CHECK-NEXT: movn    x6, #:dtprel_g1:var     // encoding: [0x06'A',A,0xa0'A',0x92'A']
51 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1
52 // CHECK-NEXT: movz    w7, #:dtprel_g1:var     // encoding: [0x07'A',A,0xa0'A',0x12'A']
53 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1
54 // CHECK-NEXT: movn    w8, #:dtprel_g1:var     // encoding: [0x08'A',A,0xa0'A',0x12'A']
55 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1:var, kind: fixup_a64_movw_dtprel_g1
56
57 // CHECK-ELF: # Relocation 4
58 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000010)
59 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
60 // CHECK-ELF-NEXT:  ('r_type', 0x0000020c)
61 // CHECK-ELF: # Relocation 5
62 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000014)
63 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
64 // CHECK-ELF-NEXT:  ('r_type', 0x0000020c)
65 // CHECK-ELF: # Relocation 6
66 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000018)
67 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
68 // CHECK-ELF-NEXT:  ('r_type', 0x0000020c)
69 // CHECK-ELF: # Relocation 7
70 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000001c)
71 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
72 // CHECK-ELF-NEXT:  ('r_type', 0x0000020c)
73
74 // CHECK-ELF-NAMES: 16 R_AARCH64_TLSLD_MOVW_DTPREL_G1
75 // CHECK-ELF-NAMES: 20 R_AARCH64_TLSLD_MOVW_DTPREL_G1
76 // CHECK-ELF-NAMES: 24 R_AARCH64_TLSLD_MOVW_DTPREL_G1
77 // CHECK-ELF-NAMES: 28 R_AARCH64_TLSLD_MOVW_DTPREL_G1
78
79         movk x9, #:dtprel_g1_nc:var
80         movk w10, #:dtprel_g1_nc:var
81 // CHECK: movk    x9, #:dtprel_g1_nc:var  // encoding: [0x09'A',A,0xa0'A',0xf2'A']
82 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1_nc:var, kind: fixup_a64_movw_dtprel_g1_nc
83 // CHECK-NEXT: movk    w10, #:dtprel_g1_nc:var // encoding: [0x0a'A',A,0xa0'A',0x72'A']
84 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g1_nc:var, kind: fixup_a64_movw_dtprel_g1_nc
85
86 // CHECK-ELF: # Relocation 8
87 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000020)
88 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
89 // CHECK-ELF-NEXT:  ('r_type', 0x0000020d)
90 // CHECK-ELF: # Relocation 9
91 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000024)
92 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
93 // CHECK-ELF-NEXT:  ('r_type', 0x0000020d)
94
95 // CHECK-ELF-NAMES: 32 R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC
96 // CHECK-ELF-NAMES: 36 R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC
97
98         movz x11, #:dtprel_g0:var
99         movn x12, #:dtprel_g0:var
100         movz w13, #:dtprel_g0:var
101         movn w14, #:dtprel_g0:var
102 // CHECK: movz    x11, #:dtprel_g0:var    // encoding: [0x0b'A',A,0x80'A',0x92'A']
103 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_a64_movw_dtprel_g0
104 // CHECK-NEXT: movn    x12, #:dtprel_g0:var    // encoding: [0x0c'A',A,0x80'A',0x92'A']
105 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_a64_movw_dtprel_g0
106 // CHECK-NEXT: movz    w13, #:dtprel_g0:var    // encoding: [0x0d'A',A,0x80'A',0x12'A']
107 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0:var, kind: fixup_a64_movw_dtprel_g0
108 // CHECK-NEXT: movn    w14, #:dtprel_g0:var    // encoding: [0x0e'A',A,0x80'A',0x12'A']
109
110
111 // CHECK-ELF: # Relocation 10
112 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000028)
113 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
114 // CHECK-ELF-NEXT:  ('r_type', 0x0000020e)
115 // CHECK-ELF: # Relocation 11
116 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000002c)
117 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
118 // CHECK-ELF-NEXT:  ('r_type', 0x0000020e)
119 // CHECK-ELF: # Relocation 12
120 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000030)
121 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
122 // CHECK-ELF-NEXT:  ('r_type', 0x0000020e)
123 // CHECK-ELF: # Relocation 13
124 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000034)
125 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
126 // CHECK-ELF-NEXT:  ('r_type', 0x0000020e)
127
128 // CHECK-ELF-NAMES: 40 R_AARCH64_TLSLD_MOVW_DTPREL_G0
129 // CHECK-ELF-NAMES: 44 R_AARCH64_TLSLD_MOVW_DTPREL_G0
130 // CHECK-ELF-NAMES: 48 R_AARCH64_TLSLD_MOVW_DTPREL_G0
131 // CHECK-ELF-NAMES: 52 R_AARCH64_TLSLD_MOVW_DTPREL_G0
132
133
134         movk x15, #:dtprel_g0_nc:var
135         movk w16, #:dtprel_g0_nc:var
136 // CHECK: movk    x15, #:dtprel_g0_nc:var // encoding: [0x0f'A',A,0x80'A',0xf2'A']
137 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0_nc:var, kind: fixup_a64_movw_dtprel_g0_nc
138 // CHECK-NEXT: movk    w16, #:dtprel_g0_nc:var // encoding: [0x10'A',A,0x80'A',0x72'A']
139 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_g0_nc:var, kind: fixup_a64_movw_dtprel_g0_nc
140
141 // CHECK-ELF: # Relocation 14
142 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000038)
143 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
144 // CHECK-ELF-NEXT:  ('r_type', 0x0000020f)
145 // CHECK-ELF: # Relocation 15
146 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000003c)
147 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
148 // CHECK-ELF-NEXT:  ('r_type', 0x0000020f)
149
150 // CHECK-ELF-NAMES: 56 R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC
151 // CHECK-ELF-NAMES: 60 R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC
152
153         add x17, x18, #:dtprel_hi12:var, lsl #12
154         add w19, w20, #:dtprel_hi12:var, lsl #12
155 // CHECK: add     x17, x18, #:dtprel_hi12:var, lsl #12 // encoding: [0x51'A',0x02'A',0x40'A',0x91'A']
156 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_hi12:var, kind: fixup_a64_add_dtprel_hi12
157 // CHECK-NEXT: add     w19, w20, #:dtprel_hi12:var, lsl #12 // encoding: [0x93'A',0x02'A',0x40'A',0x11'A']
158 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_hi12:var, kind: fixup_a64_add_dtprel_hi12
159
160 // CHECK-ELF: # Relocation 16
161 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000040)
162 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
163 // CHECK-ELF-NEXT:  ('r_type', 0x00000210)
164 // CHECK-ELF: # Relocation 17
165 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000044)
166 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
167 // CHECK-ELF-NEXT:  ('r_type', 0x00000210)
168
169 // CHECK-ELF-NAMES: 64 R_AARCH64_TLSLD_ADD_DTPREL_HI12
170 // CHECK-ELF-NAMES: 68 R_AARCH64_TLSLD_ADD_DTPREL_HI12
171
172
173         add x21, x22, #:dtprel_lo12:var
174         add w23, w24, #:dtprel_lo12:var
175 // CHECK: add     x21, x22, #:dtprel_lo12:var // encoding: [0xd5'A',0x02'A',A,0x91'A']
176 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_add_dtprel_lo12
177 // CHECK-NEXT: add     w23, w24, #:dtprel_lo12:var // encoding: [0x17'A',0x03'A',A,0x11'A']
178 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_add_dtprel_lo12
179
180 // CHECK-ELF: # Relocation 18
181 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000048)
182 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
183 // CHECK-ELF-NEXT:  ('r_type', 0x00000211)
184 // CHECK-ELF: # Relocation 19
185 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000004c)
186 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
187 // CHECK-ELF-NEXT:  ('r_type', 0x00000211)
188
189 // CHECK-ELF-NAMES: 72 R_AARCH64_TLSLD_ADD_DTPREL_LO12
190 // CHECK-ELF-NAMES: 76 R_AARCH64_TLSLD_ADD_DTPREL_LO12
191
192         add x25, x26, #:dtprel_lo12_nc:var
193         add w27, w28, #:dtprel_lo12_nc:var
194 // CHECK: add     x25, x26, #:dtprel_lo12_nc:var // encoding: [0x59'A',0x03'A',A,0x91'A']
195 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_add_dtprel_lo12_nc
196 // CHECK-NEXT: add     w27, w28, #:dtprel_lo12_nc:var // encoding: [0x9b'A',0x03'A',A,0x11'A']
197 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_add_dtprel_lo12_nc
198
199 // CHECK-ELF: # Relocation 20
200 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000050)
201 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
202 // CHECK-ELF-NEXT:  ('r_type', 0x00000212)
203 // CHECK-ELF: # Relocation 21
204 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000054)
205 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
206 // CHECK-ELF-NEXT:  ('r_type', 0x00000212)
207
208 // CHECK-ELF-NAMES: 80 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC
209 // CHECK-ELF-NAMES: 84 R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC
210
211         ldrb w29, [x30, #:dtprel_lo12:var]
212         ldrsb x29, [x28, #:dtprel_lo12_nc:var]
213 // CHECK: ldrb    w29, [x30, #:dtprel_lo12:var] // encoding: [0xdd'A',0x03'A',0x40'A',0x39'A']
214 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst8_dtprel_lo12
215 // CHECK-NEXT: ldrsb   x29, [x28, #:dtprel_lo12_nc:var] // encoding: [0x9d'A',0x03'A',0x80'A',0x39'A']
216 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst8_dtprel_lo12_nc
217
218 // CHECK-ELF: # Relocation 22
219 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000058)
220 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
221 // CHECK-ELF-NEXT:  ('r_type', 0x00000213)
222 // CHECK-ELF: # Relocation 23
223 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000005c)
224 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
225 // CHECK-ELF-NEXT:  ('r_type', 0x00000214)
226
227 // CHECK-ELF-NAMES: 88 R_AARCH64_TLSLD_LDST8_DTPREL_LO12
228 // CHECK-ELF-NAMES: 92 R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC
229
230         strh w27, [x26, #:dtprel_lo12:var]
231         ldrsh x25, [x24, #:dtprel_lo12_nc:var]
232 // CHECK: strh    w27, [x26, #:dtprel_lo12:var] // encoding: [0x5b'A',0x03'A',A,0x79'A']
233 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst16_dtprel_lo12
234 // CHECK-NEXT: ldrsh   x25, [x24, #:dtprel_lo12_nc:var] // encoding: [0x19'A',0x03'A',0x80'A',0x79'A']
235 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst16_dtprel_lo12_n
236
237 // CHECK-ELF: # Relocation 24
238 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000060)
239 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
240 // CHECK-ELF-NEXT:  ('r_type', 0x00000215)
241 // CHECK-ELF: # Relocation 25
242 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000064)
243 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
244 // CHECK-ELF-NEXT:  ('r_type', 0x00000216)
245
246 // CHECK-ELF-NAMES: 96 R_AARCH64_TLSLD_LDST16_DTPREL_LO12
247 // CHECK-ELF-NAMES: 100 R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC
248
249         ldr w23, [x22, #:dtprel_lo12:var]
250         ldrsw x21, [x20, #:dtprel_lo12_nc:var]
251 // CHECK: ldr     w23, [x22, #:dtprel_lo12:var] // encoding: [0xd7'A',0x02'A',0x40'A',0xb9'A']
252 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst32_dtprel_lo12
253 // CHECK-NEXT: ldrsw   x21, [x20, #:dtprel_lo12_nc:var] // encoding: [0x95'A',0x02'A',0x80'A',0xb9'A']
254 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst32_dtprel_lo12_n
255
256 // CHECK-ELF: # Relocation 26
257 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000068)
258 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
259 // CHECK-ELF-NEXT:  ('r_type', 0x00000217)
260 // CHECK-ELF: # Relocation 27
261 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000006c)
262 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
263 // CHECK-ELF-NEXT:  ('r_type', 0x00000218)
264
265 // CHECK-ELF-NAMES: 104 R_AARCH64_TLSLD_LDST32_DTPREL_LO12
266 // CHECK-ELF-NAMES: 108 R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC
267
268         ldr x19, [x18, #:dtprel_lo12:var]
269         str x17, [x16, #:dtprel_lo12_nc:var]
270 // CHECK: ldr     x19, [x18, #:dtprel_lo12:var] // encoding: [0x53'A',0x02'A',0x40'A',0xf9'A']
271 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12:var, kind: fixup_a64_ldst64_dtprel_lo12
272 // CHECK-NEXT: str     x17, [x16, #:dtprel_lo12_nc:var] // encoding: [0x11'A',0x02'A',A,0xf9'A']
273 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :dtprel_lo12_nc:var, kind: fixup_a64_ldst64_dtprel_lo12_nc
274
275
276 // CHECK-ELF: # Relocation 28
277 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000070)
278 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
279 // CHECK-ELF-NEXT:  ('r_type', 0x00000219)
280 // CHECK-ELF: # Relocation 29
281 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000074)
282 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
283 // CHECK-ELF-NEXT:  ('r_type', 0x0000021a)
284
285 // CHECK-ELF-NAMES: 112 R_AARCH64_TLSLD_LDST64_DTPREL_LO12
286 // CHECK-ELF-NAMES: 116 R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC
287
288         // TLS initial-exec forms
289         movz x15, #:gottprel_g1:var
290         movz w14, #:gottprel_g1:var
291 // CHECK: movz    x15, #:gottprel_g1:var  // encoding: [0x0f'A',A,0xa0'A',0x92'A']
292 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_g1:var, kind: fixup_a64_movw_gottprel_g1
293 // CHECK-NEXT: movz    w14, #:gottprel_g1:var  // encoding: [0x0e'A',A,0xa0'A',0x12'A']
294 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_g1:var, kind: fixup_a64_movw_gottprel_g1
295
296 // CHECK-ELF: # Relocation 30
297 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000078)
298 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
299 // CHECK-ELF-NEXT:  ('r_type', 0x0000021b)
300 // CHECK-ELF: # Relocation 31
301 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000007c)
302 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
303 // CHECK-ELF-NEXT:  ('r_type', 0x0000021b)
304
305 // CHECK-ELF-NAMES: 120 R_AARCH64_TLSIE_MOVW_GOTTPREL_G1
306 // CHECK-ELF-NAMES: 124 R_AARCH64_TLSIE_MOVW_GOTTPREL_G1
307
308         movk x13, #:gottprel_g0_nc:var
309         movk w12, #:gottprel_g0_nc:var
310 // CHECK: movk    x13, #:gottprel_g0_nc:var // encoding: [0x0d'A',A,0x80'A',0xf2'A']
311 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_g0_nc:var, kind: fixup_a64_movw_gottprel_g0_nc
312 // CHECK-NEXT: movk    w12, #:gottprel_g0_nc:var // encoding: [0x0c'A',A,0x80'A',0x72'A']
313 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_g0_nc:var, kind: fixup_a64_movw_gottprel_g0_nc
314
315 // CHECK-ELF: # Relocation 32
316 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000080)
317 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
318 // CHECK-ELF-NEXT:  ('r_type', 0x0000021c)
319 // CHECK-ELF: # Relocation 33
320 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000084)
321 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
322 // CHECK-ELF-NEXT:  ('r_type', 0x0000021c)
323
324 // CHECK-ELF-NAMES: 128 R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC
325 // CHECK-ELF-NAMES: 132 R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC
326
327         adrp x11, :gottprel:var
328         ldr x10, [x0, #:gottprel_lo12:var]
329         ldr x9, :gottprel:var
330 // CHECK: adrp    x11, :gottprel:var      // encoding: [0x0b'A',A,A,0x90'A']
331 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel:var, kind: fixup_a64_adr_gottprel_page
332 // CHECK-NEXT: ldr     x10, [x0, #:gottprel_lo12:var] // encoding: [0x0a'A',A,0x40'A',0xf9'A']
333 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel_lo12:var, kind: fixup_a64_ld64_gottprel_lo12_nc
334 // CHECK-NEXT: ldr     x9, :gottprel:var       // encoding: [0x09'A',A,A,0x58'A']
335 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :gottprel:var, kind: fixup_a64_ld_gottprel_prel19
336
337 // CHECK-ELF: # Relocation 34
338 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000088)
339 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
340 // CHECK-ELF-NEXT:  ('r_type', 0x0000021d)
341 // CHECK-ELF: # Relocation 35
342 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000008c)
343 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
344 // CHECK-ELF-NEXT:  ('r_type', 0x0000021e)
345 // CHECK-ELF: # Relocation 36
346 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000090)
347 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
348 // CHECK-ELF-NEXT:  ('r_type', 0x0000021f)
349
350 // CHECK-ELF-NAMES: 136 R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE
351 // CHECK-ELF-NAMES: 140 R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC
352 // CHECK-ELF-NAMES: 144 R_AARCH64_TLSIE_LD_GOTTPREL_PREL19
353
354         // TLS local-exec forms
355         movz x3, #:tprel_g2:var
356         movn x4, #:tprel_g2:var
357 // CHECK: movz    x3, #:tprel_g2:var      // encoding: [0x03'A',A,0xc0'A',0x92'A']
358 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g2:var, kind: fixup_a64_movw_tprel_g2
359 // CHECK-NEXT: movn    x4, #:tprel_g2:var      // encoding: [0x04'A',A,0xc0'A',0x92'A']
360 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g2:var, kind: fixup_a64_movw_tprel_g2
361
362 // CHECK-ELF: # Relocation 37
363 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000094)
364 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
365 // CHECK-ELF-NEXT:  ('r_type', 0x00000220)
366 // CHECK-ELF: # Relocation 38
367 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000098)
368 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
369 // CHECK-ELF-NEXT:  ('r_type', 0x00000220)
370
371 // CHECK-ELF-NAMES: 148 R_AARCH64_TLSLE_MOVW_TPREL_G2
372 // CHECK-ELF-NAMES: 152 R_AARCH64_TLSLE_MOVW_TPREL_G2
373
374         movz x5, #:tprel_g1:var
375         movn x6, #:tprel_g1:var
376         movz w7, #:tprel_g1:var
377         movn w8, #:tprel_g1:var
378 // CHECK: movz    x5, #:tprel_g1:var      // encoding: [0x05'A',A,0xa0'A',0x92'A']
379 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1
380 // CHECK-NEXT: movn    x6, #:tprel_g1:var      // encoding: [0x06'A',A,0xa0'A',0x92'A']
381 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1
382 // CHECK-NEXT: movz    w7, #:tprel_g1:var      // encoding: [0x07'A',A,0xa0'A',0x12'A']
383 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1
384 // CHECK-NEXT: movn    w8, #:tprel_g1:var      // encoding: [0x08'A',A,0xa0'A',0x12'A']
385 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1:var, kind: fixup_a64_movw_tprel_g1
386
387 // CHECK-ELF: # Relocation 39
388 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000009c)
389 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
390 // CHECK-ELF-NEXT:  ('r_type', 0x00000221)
391 // CHECK-ELF: # Relocation 40
392 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000a0)
393 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
394 // CHECK-ELF-NEXT:  ('r_type', 0x00000221)
395 // CHECK-ELF: # Relocation 41
396 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000a4)
397 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
398 // CHECK-ELF-NEXT:  ('r_type', 0x00000221)
399 // CHECK-ELF: # Relocation 42
400 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000a8)
401 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
402 // CHECK-ELF-NEXT:  ('r_type', 0x00000221)
403
404 // CHECK-ELF-NAMES: 156 R_AARCH64_TLSLE_MOVW_TPREL_G1
405 // CHECK-ELF-NAMES: 160 R_AARCH64_TLSLE_MOVW_TPREL_G1
406 // CHECK-ELF-NAMES: 164 R_AARCH64_TLSLE_MOVW_TPREL_G1
407 // CHECK-ELF-NAMES: 168 R_AARCH64_TLSLE_MOVW_TPREL_G1
408
409         movk x9, #:tprel_g1_nc:var
410         movk w10, #:tprel_g1_nc:var
411 // CHECK: movk    x9, #:tprel_g1_nc:var   // encoding: [0x09'A',A,0xa0'A',0xf2'A']
412 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1_nc:var, kind: fixup_a64_movw_tprel_g1_nc
413 // CHECK-NEXT: movk    w10, #:tprel_g1_nc:var  // encoding: [0x0a'A',A,0xa0'A',0x72'A']
414 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g1_nc:var, kind: fixup_a64_movw_tprel_g1_nc
415
416 // CHECK-ELF: # Relocation 43
417 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000ac)
418 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
419 // CHECK-ELF-NEXT:  ('r_type', 0x00000222)
420 // CHECK-ELF: # Relocation 44
421 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000b0)
422 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
423 // CHECK-ELF-NEXT:  ('r_type', 0x00000222)
424
425 // CHECK-ELF-NAMES: 172 R_AARCH64_TLSLE_MOVW_TPREL_G1_NC
426 // CHECK-ELF-NAMES: 176 R_AARCH64_TLSLE_MOVW_TPREL_G1_NC
427
428         movz x11, #:tprel_g0:var
429         movn x12, #:tprel_g0:var
430         movz w13, #:tprel_g0:var
431         movn w14, #:tprel_g0:var
432 // CHECK: movz    x11, #:tprel_g0:var     // encoding: [0x0b'A',A,0x80'A',0x92'A']
433 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0
434 // CHECK-NEXT: movn    x12, #:tprel_g0:var     // encoding: [0x0c'A',A,0x80'A',0x92'A']
435 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0
436 // CHECK-NEXT: movz    w13, #:tprel_g0:var     // encoding: [0x0d'A',A,0x80'A',0x12'A']
437 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0
438 // CHECK-NEXT: movn    w14, #:tprel_g0:var     // encoding: [0x0e'A',A,0x80'A',0x12'A']
439 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0:var, kind: fixup_a64_movw_tprel_g0
440
441 // CHECK-ELF: # Relocation 45
442 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000b4)
443 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
444 // CHECK-ELF-NEXT:  ('r_type', 0x00000223)
445 // CHECK-ELF: # Relocation 46
446 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000b8)
447 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
448 // CHECK-ELF-NEXT:  ('r_type', 0x00000223)
449 // CHECK-ELF: # Relocation 47
450 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000bc)
451 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
452 // CHECK-ELF-NEXT:  ('r_type', 0x00000223)
453 // CHECK-ELF: # Relocation 48
454 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000c0)
455 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
456 // CHECK-ELF-NEXT:  ('r_type', 0x00000223)
457
458 // CHECK-ELF-NAMES: 180 R_AARCH64_TLSLE_MOVW_TPREL_G0
459 // CHECK-ELF-NAMES: 184 R_AARCH64_TLSLE_MOVW_TPREL_G0
460 // CHECK-ELF-NAMES: 188 R_AARCH64_TLSLE_MOVW_TPREL_G0
461 // CHECK-ELF-NAMES: 192 R_AARCH64_TLSLE_MOVW_TPREL_G0
462
463         movk x15, #:tprel_g0_nc:var
464         movk w16, #:tprel_g0_nc:var
465 // CHECK: movk    x15, #:tprel_g0_nc:var  // encoding: [0x0f'A',A,0x80'A',0xf2'A']
466 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0_nc:var, kind: fixup_a64_movw_tprel_g0_nc
467 // CHECK-NEXT: movk    w16, #:tprel_g0_nc:var  // encoding: [0x10'A',A,0x80'A',0x72'A']
468 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_g0_nc:var, kind: fixup_a64_movw_tprel_g0_nc
469
470 // CHECK-ELF: # Relocation 49
471 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000c4)
472 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
473 // CHECK-ELF-NEXT:  ('r_type', 0x00000224)
474 // CHECK-ELF: # Relocation 50
475 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000c8)
476 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
477 // CHECK-ELF-NEXT:  ('r_type', 0x00000224)
478
479 // CHECK-ELF-NAMES: 196 R_AARCH64_TLSLE_MOVW_TPREL_G0_NC
480 // CHECK-ELF-NAMES: 200 R_AARCH64_TLSLE_MOVW_TPREL_G0_NC
481
482         add x17, x18, #:tprel_hi12:var, lsl #12
483         add w19, w20, #:tprel_hi12:var, lsl #12
484 // CHECK: add     x17, x18, #:tprel_hi12:var, lsl #12 // encoding: [0x51'A',0x02'A',0x40'A',0x91'A']
485 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_hi12:var, kind: fixup_a64_add_tprel_hi12
486 // CHECK-NEXT: add     w19, w20, #:tprel_hi12:var, lsl #12 // encoding: [0x93'A',0x02'A',0x40'A',0x11'A']
487 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_hi12:var, kind: fixup_a64_add_tprel_hi12
488
489 // CHECK-ELF: # Relocation 51
490 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000cc)
491 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
492 // CHECK-ELF-NEXT:  ('r_type', 0x00000225)
493 // CHECK-ELF: # Relocation 52
494 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000d0)
495 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
496 // CHECK-ELF-NEXT:  ('r_type', 0x00000225)
497
498 // CHECK-ELF-NAMES: 204 R_AARCH64_TLSLE_ADD_TPREL_HI12
499 // CHECK-ELF-NAMES: 208 R_AARCH64_TLSLE_ADD_TPREL_HI12
500
501         add x21, x22, #:tprel_lo12:var
502         add w23, w24, #:tprel_lo12:var
503 // CHECK: add     x21, x22, #:tprel_lo12:var // encoding: [0xd5'A',0x02'A',A,0x91'A']
504 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_add_tprel_lo12
505 // CHECK-NEXT: add     w23, w24, #:tprel_lo12:var // encoding: [0x17'A',0x03'A',A,0x11'A']
506 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_add_tprel_lo12
507
508 // CHECK-ELF: # Relocation 53
509 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000d4)
510 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
511 // CHECK-ELF-NEXT:  ('r_type', 0x00000226)
512 // CHECK-ELF: # Relocation 54
513 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000d8)
514 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
515 // CHECK-ELF-NEXT:  ('r_type', 0x00000226)
516
517 // CHECK-ELF-NAMES: 212 R_AARCH64_TLSLE_ADD_TPREL_LO12
518 // CHECK-ELF-NAMES: 216 R_AARCH64_TLSLE_ADD_TPREL_LO12
519
520         add x25, x26, #:tprel_lo12_nc:var
521         add w27, w28, #:tprel_lo12_nc:var
522 // CHECK: add     x25, x26, #:tprel_lo12_nc:var // encoding: [0x59'A',0x03'A',A,0x91'A']
523 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_add_tprel_lo12_nc
524 // CHECK-NEXT: add     w27, w28, #:tprel_lo12_nc:var // encoding: [0x9b'A',0x03'A',A,0x11'A']
525 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_add_tprel_lo12_nc
526
527 // CHECK-ELF: # Relocation 55
528 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000dc)
529 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
530 // CHECK-ELF-NEXT:  ('r_type', 0x00000227)
531 // CHECK-ELF: # Relocation 56
532 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000e0)
533 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
534 // CHECK-ELF-NEXT:  ('r_type', 0x00000227)
535
536
537 // CHECK-ELF-NAMES: 220 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC
538 // CHECK-ELF-NAMES: 224 R_AARCH64_TLSLE_ADD_TPREL_LO12_NC
539
540         ldrb w29, [x30, #:tprel_lo12:var]
541         ldrsb x29, [x28, #:tprel_lo12_nc:var]
542 // CHECK: ldrb    w29, [x30, #:tprel_lo12:var] // encoding: [0xdd'A',0x03'A',0x40'A',0x39'A']
543 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst8_tprel_lo12
544 // CHECK-NEXT: ldrsb   x29, [x28, #:tprel_lo12_nc:var] // encoding: [0x9d'A',0x03'A',0x80'A',0x39'A']
545 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst8_tprel_lo12_nc
546
547 // CHECK-ELF: # Relocation 57
548 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000e4)
549 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
550 // CHECK-ELF-NEXT:  ('r_type', 0x00000228)
551 // CHECK-ELF: # Relocation 58
552 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000e8)
553 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
554 // CHECK-ELF-NEXT:  ('r_type', 0x00000229)
555
556 // CHECK-ELF-NAMES: 228 R_AARCH64_TLSLE_LDST8_TPREL_LO12
557 // CHECK-ELF-NAMES: 232 R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC
558
559         strh w27, [x26, #:tprel_lo12:var]
560         ldrsh x25, [x24, #:tprel_lo12_nc:var]
561 // CHECK: strh    w27, [x26, #:tprel_lo12:var] // encoding: [0x5b'A',0x03'A',A,0x79'A']
562 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst16_tprel_lo12
563 // CHECK-NEXT: ldrsh   x25, [x24, #:tprel_lo12_nc:var] // encoding: [0x19'A',0x03'A',0x80'A',0x79'A']
564 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst16_tprel_lo12_n
565
566 // CHECK-ELF: # Relocation 59
567 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000ec)
568 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
569 // CHECK-ELF-NEXT:  ('r_type', 0x0000022a)
570 // CHECK-ELF: # Relocation 60
571 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000f0)
572 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
573 // CHECK-ELF-NEXT:  ('r_type', 0x0000022b)
574
575 // CHECK-ELF-NAMES: 236 R_AARCH64_TLSLE_LDST16_TPREL_LO12
576 // CHECK-ELF-NAMES: 240 R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC
577
578         ldr w23, [x22, #:tprel_lo12:var]
579         ldrsw x21, [x20, #:tprel_lo12_nc:var]
580 // CHECK: ldr     w23, [x22, #:tprel_lo12:var] // encoding: [0xd7'A',0x02'A',0x40'A',0xb9'A']
581 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst32_tprel_lo12
582 // CHECK-NEXT: ldrsw   x21, [x20, #:tprel_lo12_nc:var] // encoding: [0x95'A',0x02'A',0x80'A',0xb9'A']
583 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst32_tprel_lo12_n
584
585 // CHECK-ELF: # Relocation 61
586 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000f4)
587 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
588 // CHECK-ELF-NEXT:  ('r_type', 0x0000022c)
589 // CHECK-ELF: # Relocation 62
590 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000f8)
591 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
592 // CHECK-ELF-NEXT:  ('r_type', 0x0000022d)
593
594 // CHECK-ELF-NAMES: 244 R_AARCH64_TLSLE_LDST32_TPREL_LO12
595 // CHECK-ELF-NAMES: 248 R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC
596
597         ldr x19, [x18, #:tprel_lo12:var]
598         str x17, [x16, #:tprel_lo12_nc:var]
599 // CHECK: ldr     x19, [x18, #:tprel_lo12:var] // encoding: [0x53'A',0x02'A',0x40'A',0xf9'A']
600 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12:var, kind: fixup_a64_ldst64_tprel_lo12
601 // CHECK-NEXT: str     x17, [x16, #:tprel_lo12_nc:var] // encoding: [0x11'A',0x02'A',A,0xf9'A']
602 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tprel_lo12_nc:var, kind: fixup_a64_ldst64_tprel_lo12_nc
603
604 // CHECK-ELF: # Relocation 63
605 // CHECK-ELF-NEXT: (('r_offset', 0x00000000000000fc)
606 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
607 // CHECK-ELF-NEXT:  ('r_type', 0x0000022e)
608 // CHECK-ELF: # Relocation 64
609 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000100)
610 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
611 // CHECK-ELF-NEXT:  ('r_type', 0x0000022f)
612
613 // CHECK-ELF-NAMES: 252 R_AARCH64_TLSLE_LDST64_TPREL_LO12
614 // CHECK-ELF-NAMES: 256 R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC
615
616         // TLS descriptor forms
617         adrp x8, :tlsdesc:var
618         ldr x7, [x6, :tlsdesc_lo12:var]
619         add x5, x4, #:tlsdesc_lo12:var
620         .tlsdesccall var
621         blr x3
622
623 // CHECK: adrp    x8, :tlsdesc:var        // encoding: [0x08'A',A,A,0x90'A']
624 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc:var, kind: fixup_a64_tlsdesc_adr_page
625 // CHECK-NEXT: ldr     x7, [x6, #:tlsdesc_lo12:var] // encoding: [0xc7'A',A,0x40'A',0xf9'A']
626 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc_lo12:var, kind: fixup_a64_tlsdesc_ld64_lo12_nc
627 // CHECK-NEXT: add     x5, x4, #:tlsdesc_lo12:var // encoding: [0x85'A',A,A,0x91'A']
628 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc_lo12:var, kind: fixup_a64_tlsdesc_add_lo12_nc
629 // CHECK-NEXT: .tlsdesccall var                // encoding: []
630 // CHECK-NEXT:                                 //   fixup A - offset: 0, value: :tlsdesc:var, kind: fixup_a64_tlsdesc_call
631 // CHECK: blr     x3                      // encoding: [0x60,0x00,0x3f,0xd6]
632
633
634 // CHECK-ELF: # Relocation 65
635 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000104)
636 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
637 // CHECK-ELF-NEXT:  ('r_type', 0x00000232)
638 // CHECK-ELF: # Relocation 66
639 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000108)
640 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
641 // CHECK-ELF-NEXT:  ('r_type', 0x00000233)
642 // CHECK-ELF: # Relocation 67
643 // CHECK-ELF-NEXT: (('r_offset', 0x000000000000010c)
644 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
645 // CHECK-ELF-NEXT:  ('r_type', 0x00000234)
646 // CHECK-ELF: # Relocation 68
647 // CHECK-ELF-NEXT: (('r_offset', 0x0000000000000110)
648 // CHECK-ELF-NEXT:  ('r_sym', [[VARSYM]])
649 // CHECK-ELF-NEXT:  ('r_type', 0x00000239)
650
651 // CHECK-ELF-NAMES: 260 R_AARCH64_TLSDESC_ADR_PAGE
652 // CHECK-ELF-NAMES: 264 R_AARCH64_TLSDESC_LD64_LO12_NC
653 // CHECK-ELF-NAMES: 268 R_AARCH64_TLSDESC_ADD_LO12_NC
654 // CHECK-ELF-NAMES: 272 R_AARCH64_TLSDESC_CALL
655
656
657 // Make sure symbol 5 has type STT_TLS:
658
659 // CHECK-ELF: # Symbol 5
660 // CHECK-ELF-NEXT: (('st_name', 0x00000006) # 'var'
661 // CHECK-ELF-NEXT:  ('st_bind', 0x1)
662 // CHECK-ELF-NEXT:  ('st_type', 0x6)