1 // RUN: llvm-mc -n -triple x86_64-apple-darwin9 %s -filetype=obj -o - | llvm-readobj -r --expand-relocs | FileCheck %s
3 // These examples are taken from <mach-o/x86_64/reloc.h>.
15 movq _foo@GOTPCREL(%rip), %rax
16 pushq _foo@GOTPCREL(%rip)
18 movl _foo+4(%rip), %eax
19 movb $0x12, _foo(%rip)
20 movl $0x12345678, _foo(%rip)
45 .long _foobar@GOTPCREL+4
48 .section __DWARF,__debug_frame,regular,debug
52 // Make sure local label which overlaps with non-local one is assigned to the
60 addl L2_1 - L2_0, %eax
68 .section __TEXT,__literal8,8byte_literals
88 cmpq $0, _foo@GOTPCREL(%rip)
90 // CHECK: Relocations [
91 // CHECK-NEXT: Section __data {
92 // CHECK-NEXT: Relocation {
93 // CHECK-NEXT: Offset: 0x20
94 // CHECK-NEXT: PCRel: 0
95 // CHECK-NEXT: Length: 3
96 // CHECK-NEXT: Extern: 0
97 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
98 // CHECK-NEXT: Symbol: 0x4
99 // CHECK-NEXT: Scattered: 0
101 // CHECK-NEXT: Relocation {
102 // CHECK-NEXT: Offset: 0x18
103 // CHECK-NEXT: PCRel: 0
104 // CHECK-NEXT: Length: 3
105 // CHECK-NEXT: Extern: 1
106 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
107 // CHECK-NEXT: Symbol: f6
108 // CHECK-NEXT: Scattered: 0
110 // CHECK-NEXT: Relocation {
111 // CHECK-NEXT: Offset: 0x10
112 // CHECK-NEXT: PCRel: 0
113 // CHECK-NEXT: Length: 3
114 // CHECK-NEXT: Extern: 0
115 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
116 // CHECK-NEXT: Symbol: 0x4
117 // CHECK-NEXT: Scattered: 0
119 // CHECK-NEXT: Relocation {
120 // CHECK-NEXT: Offset: 0x8
121 // CHECK-NEXT: PCRel: 1
122 // CHECK-NEXT: Length: 2
123 // CHECK-NEXT: Extern: 1
124 // CHECK-NEXT: Type: X86_64_RELOC_GOT (4)
125 // CHECK-NEXT: Symbol: _foo
126 // CHECK-NEXT: Scattered: 0
128 // CHECK-NEXT: Relocation {
129 // CHECK-NEXT: Offset: 0x4
130 // CHECK-NEXT: PCRel: 1
131 // CHECK-NEXT: Length: 2
132 // CHECK-NEXT: Extern: 1
133 // CHECK-NEXT: Type: X86_64_RELOC_GOT (4)
134 // CHECK-NEXT: Symbol: _foobar
135 // CHECK-NEXT: Scattered: 0
138 // CHECK-NEXT: Section __text {
139 // CHECK-NEXT: Relocation {
140 // CHECK-NEXT: Offset: 0xDA
141 // CHECK-NEXT: PCRel: 1
142 // CHECK-NEXT: Length: 2
143 // CHECK-NEXT: Extern: 1
144 // CHECK-NEXT: Type: X86_64_RELOC_GOT (4)
145 // CHECK-NEXT: Symbol: _foo
146 // CHECK-NEXT: Scattered: 0
148 // CHECK-NEXT: Relocation {
149 // CHECK-NEXT: Offset: 0xD3
150 // CHECK-NEXT: PCRel: 1
151 // CHECK-NEXT: Length: 2
152 // CHECK-NEXT: Extern: 0
153 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)
154 // CHECK-NEXT: Symbol: 0x4
155 // CHECK-NEXT: Scattered: 0
157 // CHECK-NEXT: Relocation {
158 // CHECK-NEXT: Offset: 0xCD
159 // CHECK-NEXT: PCRel: 1
160 // CHECK-NEXT: Length: 2
161 // CHECK-NEXT: Extern: 1
162 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)
163 // CHECK-NEXT: Symbol: f6
164 // CHECK-NEXT: Scattered: 0
166 // CHECK-NEXT: Relocation {
167 // CHECK-NEXT: Offset: 0xC7
168 // CHECK-NEXT: PCRel: 1
169 // CHECK-NEXT: Length: 2
170 // CHECK-NEXT: Extern: 0
171 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)
172 // CHECK-NEXT: Symbol: 0x4
173 // CHECK-NEXT: Scattered: 0
175 // CHECK-NEXT: Relocation {
176 // CHECK-NEXT: Offset: 0xC1
177 // CHECK-NEXT: PCRel: 1
178 // CHECK-NEXT: Length: 2
179 // CHECK-NEXT: Extern: 0
180 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)
181 // CHECK-NEXT: Symbol: 0x1
182 // CHECK-NEXT: Scattered: 0
184 // CHECK-NEXT: Relocation {
185 // CHECK-NEXT: Offset: 0xA5
186 // CHECK-NEXT: PCRel: 0
187 // CHECK-NEXT: Length: 3
188 // CHECK-NEXT: Extern: 1
189 // CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5)
190 // CHECK-NEXT: Symbol: _prev
191 // CHECK-NEXT: Scattered: 0
193 // CHECK-NEXT: Relocation {
194 // CHECK-NEXT: Offset: 0xA5
195 // CHECK-NEXT: PCRel: 0
196 // CHECK-NEXT: Length: 3
197 // CHECK-NEXT: Extern: 1
198 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
199 // CHECK-NEXT: Symbol: _foo
200 // CHECK-NEXT: Scattered: 0
202 // CHECK-NEXT: Relocation {
203 // CHECK-NEXT: Offset: 0x9D
204 // CHECK-NEXT: PCRel: 0
205 // CHECK-NEXT: Length: 3
206 // CHECK-NEXT: Extern: 1
207 // CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5)
208 // CHECK-NEXT: Symbol: _prev
209 // CHECK-NEXT: Scattered: 0
211 // CHECK-NEXT: Relocation {
212 // CHECK-NEXT: Offset: 0x9D
213 // CHECK-NEXT: PCRel: 0
214 // CHECK-NEXT: Length: 3
215 // CHECK-NEXT: Extern: 1
216 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
217 // CHECK-NEXT: Symbol: _foo
218 // CHECK-NEXT: Scattered: 0
220 // CHECK-NEXT: Relocation {
221 // CHECK-NEXT: Offset: 0x95
222 // CHECK-NEXT: PCRel: 0
223 // CHECK-NEXT: Length: 3
224 // CHECK-NEXT: Extern: 1
225 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
226 // CHECK-NEXT: Symbol: _prev
227 // CHECK-NEXT: Scattered: 0
229 // CHECK-NEXT: Relocation {
230 // CHECK-NEXT: Offset: 0x8D
231 // CHECK-NEXT: PCRel: 0
232 // CHECK-NEXT: Length: 3
233 // CHECK-NEXT: Extern: 1
234 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
235 // CHECK-NEXT: Symbol: _prev
236 // CHECK-NEXT: Scattered: 0
238 // CHECK-NEXT: Relocation {
239 // CHECK-NEXT: Offset: 0x79
240 // CHECK-NEXT: PCRel: 1
241 // CHECK-NEXT: Length: 2
242 // CHECK-NEXT: Extern: 1
243 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED_4 (8)
244 // CHECK-NEXT: Symbol: _prev
245 // CHECK-NEXT: Scattered: 0
247 // CHECK-NEXT: Relocation {
248 // CHECK-NEXT: Offset: 0x71
249 // CHECK-NEXT: PCRel: 1
250 // CHECK-NEXT: Length: 2
251 // CHECK-NEXT: Extern: 1
252 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED_2 (7)
253 // CHECK-NEXT: Symbol: _prev
254 // CHECK-NEXT: Scattered: 0
256 // CHECK-NEXT: Relocation {
257 // CHECK-NEXT: Offset: 0x69
258 // CHECK-NEXT: PCRel: 1
259 // CHECK-NEXT: Length: 2
260 // CHECK-NEXT: Extern: 1
261 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED_1 (6)
262 // CHECK-NEXT: Symbol: _prev
263 // CHECK-NEXT: Scattered: 0
265 // CHECK-NEXT: Relocation {
266 // CHECK-NEXT: Offset: 0x63
267 // CHECK-NEXT: PCRel: 1
268 // CHECK-NEXT: Length: 2
269 // CHECK-NEXT: Extern: 1
270 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)
271 // CHECK-NEXT: Symbol: _prev
272 // CHECK-NEXT: Scattered: 0
274 // CHECK-NEXT: Relocation {
275 // CHECK-NEXT: Offset: 0x5C
276 // CHECK-NEXT: PCRel: 1
277 // CHECK-NEXT: Length: 2
278 // CHECK-NEXT: Extern: 1
279 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)
280 // CHECK-NEXT: Symbol: _prev
281 // CHECK-NEXT: Scattered: 0
283 // CHECK-NEXT: Relocation {
284 // CHECK-NEXT: Offset: 0x55
285 // CHECK-NEXT: PCRel: 0
286 // CHECK-NEXT: Length: 2
287 // CHECK-NEXT: Extern: 1
288 // CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5)
289 // CHECK-NEXT: Symbol: _bar
290 // CHECK-NEXT: Scattered: 0
292 // CHECK-NEXT: Relocation {
293 // CHECK-NEXT: Offset: 0x55
294 // CHECK-NEXT: PCRel: 0
295 // CHECK-NEXT: Length: 2
296 // CHECK-NEXT: Extern: 1
297 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
298 // CHECK-NEXT: Symbol: _foo
299 // CHECK-NEXT: Scattered: 0
301 // CHECK-NEXT: Relocation {
302 // CHECK-NEXT: Offset: 0x4D
303 // CHECK-NEXT: PCRel: 0
304 // CHECK-NEXT: Length: 3
305 // CHECK-NEXT: Extern: 1
306 // CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5)
307 // CHECK-NEXT: Symbol: _bar
308 // CHECK-NEXT: Scattered: 0
310 // CHECK-NEXT: Relocation {
311 // CHECK-NEXT: Offset: 0x4D
312 // CHECK-NEXT: PCRel: 0
313 // CHECK-NEXT: Length: 3
314 // CHECK-NEXT: Extern: 1
315 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
316 // CHECK-NEXT: Symbol: _foo
317 // CHECK-NEXT: Scattered: 0
319 // CHECK-NEXT: Relocation {
320 // CHECK-NEXT: Offset: 0x45
321 // CHECK-NEXT: PCRel: 0
322 // CHECK-NEXT: Length: 3
323 // CHECK-NEXT: Extern: 1
324 // CHECK-NEXT: Type: X86_64_RELOC_SUBTRACTOR (5)
325 // CHECK-NEXT: Symbol: _bar
326 // CHECK-NEXT: Scattered: 0
328 // CHECK-NEXT: Relocation {
329 // CHECK-NEXT: Offset: 0x45
330 // CHECK-NEXT: PCRel: 0
331 // CHECK-NEXT: Length: 3
332 // CHECK-NEXT: Extern: 1
333 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
334 // CHECK-NEXT: Symbol: _foo
335 // CHECK-NEXT: Scattered: 0
337 // CHECK-NEXT: Relocation {
338 // CHECK-NEXT: Offset: 0x3D
339 // CHECK-NEXT: PCRel: 0
340 // CHECK-NEXT: Length: 3
341 // CHECK-NEXT: Extern: 1
342 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
343 // CHECK-NEXT: Symbol: _foo
344 // CHECK-NEXT: Scattered: 0
346 // CHECK-NEXT: Relocation {
347 // CHECK-NEXT: Offset: 0x35
348 // CHECK-NEXT: PCRel: 0
349 // CHECK-NEXT: Length: 3
350 // CHECK-NEXT: Extern: 1
351 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
352 // CHECK-NEXT: Symbol: _foo
353 // CHECK-NEXT: Scattered: 0
355 // CHECK-NEXT: Relocation {
356 // CHECK-NEXT: Offset: 0x2D
357 // CHECK-NEXT: PCRel: 1
358 // CHECK-NEXT: Length: 2
359 // CHECK-NEXT: Extern: 1
360 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED_4 (8)
361 // CHECK-NEXT: Symbol: _foo
362 // CHECK-NEXT: Scattered: 0
364 // CHECK-NEXT: Relocation {
365 // CHECK-NEXT: Offset: 0x26
366 // CHECK-NEXT: PCRel: 1
367 // CHECK-NEXT: Length: 2
368 // CHECK-NEXT: Extern: 1
369 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED_1 (6)
370 // CHECK-NEXT: Symbol: _foo
371 // CHECK-NEXT: Scattered: 0
373 // CHECK-NEXT: Relocation {
374 // CHECK-NEXT: Offset: 0x20
375 // CHECK-NEXT: PCRel: 1
376 // CHECK-NEXT: Length: 2
377 // CHECK-NEXT: Extern: 1
378 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)
379 // CHECK-NEXT: Symbol: _foo
380 // CHECK-NEXT: Scattered: 0
382 // CHECK-NEXT: Relocation {
383 // CHECK-NEXT: Offset: 0x1A
384 // CHECK-NEXT: PCRel: 1
385 // CHECK-NEXT: Length: 2
386 // CHECK-NEXT: Extern: 1
387 // CHECK-NEXT: Type: X86_64_RELOC_SIGNED (1)
388 // CHECK-NEXT: Symbol: _foo
389 // CHECK-NEXT: Scattered: 0
391 // CHECK-NEXT: Relocation {
392 // CHECK-NEXT: Offset: 0x14
393 // CHECK-NEXT: PCRel: 1
394 // CHECK-NEXT: Length: 2
395 // CHECK-NEXT: Extern: 1
396 // CHECK-NEXT: Type: X86_64_RELOC_GOT (4)
397 // CHECK-NEXT: Symbol: _foo
398 // CHECK-NEXT: Scattered: 0
400 // CHECK-NEXT: Relocation {
401 // CHECK-NEXT: Offset: 0xE
402 // CHECK-NEXT: PCRel: 1
403 // CHECK-NEXT: Length: 2
404 // CHECK-NEXT: Extern: 1
405 // CHECK-NEXT: Type: X86_64_RELOC_GOT_LOAD (3)
406 // CHECK-NEXT: Symbol: _foo
407 // CHECK-NEXT: Scattered: 0
409 // CHECK-NEXT: Relocation {
410 // CHECK-NEXT: Offset: 0x7
411 // CHECK-NEXT: PCRel: 1
412 // CHECK-NEXT: Length: 2
413 // CHECK-NEXT: Extern: 1
414 // CHECK-NEXT: Type: X86_64_RELOC_BRANCH (2)
415 // CHECK-NEXT: Symbol: _foo
416 // CHECK-NEXT: Scattered: 0
418 // CHECK-NEXT: Relocation {
419 // CHECK-NEXT: Offset: 0x2
420 // CHECK-NEXT: PCRel: 1
421 // CHECK-NEXT: Length: 2
422 // CHECK-NEXT: Extern: 1
423 // CHECK-NEXT: Type: X86_64_RELOC_BRANCH (2)
424 // CHECK-NEXT: Symbol: _foo
425 // CHECK-NEXT: Scattered: 0
428 // CHECK-NEXT: Section __debug_frame {
429 // CHECK-NEXT: Relocation {
430 // CHECK-NEXT: Offset: 0x8
431 // CHECK-NEXT: PCRel: 0
432 // CHECK-NEXT: Length: 3
433 // CHECK-NEXT: Extern: 1
434 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
435 // CHECK-NEXT: Symbol: _ext_foo
436 // CHECK-NEXT: Scattered: 0
438 // CHECK-NEXT: Relocation {
439 // CHECK-NEXT: Offset: 0x0
440 // CHECK-NEXT: PCRel: 0
441 // CHECK-NEXT: Length: 3
442 // CHECK-NEXT: Extern: 0
443 // CHECK-NEXT: Type: X86_64_RELOC_UNSIGNED (0)
444 // CHECK-NEXT: Symbol: 0x2
445 // CHECK-NEXT: Scattered: 0