1 // RUN
: llvm-mc
-triple
=arm64-none-linux-gnu
-show-encoding
< %s | FileCheck
%s
2 // RUN
: llvm-mc
-triple
=arm64-none-linux-gnu
-filetype
=obj
< %s
-o
- | \
3 // RUN
: llvm-readobj
-r
--symbols | FileCheck
--check-prefix
=CHECK-ELF
%s
5 ////////////////////////////////////////////////////////////////////////////////
6 // TLS initial-exec forms
7 ////////////////////////////////////////////////////////////////////////////////
9 movz x15
, #:gottprel_g1:var
10 // CHECK
: movz x15
, #:gottprel_g1:var // encoding: [0bAAA01111,A,0b101AAAAA,0x92]
11 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :gottprel_g1
:var
, kind
: fixup_aarch64_movw
13 // CHECK-ELF
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSIE_MOVW_GOTTPREL_G1
[[VARSYM
:[^
]+]]
16 movk x13
, #:gottprel_g0_nc:var
17 // CHECK
: movk x13
, #:gottprel_g0_nc:var // encoding: [0bAAA01101,A,0b100AAAAA,0xf2]
18 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :gottprel_g0_nc
:var
, kind
: fixup_aarch64_movw
21 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSIE_MOVW_GOTTPREL_G0_NC
[[VARSYM
]]
23 adrp x11
, :gottprel
:var
24 ldr x10
, [x0
, #:gottprel_lo12:var]
26 // CHECK
: adrp x11
, :gottprel
:var
// encoding
: [0x0b'A',A,A,0x90'A']
27 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :gottprel
:var
, kind
: fixup_aarch64_pcrel_adrp_imm21
28 // CHECK
: ldr x10
, [x0
, :gottprel_lo12
:var
] // encoding
: [0x0a,0bAAAAAA00
,0b01AAAAAA
,0xf9]
29 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :gottprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale8
30 // CHECK
: ldr x9
, :gottprel
:var
// encoding
: [0bAAA01001
,A,A,0x58]
31 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :gottprel
:var
, kind
: fixup_aarch64_ldr_pcrel_imm19
33 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSIE_ADR_GOTTPREL_PAGE21
[[VARSYM
]]
34 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSIE_LD64_GOTTPREL_LO12_NC
[[VARSYM
]]
35 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSIE_LD_GOTTPREL_PREL19
[[VARSYM
]]
38 ////////////////////////////////////////////////////////////////////////////////
39 // TLS local-exec forms
40 ////////////////////////////////////////////////////////////////////////////////
42 movz x3
, #:tprel_g2:var
43 movn x4
, #:tprel_g2:var
44 // CHECK
: movz x3
, #:tprel_g2:var // encoding: [0bAAA00011,A,0b110AAAAA,0x92]
45 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g2
:var
, kind
: fixup_aarch64_movw
46 // CHECK
: movn x4
, #:tprel_g2:var // encoding: [0bAAA00100,A,0b110AAAAA,0x92]
47 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g2
:var
, kind
: fixup_aarch64_movw
49 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G2
[[VARSYM
]]
50 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G2
[[VARSYM
]]
53 movz x5
, #:tprel_g1:var
54 movn x6
, #:tprel_g1:var
55 movz w7
, #:tprel_g1:var
56 // CHECK
: movz x5
, #:tprel_g1:var // encoding: [0bAAA00101,A,0b101AAAAA,0x92]
57 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g1
:var
, kind
: fixup_aarch64_movw
58 // CHECK
: movn x6
, #:tprel_g1:var // encoding: [0bAAA00110,A,0b101AAAAA,0x92]
59 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g1
:var
, kind
: fixup_aarch64_movw
60 // CHECK
: movz w7
, #:tprel_g1:var // encoding: [0bAAA00111,A,0b101AAAAA,0x12]
61 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g1
:var
, kind
: fixup_aarch64_movw
63 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1
[[VARSYM
]]
64 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1
[[VARSYM
]]
65 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1
[[VARSYM
]]
68 movk x9
, #:tprel_g1_nc:var
69 movk w10
, #:tprel_g1_nc:var
70 // CHECK
: movk x9
, #:tprel_g1_nc:var // encoding: [0bAAA01001,A,0b101AAAAA,0xf2]
71 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g1_nc
:var
, kind
: fixup_aarch64_movw
72 // CHECK
: movk w10
, #:tprel_g1_nc:var // encoding: [0bAAA01010,A,0b101AAAAA,0x72]
73 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g1_nc
:var
, kind
: fixup_aarch64_movw
75 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1_NC
[[VARSYM
]]
76 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G1_NC
[[VARSYM
]]
79 movz x11
, #:tprel_g0:var
80 movn x12
, #:tprel_g0:var
81 movz w13
, #:tprel_g0:var
82 // CHECK
: movz x11
, #:tprel_g0:var // encoding: [0bAAA01011,A,0b100AAAAA,0x92]
83 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g0
:var
, kind
: fixup_aarch64_movw
84 // CHECK
: movn x12
, #:tprel_g0:var // encoding: [0bAAA01100,A,0b100AAAAA,0x92]
85 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g0
:var
, kind
: fixup_aarch64_movw
86 // CHECK
: movz w13
, #:tprel_g0:var // encoding: [0bAAA01101,A,0b100AAAAA,0x12]
87 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g0
:var
, kind
: fixup_aarch64_movw
89 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0
[[VARSYM
]]
90 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0
[[VARSYM
]]
91 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0
[[VARSYM
]]
94 movk x15
, #:tprel_g0_nc:var
95 movk w16
, #:tprel_g0_nc:var
96 // CHECK
: movk x15
, #:tprel_g0_nc:var // encoding: [0bAAA01111,A,0b100AAAAA,0xf2]
97 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g0_nc
:var
, kind
: fixup_aarch64_movw
98 // CHECK
: movk w16
, #:tprel_g0_nc:var // encoding: [0bAAA10000,A,0b100AAAAA,0x72]
99 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_g0_nc
:var
, kind
: fixup_aarch64_movw
101 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0_NC
[[VARSYM
]]
102 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_MOVW_TPREL_G0_NC
[[VARSYM
]]
105 add x21
, x22
, #:tprel_lo12:var
106 // CHECK
: add x21
, x22
, :tprel_lo12
:var
// encoding
: [0xd5,0bAAAAAA10
,0b00AAAAAA
,0x91]
107 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12
:var
, kind
: fixup_aarch64_add_imm12
109 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_ADD_TPREL_LO12
[[VARSYM
]]
112 add x25
, x26
, #:tprel_lo12_nc:var
113 // CHECK
: add x25
, x26
, :tprel_lo12_nc
:var
// encoding
: [0x59,0bAAAAAA11
,0b00AAAAAA
,0x91]
114 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12_nc
:var
, kind
: fixup_aarch64_add_imm12
116 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_ADD_TPREL_LO12_NC
[[VARSYM
]]
119 ldrb w29
, [x30
, #:tprel_lo12:var]
120 ldrsb x29
, [x28
, #:tprel_lo12_nc:var]
121 // CHECK
: ldrb w29
, [x30
, :tprel_lo12
:var
] // encoding
: [0xdd,0bAAAAAA11
,0b01AAAAAA
,0x39]
122 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale1
123 // CHECK
: ldrsb x29
, [x28
, :tprel_lo12_nc
:var
] // encoding
: [0x9d,0bAAAAAA11
,0b10AAAAAA
,0x39]
124 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12_nc
:var
, kind
: fixup_aarch64_ldst_imm12_scale1
126 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_LDST8_TPREL_LO12
[[VARSYM
]]
127 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_LDST8_TPREL_LO12_NC
[[VARSYM
]]
130 strh w27
, [x26
, #:tprel_lo12:var]
131 ldrsh x25
, [x24
, #:tprel_lo12_nc:var]
132 // CHECK
: strh w27
, [x26
, :tprel_lo12
:var
] // encoding
: [0x5b,0bAAAAAA11
,0b00AAAAAA
,0x79]
133 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale2
134 // CHECK
: ldrsh x25
, [x24
, :tprel_lo12_nc
:var
] // encoding
: [0x19,0bAAAAAA11
,0b10AAAAAA
,0x79]
135 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12_nc
:var
, kind
: fixup_aarch64_ldst_imm12_scale2
137 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_LDST16_TPREL_LO12
[[VARSYM
]]
138 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_LDST16_TPREL_LO12_NC
[[VARSYM
]]
141 ldr w23
, [x22
, #:tprel_lo12:var]
142 ldrsw x21
, [x20
, #:tprel_lo12_nc:var]
143 // CHECK
: ldr w23
, [x22
, :tprel_lo12
:var
] // encoding
: [0xd7,0bAAAAAA10
,0b01AAAAAA
,0xb9]
144 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale4
145 // CHECK
: ldrsw x21
, [x20
, :tprel_lo12_nc
:var
] // encoding
: [0x95,0bAAAAAA10
,0b10AAAAAA
,0xb9]
146 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12_nc
:var
, kind
: fixup_aarch64_ldst_imm12_scale4
148 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_LDST32_TPREL_LO12
[[VARSYM
]]
149 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_LDST32_TPREL_LO12_NC
[[VARSYM
]]
151 ldr x19
, [x18
, #:tprel_lo12:var]
152 str x17
, [x16
, #:tprel_lo12_nc:var]
153 // CHECK
: ldr x19
, [x18
, :tprel_lo12
:var
] // encoding
: [0x53,0bAAAAAA10
,0b01AAAAAA
,0xf9]
154 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale8
155 // CHECK
: str x17
, [x16
, :tprel_lo12_nc
:var
] // encoding
: [0x11,0bAAAAAA10
,0b00AAAAAA
,0xf9]
156 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12_nc
:var
, kind
: fixup_aarch64_ldst_imm12_scale8
158 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_LDST64_TPREL_LO12
[[VARSYM
]]
159 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_LDST64_TPREL_LO12_NC
[[VARSYM
]]
161 ldr q24
, [x23
, :tprel_lo12
:var
]
162 str q22
, [x21
, :tprel_lo12_nc
:var
]
163 // CHECK
: ldr q24
, [x23
, :tprel_lo12
:var
] // encoding
: [0xf8,0bAAAAAA10
,0b11AAAAAA
,0x3d]
164 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale16
165 // CHECK
: str q22
, [x21
, :tprel_lo12_nc
:var
] // encoding
: [0xb6,0bAAAAAA10
,0b10AAAAAA
,0x3d]
166 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tprel_lo12_nc
:var
, kind
: fixup_aarch64_ldst_imm12_scale16
168 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_LDST128_TPREL_LO12
[[VARSYM
]]
169 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLE_LDST128_TPREL_LO12_NC
[[VARSYM
]]
171 ////////////////////////////////////////////////////////////////////////////////
172 // TLS local-dynamic forms
173 ////////////////////////////////////////////////////////////////////////////////
175 movz x3
, #:dtprel_g2:var
176 movn x4
, #:dtprel_g2:var
177 // CHECK
: movz x3
, #:dtprel_g2:var // encoding: [0bAAA00011,A,0b110AAAAA,0x92]
178 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g2
:var
, kind
: fixup_aarch64_movw
179 // CHECK
: movn x4
, #:dtprel_g2:var // encoding: [0bAAA00100,A,0b110AAAAA,0x92]
180 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g2
:var
, kind
: fixup_aarch64_movw
182 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G2
[[VARSYM
]]
183 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G2
[[VARSYM
]]
186 movz x5
, #:dtprel_g1:var
187 movn x6
, #:dtprel_g1:var
188 movz w7
, #:dtprel_g1:var
189 // CHECK
: movz x5
, #:dtprel_g1:var // encoding: [0bAAA00101,A,0b101AAAAA,0x92]
190 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g1
:var
, kind
: fixup_aarch64_movw
191 // CHECK
: movn x6
, #:dtprel_g1:var // encoding: [0bAAA00110,A,0b101AAAAA,0x92]
192 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g1
:var
, kind
: fixup_aarch64_movw
193 // CHECK
: movz w7
, #:dtprel_g1:var // encoding: [0bAAA00111,A,0b101AAAAA,0x12]
194 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g1
:var
, kind
: fixup_aarch64_movw
196 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1
[[VARSYM
]]
197 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1
[[VARSYM
]]
198 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1
[[VARSYM
]]
201 movk x9
, #:dtprel_g1_nc:var
202 movk w10
, #:dtprel_g1_nc:var
203 // CHECK
: movk x9
, #:dtprel_g1_nc:var // encoding: [0bAAA01001,A,0b101AAAAA,0xf2]
204 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g1_nc
:var
, kind
: fixup_aarch64_movw
205 // CHECK
: movk w10
, #:dtprel_g1_nc:var // encoding: [0bAAA01010,A,0b101AAAAA,0x72]
206 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g1_nc
:var
, kind
: fixup_aarch64_movw
208 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC
[[VARSYM
]]
209 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G1_NC
[[VARSYM
]]
212 movz x11
, #:dtprel_g0:var
213 movn x12
, #:dtprel_g0:var
214 movz w13
, #:dtprel_g0:var
215 // CHECK
: movz x11
, #:dtprel_g0:var // encoding: [0bAAA01011,A,0b100AAAAA,0x92]
216 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g0
:var
, kind
: fixup_aarch64_movw
217 // CHECK
: movn x12
, #:dtprel_g0:var // encoding: [0bAAA01100,A,0b100AAAAA,0x92]
218 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g0
:var
, kind
: fixup_aarch64_movw
219 // CHECK
: movz w13
, #:dtprel_g0:var // encoding: [0bAAA01101,A,0b100AAAAA,0x12]
220 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g0
:var
, kind
: fixup_aarch64_movw
222 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0
[[VARSYM
]]
223 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0
[[VARSYM
]]
224 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0
[[VARSYM
]]
227 movk x15
, #:dtprel_g0_nc:var
228 movk w16
, #:dtprel_g0_nc:var
229 // CHECK
: movk x15
, #:dtprel_g0_nc:var // encoding: [0bAAA01111,A,0b100AAAAA,0xf2]
230 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g0_nc
:var
, kind
: fixup_aarch64_movw
231 // CHECK
: movk w16
, #:dtprel_g0_nc:var // encoding: [0bAAA10000,A,0b100AAAAA,0x72]
232 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_g0_nc
:var
, kind
: fixup_aarch64_movw
234 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC
[[VARSYM
]]
235 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_MOVW_DTPREL_G0_NC
[[VARSYM
]]
238 add x21
, x22
, #:dtprel_lo12:var
239 // CHECK
: add x21
, x22
, :dtprel_lo12
:var
// encoding
: [0xd5,0bAAAAAA10
,0b00AAAAAA
,0x91]
240 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12
:var
, kind
: fixup_aarch64_add_imm12
242 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_ADD_DTPREL_LO12
[[VARSYM
]]
245 add x25
, x26
, #:dtprel_lo12_nc:var
246 // CHECK
: add x25
, x26
, :dtprel_lo12_nc
:var
// encoding
: [0x59,0bAAAAAA11
,0b00AAAAAA
,0x91]
247 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12_nc
:var
, kind
: fixup_aarch64_add_imm12
249 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_ADD_DTPREL_LO12_NC
[[VARSYM
]]
252 ldrb w29
, [x30
, #:dtprel_lo12:var]
253 ldrsb x29
, [x28
, #:dtprel_lo12_nc:var]
254 // CHECK
: ldrb w29
, [x30
, :dtprel_lo12
:var
] // encoding
: [0xdd,0bAAAAAA11
,0b01AAAAAA
,0x39]
255 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale1
256 // CHECK
: ldrsb x29
, [x28
, :dtprel_lo12_nc
:var
] // encoding
: [0x9d,0bAAAAAA11
,0b10AAAAAA
,0x39]
257 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12_nc
:var
, kind
: fixup_aarch64_ldst_imm12_scale1
259 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_LDST8_DTPREL_LO12
[[VARSYM
]]
260 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_LDST8_DTPREL_LO12_NC
[[VARSYM
]]
263 strh w27
, [x26
, #:dtprel_lo12:var]
264 ldrsh x25
, [x24
, #:dtprel_lo12_nc:var]
265 // CHECK
: strh w27
, [x26
, :dtprel_lo12
:var
] // encoding
: [0x5b,0bAAAAAA11
,0b00AAAAAA
,0x79]
266 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale2
267 // CHECK
: ldrsh x25
, [x24
, :dtprel_lo12_nc
:var
] // encoding
: [0x19,0bAAAAAA11
,0b10AAAAAA
,0x79]
268 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12_nc
:var
, kind
: fixup_aarch64_ldst_imm12_scale2
270 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_LDST16_DTPREL_LO12
[[VARSYM
]]
271 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_LDST16_DTPREL_LO12_NC
[[VARSYM
]]
274 ldr w23
, [x22
, #:dtprel_lo12:var]
275 ldrsw x21
, [x20
, #:dtprel_lo12_nc:var]
276 // CHECK
: ldr w23
, [x22
, :dtprel_lo12
:var
] // encoding
: [0xd7,0bAAAAAA10
,0b01AAAAAA
,0xb9]
277 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale4
278 // CHECK
: ldrsw x21
, [x20
, :dtprel_lo12_nc
:var
] // encoding
: [0x95,0bAAAAAA10
,0b10AAAAAA
,0xb9]
279 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12_nc
:var
, kind
: fixup_aarch64_ldst_imm12_scale4
281 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_LDST32_DTPREL_LO12
[[VARSYM
]]
282 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_LDST32_DTPREL_LO12_NC
[[VARSYM
]]
284 ldr x19
, [x18
, #:dtprel_lo12:var]
285 str x17
, [x16
, #:dtprel_lo12_nc:var]
286 // CHECK
: ldr x19
, [x18
, :dtprel_lo12
:var
] // encoding
: [0x53,0bAAAAAA10
,0b01AAAAAA
,0xf9]
287 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale8
288 // CHECK
: str x17
, [x16
, :dtprel_lo12_nc
:var
] // encoding
: [0x11,0bAAAAAA10
,0b00AAAAAA
,0xf9]
289 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12_nc
:var
, kind
: fixup_aarch64_ldst_imm12_scale8
291 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_LDST64_DTPREL_LO12
[[VARSYM
]]
292 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_LDST64_DTPREL_LO12_NC
[[VARSYM
]]
294 ldr q24
, [x23
, #:dtprel_lo12:var]
295 str q22
, [x21
, #:dtprel_lo12_nc:var]
296 // CHECK
: ldr q24
, [x23
, :dtprel_lo12
:var
] // encoding
: [0xf8,0bAAAAAA10
,0b11AAAAAA
,0x3d]
297 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale16
298 // CHECK
: str q22
, [x21
, :dtprel_lo12_nc
:var
] // encoding
: [0xb6,0bAAAAAA10
,0b10AAAAAA
,0x3d]
299 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :dtprel_lo12_nc
:var
, kind
: fixup_aarch64_ldst_imm12_scale16
301 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_LDST128_DTPREL_LO12
[[VARSYM
]]
302 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSLD_LDST128_DTPREL_LO12_NC
[[VARSYM
]]
304 ////////////////////////////////////////////////////////////////////////////////
305 // TLS descriptor forms
306 ////////////////////////////////////////////////////////////////////////////////
308 adrp x8
, :tlsdesc
:var
309 ldr x7
, [x6
, #:tlsdesc_lo12:var]
310 add x5
, x4
, #:tlsdesc_lo12:var
314 // CHECK
: adrp x8
, :tlsdesc
:var
// encoding
: [0x08'A',A,A,0x90'A']
315 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tlsdesc
:var
, kind
: fixup_aarch64_pcrel_adrp_imm21
316 // CHECK
: ldr x7
, [x6
, :tlsdesc_lo12
:var
] // encoding
: [0xc7,0bAAAAAA00
,0b01AAAAAA
,0xf9]
317 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tlsdesc_lo12
:var
, kind
: fixup_aarch64_ldst_imm12_scale8
318 // CHECK
: add x5
, x4
, :tlsdesc_lo12
:var
// encoding
: [0x85,0bAAAAAA00
,0b00AAAAAA
,0x91]
319 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: :tlsdesc_lo12
:var
, kind
: fixup_aarch64_add_imm12
320 // CHECK
: .tlsdesccall var // encoding: []
321 // CHECK-NEXT
: // fixup
A - offset
: 0, value
: var
, kind
: fixup_aarch64_tlsdesc_call
322 // CHECK
: blr x3
// encoding
: [0x60,0x00,0x3f,0xd6]
325 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSDESC_ADR_PAGE21
[[VARSYM
]]
326 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSDESC_LD64_LO12
[[VARSYM
]]
327 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSDESC_ADD_LO12
[[VARSYM
]]
328 // CHECK-ELF-NEXT
: {{0x
[0-9A-F
]+}} R_AARCH64_TLSDESC_CALL
[[VARSYM
]]
330 // Make sure symbol
5 has type STT_TLS
:
332 // CHECK-ELF
: Symbols
[
333 // CHECK-ELF
: Symbol
{
334 // CHECK-ELF
: Name
: var
335 // CHECK-ELF-NEXT
: Value
:
336 // CHECK-ELF-NEXT
: Size
:
337 // CHECK-ELF-NEXT
: Binding
: Global
338 // CHECK-ELF-NEXT
: Type
: TLS