83c0de788f86da3eda3e92a9e453dd4b5e9051ed
[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 - | macho-dump --dump-section-data | 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: ('cputype', 16777223)
91 // CHECK: ('cpusubtype', 3)
92 // CHECK: ('filetype', 1)
93 // CHECK: ('num_load_commands', 3)
94 // CHECK: ('load_commands_size', 496)
95 // CHECK: ('flag', 0)
96 // CHECK: ('reserved', 0)
97 // CHECK: ('load_commands', [
98 // CHECK:   # Load Command 0
99 // CHECK:  (('command', 25)
100 // CHECK:   ('size', 392)
101 // CHECK:   ('segment_name', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
102 // CHECK:   ('vm_addr', 0)
103 // CHECK:   ('vm_size', 311)
104 // CHECK:   ('file_offset', 528)
105 // CHECK:   ('file_size', 311)
106 // CHECK:   ('maxprot', 7)
107 // CHECK:   ('initprot', 7)
108 // CHECK:   ('num_sections', 4)
109 // CHECK:   ('flags', 0)
110 // CHECK:   ('sections', [
111 // CHECK:     # Section 0
112 // CHECK:    (('section_name', '__data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
113 // CHECK:     ('segment_name', '__DATA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
114 // CHECK:     ('address', 0)
115 // CHECK:     ('size', 40)
116 // CHECK:     ('offset', 528)
117 // CHECK:     ('alignment', 0)
118 // CHECK:     ('reloc_offset', 840)
119 // CHECK:     ('num_reloc', 5)
120 // CHECK:     ('flags', 0x0)
121 // CHECK:     ('reserved1', 0)
122 // CHECK:     ('reserved2', 0)
123 // CHECK:     ('reserved3', 0)
124 // CHECK:    ),
125 // CHECK:   ('_relocations', [
126 // CHECK:     # Relocation 0
127 // CHECK:     (('word-0', 0x20),
128 // CHECK:      ('word-1', 0x6000004)),
129 // CHECK:     # Relocation 1
130 // CHECK:     (('word-0', 0x18),
131 // CHECK:      ('word-1', 0xe000006)),
132 // CHECK:     # Relocation 2
133 // CHECK:     (('word-0', 0x10),
134 // CHECK:      ('word-1', 0x6000004)),
135 // CHECK:     # Relocation 3
136 // CHECK:     (('word-0', 0x8),
137 // CHECK:      ('word-1', 0x4d000000)),
138 // CHECK:     # Relocation 4
139 // CHECK:     (('word-0', 0x4),
140 // CHECK:      ('word-1', 0x4d000008)),
141 // CHECK:   ])
142 // CHECK:   ('_section_data', '00000000 04000000 04000000 00000000 1f010000 00000000 00000000 00000000 2f010000 00000000')
143 // CHECK:     # Section 1
144 // CHECK:    (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
145 // CHECK:     ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
146 // CHECK:     ('address', 40)
147 // CHECK:     ('size', 223)
148 // CHECK:     ('offset', 568)
149 // CHECK:     ('alignment', 0)
150 // CHECK:     ('reloc_offset', 880)
151 // CHECK:     ('num_reloc', 32)
152 // CHECK:     ('flags', 0x80000400)
153 // CHECK:     ('reserved1', 0)
154 // CHECK:     ('reserved2', 0)
155 // CHECK:     ('reserved3', 0)
156 // CHECK:    ),
157 // CHECK:   ('_relocations', [
158 // CHECK:     # Relocation 0
159 // CHECK:     (('word-0', 0xda),
160 // CHECK:      ('word-1', 0x4d000000)),
161 // CHECK:     # Relocation 1
162 // CHECK:     (('word-0', 0xd3),
163 // CHECK:      ('word-1', 0x15000004)),
164 // CHECK:     # Relocation 2
165 // CHECK:     (('word-0', 0xcd),
166 // CHECK:      ('word-1', 0x1d000006)),
167 // CHECK:     # Relocation 3
168 // CHECK:     (('word-0', 0xc7),
169 // CHECK:      ('word-1', 0x15000004)),
170 // CHECK:     # Relocation 4
171 // CHECK:     (('word-0', 0xc1),
172 // CHECK:      ('word-1', 0x15000001)),
173 // CHECK:     # Relocation 5
174 // CHECK:     (('word-0', 0xa5),
175 // CHECK:      ('word-1', 0x5e000003)),
176 // CHECK:     # Relocation 6
177 // CHECK:     (('word-0', 0xa5),
178 // CHECK:      ('word-1', 0xe000000)),
179 // CHECK:     # Relocation 7
180 // CHECK:     (('word-0', 0x9d),
181 // CHECK:      ('word-1', 0x5e000003)),
182 // CHECK:     # Relocation 8
183 // CHECK:     (('word-0', 0x9d),
184 // CHECK:      ('word-1', 0xe000000)),
185 // CHECK:     # Relocation 9
186 // CHECK:     (('word-0', 0x95),
187 // CHECK:      ('word-1', 0xe000003)),
188 // CHECK:     # Relocation 10
189 // CHECK:     (('word-0', 0x8d),
190 // CHECK:      ('word-1', 0xe000003)),
191 // CHECK:     # Relocation 11
192 // CHECK:     (('word-0', 0x79),
193 // CHECK:      ('word-1', 0x8d000003)),
194 // CHECK:     # Relocation 12
195 // CHECK:     (('word-0', 0x71),
196 // CHECK:      ('word-1', 0x7d000003)),
197 // CHECK:     # Relocation 13
198 // CHECK:     (('word-0', 0x69),
199 // CHECK:      ('word-1', 0x6d000003)),
200 // CHECK:     # Relocation 14
201 // CHECK:     (('word-0', 0x63),
202 // CHECK:      ('word-1', 0x1d000003)),
203 // CHECK:     # Relocation 15
204 // CHECK:     (('word-0', 0x5c),
205 // CHECK:      ('word-1', 0x1d000003)),
206 // CHECK:     # Relocation 16
207 // CHECK:     (('word-0', 0x55),
208 // CHECK:      ('word-1', 0x5c000002)),
209 // CHECK:     # Relocation 17
210 // CHECK:     (('word-0', 0x55),
211 // CHECK:      ('word-1', 0xc000000)),
212 // CHECK:     # Relocation 18
213 // CHECK:     (('word-0', 0x4d),
214 // CHECK:      ('word-1', 0x5e000002)),
215 // CHECK:     # Relocation 19
216 // CHECK:     (('word-0', 0x4d),
217 // CHECK:      ('word-1', 0xe000000)),
218 // CHECK:     # Relocation 20
219 // CHECK:     (('word-0', 0x45),
220 // CHECK:      ('word-1', 0x5e000002)),
221 // CHECK:     # Relocation 21
222 // CHECK:     (('word-0', 0x45),
223 // CHECK:      ('word-1', 0xe000000)),
224 // CHECK:     # Relocation 22
225 // CHECK:     (('word-0', 0x3d),
226 // CHECK:      ('word-1', 0xe000000)),
227 // CHECK:     # Relocation 23
228 // CHECK:     (('word-0', 0x35),
229 // CHECK:      ('word-1', 0xe000000)),
230 // CHECK:     # Relocation 24
231 // CHECK:     (('word-0', 0x2d),
232 // CHECK:      ('word-1', 0x8d000000)),
233 // CHECK:     # Relocation 25
234 // CHECK:     (('word-0', 0x26),
235 // CHECK:      ('word-1', 0x6d000000)),
236 // CHECK:     # Relocation 26
237 // CHECK:     (('word-0', 0x20),
238 // CHECK:      ('word-1', 0x1d000000)),
239 // CHECK:     # Relocation 27
240 // CHECK:     (('word-0', 0x1a),
241 // CHECK:      ('word-1', 0x1d000000)),
242 // CHECK:     # Relocation 28
243 // CHECK:     (('word-0', 0x14),
244 // CHECK:      ('word-1', 0x4d000000)),
245 // CHECK:     # Relocation 29
246 // CHECK:     (('word-0', 0xe),
247 // CHECK:      ('word-1', 0x3d000000)),
248 // CHECK:     # Relocation 30
249 // CHECK:     (('word-0', 0x7),
250 // CHECK:      ('word-1', 0x2d000000)),
251 // CHECK:     # Relocation 31
252 // CHECK:     (('word-0', 0x2),
253 // CHECK:      ('word-1', 0x2d000000)),
254 // CHECK:   ])
255 // CHECK:   ('_section_data', 'c3e80000 0000e804 00000048 8b050000 0000ff35 00000000 8b050000 00008b05 04000000 c605ffff ffff12c7 05fcffff ff785634 12000000 00000000 00040000 00000000 00000000 00000000 00040000 00000000 00000000 00488d05 2c000000 488d0514 00000083 05130000 00066681 05120000 00f40181 05100000 00f40100 00909090 90909090 90909090 902c0000 00000000 00140000 00000000 00e4ffff ffffffff ffd4ffff ffffffff ff2c0000 00000000 0083c000 03042503 0000008b 051fffff ff8b052c 0000008b 05000000 008b0530 00000048 833dffff ffff00')
256 // CHECK:     # Section 2
257 // CHECK:    (('section_name', '__debug_frame\x00\x00\x00')
258 // CHECK:     ('segment_name', '__DWARF\x00\x00\x00\x00\x00\x00\x00\x00\x00')
259 // CHECK:     ('address', 263)
260 // CHECK:     ('size', 16)
261 // CHECK:     ('offset', 791)
262 // CHECK:     ('alignment', 0)
263 // CHECK:     ('reloc_offset', 1136)
264 // CHECK:     ('num_reloc', 2)
265 // CHECK:     ('flags', 0x2000000)
266 // CHECK:     ('reserved1', 0)
267 // CHECK:     ('reserved2', 0)
268 // CHECK:     ('reserved3', 0)
269 // CHECK:    ),
270 // CHECK:   ('_relocations', [
271 // CHECK:     # Relocation 0
272 // CHECK:     (('word-0', 0x8),
273 // CHECK:      ('word-1', 0xe000007)),
274 // CHECK:     # Relocation 1
275 // CHECK:     (('word-0', 0x0),
276 // CHECK:      ('word-1', 0x6000002)),
277 // CHECK:   ])
278 // CHECK:   ('_section_data', 'd5000000 00000000 00000000 00000000')
279 // CHECK:     # Section 3
280 // CHECK:    (('section_name', '__literal8\x00\x00\x00\x00\x00\x00')
281 // CHECK:     ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
282 // CHECK:     ('address', 279)
283 // CHECK:     ('size', 32)
284 // CHECK:     ('offset', 807)
285 // CHECK:     ('alignment', 0)
286 // CHECK:     ('reloc_offset', 0)
287 // CHECK:     ('num_reloc', 0)
288 // CHECK:     ('flags', 0x4)
289 // CHECK:     ('reserved1', 0)
290 // CHECK:     ('reserved2', 0)
291 // CHECK:     ('reserved3', 0)
292 // CHECK:    ),
293 // CHECK:   ('_relocations', [
294 // CHECK:   ])
295 // CHECK:   ('_section_data', '00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000')
296 // CHECK:   ])
297 // CHECK:  ),
298 // CHECK:   # Load Command 1
299 // CHECK:  (('command', 2)
300 // CHECK:   ('size', 24)
301 // CHECK:   ('symoff', 1152)
302 // CHECK:   ('nsyms', 9)
303 // CHECK:   ('stroff', 1296)
304 // CHECK:   ('strsize', 52)
305 // CHECK:   ('_string_data', '\x00_foobar\x00_ext_foo\x00_foo\x00_baz\x00_bar\x00_prev\x00_f2\x00_f3\x00f6\x00\x00\x00')
306 // CHECK:   ('_symbols', [
307 // CHECK:     # Symbol 0
308 // CHECK:    (('n_strx', 18)
309 // CHECK:     ('n_type', 0xe)
310 // CHECK:     ('n_sect', 2)
311 // CHECK:     ('n_desc', 0)
312 // CHECK:     ('n_value', 40)
313 // CHECK:     ('_string', '_foo')
314 // CHECK:    ),
315 // CHECK:     # Symbol 1
316 // CHECK:    (('n_strx', 23)
317 // CHECK:     ('n_type', 0xe)
318 // CHECK:     ('n_sect', 2)
319 // CHECK:     ('n_desc', 0)
320 // CHECK:     ('n_value', 41)
321 // CHECK:     ('_string', '_baz')
322 // CHECK:    ),
323 // CHECK:     # Symbol 2
324 // CHECK:    (('n_strx', 28)
325 // CHECK:     ('n_type', 0xe)
326 // CHECK:     ('n_sect', 2)
327 // CHECK:     ('n_desc', 0)
328 // CHECK:     ('n_value', 101)
329 // CHECK:     ('_string', '_bar')
330 // CHECK:    ),
331 // CHECK:     # Symbol 3
332 // CHECK:    (('n_strx', 33)
333 // CHECK:     ('n_type', 0xe)
334 // CHECK:     ('n_sect', 2)
335 // CHECK:     ('n_desc', 0)
336 // CHECK:     ('n_value', 169)
337 // CHECK:     ('_string', '_prev')
338 // CHECK:    ),
339 // CHECK:     # Symbol 4
340 // CHECK:    (('n_strx', 39)
341 // CHECK:     ('n_type', 0xe)
342 // CHECK:     ('n_sect', 2)
343 // CHECK:     ('n_desc', 0)
344 // CHECK:     ('n_value', 221)
345 // CHECK:     ('_string', '_f2')
346 // CHECK:    ),
347 // CHECK:     # Symbol 5
348 // CHECK:    (('n_strx', 43)
349 // CHECK:     ('n_type', 0xe)
350 // CHECK:     ('n_sect', 2)
351 // CHECK:     ('n_desc', 0)
352 // CHECK:     ('n_value', 224)
353 // CHECK:     ('_string', '_f3')
354 // CHECK:    ),
355 // CHECK:     # Symbol 6
356 // CHECK:    (('n_strx', 47)
357 // CHECK:     ('n_type', 0xe)
358 // CHECK:     ('n_sect', 4)
359 // CHECK:     ('n_desc', 0)
360 // CHECK:     ('n_value', 295)
361 // CHECK:     ('_string', 'f6')
362 // CHECK:    ),
363 // CHECK:     # Symbol 7
364 // CHECK:    (('n_strx', 9)
365 // CHECK:     ('n_type', 0x1)
366 // CHECK:     ('n_sect', 0)
367 // CHECK:     ('n_desc', 0)
368 // CHECK:     ('n_value', 0)
369 // CHECK:     ('_string', '_ext_foo')
370 // CHECK:    ),
371 // CHECK:     # Symbol 8
372 // CHECK:    (('n_strx', 1)
373 // CHECK:     ('n_type', 0x1)
374 // CHECK:     ('n_sect', 0)
375 // CHECK:     ('n_desc', 0)
376 // CHECK:     ('n_value', 0)
377 // CHECK:     ('_string', '_foobar')
378 // CHECK:    ),
379 // CHECK:   ])
380 // CHECK:  ),
381 // CHECK:   # Load Command 2
382 // CHECK:  (('command', 11)
383 // CHECK:   ('size', 80)
384 // CHECK:   ('ilocalsym', 0)
385 // CHECK:   ('nlocalsym', 7)
386 // CHECK:   ('iextdefsym', 7)
387 // CHECK:   ('nextdefsym', 0)
388 // CHECK:   ('iundefsym', 7)
389 // CHECK:   ('nundefsym', 2)
390 // CHECK:   ('tocoff', 0)
391 // CHECK:   ('ntoc', 0)
392 // CHECK:   ('modtaboff', 0)
393 // CHECK:   ('nmodtab', 0)
394 // CHECK:   ('extrefsymoff', 0)
395 // CHECK:   ('nextrefsyms', 0)
396 // CHECK:   ('indirectsymoff', 0)
397 // CHECK:   ('nindirectsyms', 0)
398 // CHECK:   ('extreloff', 0)
399 // CHECK:   ('nextrel', 0)
400 // CHECK:   ('locreloff', 0)
401 // CHECK:   ('nlocrel', 0)
402 // CHECK:   ('_indirect_symbols', [
403 // CHECK:   ])
404 // CHECK:  ),
405 // CHECK: ])