Remove NumberHack entirely.
[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', 1)
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', '\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x1f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/\x01\x00\x00\x00\x00\x00\x00')
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', '\xc3\xe8\x00\x00\x00\x00\xe8\x04\x00\x00\x00H\x8b\x05\x00\x00\x00\x00\xff5\x00\x00\x00\x00\x8b\x05\x00\x00\x00\x00\x8b\x05\x04\x00\x00\x00\xc6\x05\xff\xff\xff\xff\x12\xc7\x05\xfc\xff\xff\xffxV4\x12\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00H\x8d\x05,\x00\x00\x00H\x8d\x05\x14\x00\x00\x00\x83\x05\x13\x00\x00\x00\x06f\x81\x05\x12\x00\x00\x00\xf4\x01\x81\x05\x10\x00\x00\x00\xf4\x01\x00\x00\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90,\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\xe4\xff\xff\xff\xff\xff\xff\xff\xd4\xff\xff\xff\xff\xff\xff\xff,\x00\x00\x00\x00\x00\x00\x00\x83\xc0\x00\x03\x04%\x03\x00\x00\x00\x8b\x05\x1f\xff\xff\xff\x8b\x05,\x00\x00\x00\x8b\x05\x00\x00\x00\x00\x8b\x050\x00\x00\x00H\x83=\xff\xff\xff\xff\x00')
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', '\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
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', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
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: ])