Add disassembler tests for mips64 platform. There are no functional changes.
[oota-llvm.git] / test / MC / MachO / darwin-x86_64-reloc.s
1 // RUN: llvm-mc -n -triple x86_64-apple-darwin9 %s -filetype=obj -o - | llvm-readobj -r --expand-relocs | FileCheck %s
2
3 // These examples are taken from <mach-o/x86_64/reloc.h>.
4
5         .data
6         .long 0
7
8         .text
9 _foo:
10         ret
11
12 _baz:
13         call _foo
14         call _foo+4
15         movq _foo@GOTPCREL(%rip), %rax
16         pushq _foo@GOTPCREL(%rip)
17         movl _foo(%rip), %eax
18         movl _foo+4(%rip), %eax
19         movb  $0x12, _foo(%rip)
20         movl  $0x12345678, _foo(%rip)
21         .quad _foo
22 _bar:
23         .quad _foo+4
24         .quad _foo - _bar
25         .quad _foo - _bar + 4
26         .long _foo - _bar
27         leaq L1(%rip), %rax
28         leaq L0(%rip), %rax
29         addl $6,L0(%rip)
30         addw $500,L0(%rip)
31         addl $500,L0(%rip)
32
33 _prev:
34         .space 12,0x90
35         .quad L1
36 L0:
37         .quad L0
38 L_pc:
39         .quad _foo - L_pc
40         .quad _foo - L1
41 L1:
42         .quad L1 - _prev
43
44         .data
45 .long   _foobar@GOTPCREL+4
46 .long   _foo@GOTPCREL+4
47
48         .section        __DWARF,__debug_frame,regular,debug
49         .quad L1
50         .quad _ext_foo
51
52 // Make sure local label which overlaps with non-local one is assigned to the
53 // right atom.
54         .text
55 _f2:
56 L2_0:
57         addl $0, %eax
58 L2_1:        
59 _f3:
60         addl L2_1 - L2_0, %eax
61         
62         .data
63 L4:     
64         .long 0
65         .text
66         movl L4(%rip), %eax
67
68         .section __TEXT,__literal8,8byte_literals
69         .quad 0
70 L5:     
71         .quad 0
72 f6:
73         .quad 0
74 L6:
75         .quad 0
76         
77         .text
78         movl L5(%rip), %eax
79         movl f6(%rip), %eax
80         movl L6(%rip), %eax
81         
82         .data
83         .quad L5
84         .quad f6
85         .quad L6
86
87         .text
88         cmpq $0, _foo@GOTPCREL(%rip)
89
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
100 // CHECK-NEXT:     }
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
109 // CHECK-NEXT:     }
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
118 // CHECK-NEXT:     }
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
127 // CHECK-NEXT:     }
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
136 // CHECK-NEXT:     }
137 // CHECK-NEXT:   }
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
147 // CHECK-NEXT:     }
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
156 // CHECK-NEXT:     }
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
165 // CHECK-NEXT:     }
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
174 // CHECK-NEXT:     }
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
183 // CHECK-NEXT:     }
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
192 // CHECK-NEXT:     }
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
201 // CHECK-NEXT:     }
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
210 // CHECK-NEXT:     }
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
219 // CHECK-NEXT:     }
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
228 // CHECK-NEXT:     }
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
237 // CHECK-NEXT:     }
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
246 // CHECK-NEXT:     }
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
255 // CHECK-NEXT:     }
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
264 // CHECK-NEXT:     }
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
273 // CHECK-NEXT:     }
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
282 // CHECK-NEXT:     }
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
291 // CHECK-NEXT:     }
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
300 // CHECK-NEXT:     }
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
309 // CHECK-NEXT:     }
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
318 // CHECK-NEXT:     }
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
327 // CHECK-NEXT:     }
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
336 // CHECK-NEXT:     }
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
345 // CHECK-NEXT:     }
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
354 // CHECK-NEXT:     }
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
363 // CHECK-NEXT:     }
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
372 // CHECK-NEXT:     }
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
381 // CHECK-NEXT:     }
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
390 // CHECK-NEXT:     }
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
399 // CHECK-NEXT:     }
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
408 // CHECK-NEXT:     }
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
417 // CHECK-NEXT:     }
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
426 // CHECK-NEXT:     }
427 // CHECK-NEXT:   }
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
437 // CHECK-NEXT:     }
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
446 // CHECK-NEXT:     }
447 // CHECK-NEXT:   }
448 // CHECK-NEXT: ]