darwin-x86_64-reloc.s revision a5f1d57f65ae601ec181c0f4e36cf0df5e8d79d8
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
36L0:
37        .quad L0
38L_pc:
39 	.quad _foo - L_pc
40 	.quad _foo - L1
41L1:
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:
56L2_0:
57        addl $0, %eax
58L2_1:
59_f3:
60        addl L2_1 - L2_0, %eax
61
62        .data
63L4:
64        .long 0
65        .text
66        movl L4(%rip), %eax
67
68        .section __TEXT,__literal8,8byte_literals
69	.quad 0
70L5:
71	.quad 0
72f6:
73        .quad 0
74L6:
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// CHECK: ('cputype', 16777223)
88// CHECK: ('cpusubtype', 3)
89// CHECK: ('filetype', 1)
90// CHECK: ('num_load_commands', 1)
91// CHECK: ('load_commands_size', 496)
92// CHECK: ('flag', 0)
93// CHECK: ('reserved', 0)
94// CHECK: ('load_commands', [
95// CHECK:   # Load Command 0
96// CHECK:  (('command', 25)
97// CHECK:   ('size', 392)
98// CHECK:   ('segment_name', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
99// CHECK:   ('vm_addr', 0)
100// CHECK:   ('vm_size', 303)
101// CHECK:   ('file_offset', 528)
102// CHECK:   ('file_size', 303)
103// CHECK:   ('maxprot', 7)
104// CHECK:   ('initprot', 7)
105// CHECK:   ('num_sections', 4)
106// CHECK:   ('flags', 0)
107// CHECK:   ('sections', [
108// CHECK:     # Section 0
109// CHECK:    (('section_name', '__data\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
110// CHECK:     ('segment_name', '__DATA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
111// CHECK:     ('address', 0)
112// CHECK:     ('size', 40)
113// CHECK:     ('offset', 528)
114// CHECK:     ('alignment', 0)
115// CHECK:     ('reloc_offset', 832)
116// CHECK:     ('num_reloc', 5)
117// CHECK:     ('flags', 0x0)
118// CHECK:     ('reserved1', 0)
119// CHECK:     ('reserved2', 0)
120// CHECK:     ('reserved3', 0)
121// CHECK:    ),
122// CHECK:   ('_relocations', [
123// CHECK:     # Relocation 0
124// CHECK:     (('word-0', 0x20),
125// CHECK:      ('word-1', 0x6000004)),
126// CHECK:     # Relocation 1
127// CHECK:     (('word-0', 0x18),
128// CHECK:      ('word-1', 0xe000006)),
129// CHECK:     # Relocation 2
130// CHECK:     (('word-0', 0x10),
131// CHECK:      ('word-1', 0x6000004)),
132// CHECK:     # Relocation 3
133// CHECK:     (('word-0', 0x8),
134// CHECK:      ('word-1', 0x4d000000)),
135// CHECK:     # Relocation 4
136// CHECK:     (('word-0', 0x4),
137// CHECK:      ('word-1', 0x4d000008)),
138// CHECK:   ])
139// CHECK:   ('_section_data', "\x00\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x17\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\x01\x00\x00\x00\x00\x00\x00")
140// CHECK:     # Section 1
141// CHECK:    (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
142// CHECK:     ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
143// CHECK:     ('address', 40)
144// CHECK:     ('size', 215)
145// CHECK:     ('offset', 568)
146// CHECK:     ('alignment', 0)
147// CHECK:     ('reloc_offset', 872)
148// CHECK:     ('num_reloc', 31)
149// CHECK:     ('flags', 0x80000400)
150// CHECK:     ('reserved1', 0)
151// CHECK:     ('reserved2', 0)
152// CHECK:     ('reserved3', 0)
153// CHECK:    ),
154// CHECK:   ('_relocations', [
155// CHECK:     # Relocation 0
156// CHECK:     (('word-0', 0xd3),
157// CHECK:      ('word-1', 0x15000004)),
158// CHECK:     # Relocation 1
159// CHECK:     (('word-0', 0xcd),
160// CHECK:      ('word-1', 0x1d000006)),
161// CHECK:     # Relocation 2
162// CHECK:     (('word-0', 0xc7),
163// CHECK:      ('word-1', 0x15000004)),
164// CHECK:     # Relocation 3
165// CHECK:     (('word-0', 0xc1),
166// CHECK:      ('word-1', 0x15000001)),
167// CHECK:     # Relocation 4
168// CHECK:     (('word-0', 0xa5),
169// CHECK:      ('word-1', 0x5e000003)),
170// CHECK:     # Relocation 5
171// CHECK:     (('word-0', 0xa5),
172// CHECK:      ('word-1', 0xe000000)),
173// CHECK:     # Relocation 6
174// CHECK:     (('word-0', 0x9d),
175// CHECK:      ('word-1', 0x5e000003)),
176// CHECK:     # Relocation 7
177// CHECK:     (('word-0', 0x9d),
178// CHECK:      ('word-1', 0xe000000)),
179// CHECK:     # Relocation 8
180// CHECK:     (('word-0', 0x95),
181// CHECK:      ('word-1', 0xe000003)),
182// CHECK:     # Relocation 9
183// CHECK:     (('word-0', 0x8d),
184// CHECK:      ('word-1', 0xe000003)),
185// CHECK:     # Relocation 10
186// CHECK:     (('word-0', 0x79),
187// CHECK:      ('word-1', 0x8d000003)),
188// CHECK:     # Relocation 11
189// CHECK:     (('word-0', 0x71),
190// CHECK:      ('word-1', 0x7d000003)),
191// CHECK:     # Relocation 12
192// CHECK:     (('word-0', 0x69),
193// CHECK:      ('word-1', 0x6d000003)),
194// CHECK:     # Relocation 13
195// CHECK:     (('word-0', 0x63),
196// CHECK:      ('word-1', 0x1d000003)),
197// CHECK:     # Relocation 14
198// CHECK:     (('word-0', 0x5c),
199// CHECK:      ('word-1', 0x1d000003)),
200// CHECK:     # Relocation 15
201// CHECK:     (('word-0', 0x55),
202// CHECK:      ('word-1', 0x5c000002)),
203// CHECK:     # Relocation 16
204// CHECK:     (('word-0', 0x55),
205// CHECK:      ('word-1', 0xc000000)),
206// CHECK:     # Relocation 17
207// CHECK:     (('word-0', 0x4d),
208// CHECK:      ('word-1', 0x5e000002)),
209// CHECK:     # Relocation 18
210// CHECK:     (('word-0', 0x4d),
211// CHECK:      ('word-1', 0xe000000)),
212// CHECK:     # Relocation 19
213// CHECK:     (('word-0', 0x45),
214// CHECK:      ('word-1', 0x5e000002)),
215// CHECK:     # Relocation 20
216// CHECK:     (('word-0', 0x45),
217// CHECK:      ('word-1', 0xe000000)),
218// CHECK:     # Relocation 21
219// CHECK:     (('word-0', 0x3d),
220// CHECK:      ('word-1', 0xe000000)),
221// CHECK:     # Relocation 22
222// CHECK:     (('word-0', 0x35),
223// CHECK:      ('word-1', 0xe000000)),
224// CHECK:     # Relocation 23
225// CHECK:     (('word-0', 0x2d),
226// CHECK:      ('word-1', 0x8d000000)),
227// CHECK:     # Relocation 24
228// CHECK:     (('word-0', 0x26),
229// CHECK:      ('word-1', 0x6d000000)),
230// CHECK:     # Relocation 25
231// CHECK:     (('word-0', 0x20),
232// CHECK:      ('word-1', 0x1d000000)),
233// CHECK:     # Relocation 26
234// CHECK:     (('word-0', 0x1a),
235// CHECK:      ('word-1', 0x1d000000)),
236// CHECK:     # Relocation 27
237// CHECK:     (('word-0', 0x14),
238// CHECK:      ('word-1', 0x4d000000)),
239// CHECK:     # Relocation 28
240// CHECK:     (('word-0', 0xe),
241// CHECK:      ('word-1', 0x3d000000)),
242// CHECK:     # Relocation 29
243// CHECK:     (('word-0', 0x7),
244// CHECK:      ('word-1', 0x2d000000)),
245// CHECK:     # Relocation 30
246// CHECK:     (('word-0', 0x2),
247// CHECK:      ('word-1', 0x2d000000)),
248// CHECK:   ])
249// 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\x05(\x00\x00\x00')
250// CHECK:     # Section 2
251// CHECK:    (('section_name', '__debug_frame\x00\x00\x00')
252// CHECK:     ('segment_name', '__DWARF\x00\x00\x00\x00\x00\x00\x00\x00\x00')
253// CHECK:     ('address', 255)
254// CHECK:     ('size', 16)
255// CHECK:     ('offset', 783)
256// CHECK:     ('alignment', 0)
257// CHECK:     ('reloc_offset', 1120)
258// CHECK:     ('num_reloc', 2)
259// CHECK:     ('flags', 0x2000000)
260// CHECK:     ('reserved1', 0)
261// CHECK:     ('reserved2', 0)
262// CHECK:     ('reserved3', 0)
263// CHECK:    ),
264// CHECK:   ('_relocations', [
265// CHECK:     # Relocation 0
266// CHECK:     (('word-0', 0x8),
267// CHECK:      ('word-1', 0xe000007)),
268// CHECK:     # Relocation 1
269// CHECK:     (('word-0', 0x0),
270// CHECK:      ('word-1', 0x6000002)),
271// CHECK:   ])
272// CHECK:   ('_section_data', '\xd5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
273// CHECK:     # Section 3
274// CHECK:    (('section_name', '__literal8\x00\x00\x00\x00\x00\x00')
275// CHECK:     ('segment_name', '__TEXT\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
276// CHECK:     ('address', 271)
277// CHECK:     ('size', 32)
278// CHECK:     ('offset', 799)
279// CHECK:     ('alignment', 0)
280// CHECK:     ('reloc_offset', 0)
281// CHECK:     ('num_reloc', 0)
282// CHECK:     ('flags', 0x4)
283// CHECK:     ('reserved1', 0)
284// CHECK:     ('reserved2', 0)
285// CHECK:     ('reserved3', 0)
286// CHECK:    ),
287// CHECK:   ('_relocations', [
288// CHECK:   ])
289// 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')
290// CHECK:   ])
291// CHECK:  ),
292// CHECK:   # Load Command 1
293// CHECK:  (('command', 2)
294// CHECK:   ('size', 24)
295// CHECK:   ('symoff', 1136)
296// CHECK:   ('nsyms', 9)
297// CHECK:   ('stroff', 1280)
298// CHECK:   ('strsize', 52)
299// CHECK:   ('_string_data', '\x00_foobar\x00_ext_foo\x00_foo\x00_baz\x00_bar\x00_prev\x00_f2\x00_f3\x00f6\x00\x00\x00')
300// CHECK:   ('_symbols', [
301// CHECK:     # Symbol 0
302// CHECK:    (('n_strx', 18)
303// CHECK:     ('n_type', 0xe)
304// CHECK:     ('n_sect', 2)
305// CHECK:     ('n_desc', 0)
306// CHECK:     ('n_value', 40)
307// CHECK:     ('_string', '_foo')
308// CHECK:    ),
309// CHECK:     # Symbol 1
310// CHECK:    (('n_strx', 23)
311// CHECK:     ('n_type', 0xe)
312// CHECK:     ('n_sect', 2)
313// CHECK:     ('n_desc', 0)
314// CHECK:     ('n_value', 41)
315// CHECK:     ('_string', '_baz')
316// CHECK:    ),
317// CHECK:     # Symbol 2
318// CHECK:    (('n_strx', 28)
319// CHECK:     ('n_type', 0xe)
320// CHECK:     ('n_sect', 2)
321// CHECK:     ('n_desc', 0)
322// CHECK:     ('n_value', 101)
323// CHECK:     ('_string', '_bar')
324// CHECK:    ),
325// CHECK:     # Symbol 3
326// CHECK:    (('n_strx', 33)
327// CHECK:     ('n_type', 0xe)
328// CHECK:     ('n_sect', 2)
329// CHECK:     ('n_desc', 0)
330// CHECK:     ('n_value', 169)
331// CHECK:     ('_string', '_prev')
332// CHECK:    ),
333// CHECK:     # Symbol 4
334// CHECK:    (('n_strx', 39)
335// CHECK:     ('n_type', 0xe)
336// CHECK:     ('n_sect', 2)
337// CHECK:     ('n_desc', 0)
338// CHECK:     ('n_value', 221)
339// CHECK:     ('_string', '_f2')
340// CHECK:    ),
341// CHECK:     # Symbol 5
342// CHECK:    (('n_strx', 43)
343// CHECK:     ('n_type', 0xe)
344// CHECK:     ('n_sect', 2)
345// CHECK:     ('n_desc', 0)
346// CHECK:     ('n_value', 224)
347// CHECK:     ('_string', '_f3')
348// CHECK:    ),
349// CHECK:     # Symbol 6
350// CHECK:    (('n_strx', 47)
351// CHECK:     ('n_type', 0xe)
352// CHECK:     ('n_sect', 4)
353// CHECK:     ('n_desc', 0)
354// CHECK:     ('n_value', 287)
355// CHECK:     ('_string', 'f6')
356// CHECK:    ),
357// CHECK:     # Symbol 7
358// CHECK:    (('n_strx', 9)
359// CHECK:     ('n_type', 0x1)
360// CHECK:     ('n_sect', 0)
361// CHECK:     ('n_desc', 0)
362// CHECK:     ('n_value', 0)
363// CHECK:     ('_string', '_ext_foo')
364// CHECK:    ),
365// CHECK:     # Symbol 8
366// CHECK:    (('n_strx', 1)
367// CHECK:     ('n_type', 0x1)
368// CHECK:     ('n_sect', 0)
369// CHECK:     ('n_desc', 0)
370// CHECK:     ('n_value', 0)
371// CHECK:     ('_string', '_foobar')
372// CHECK:    ),
373// CHECK:   ])
374// CHECK:  ),
375// CHECK:   # Load Command 2
376// CHECK:  (('command', 11)
377// CHECK:   ('size', 80)
378// CHECK:   ('ilocalsym', 0)
379// CHECK:   ('nlocalsym', 7)
380// CHECK:   ('iextdefsym', 7)
381// CHECK:   ('nextdefsym', 0)
382// CHECK:   ('iundefsym', 7)
383// CHECK:   ('nundefsym', 2)
384// CHECK:   ('tocoff', 0)
385// CHECK:   ('ntoc', 0)
386// CHECK:   ('modtaboff', 0)
387// CHECK:   ('nmodtab', 0)
388// CHECK:   ('extrefsymoff', 0)
389// CHECK:   ('nextrefsyms', 0)
390// CHECK:   ('indirectsymoff', 0)
391// CHECK:   ('nindirectsyms', 0)
392// CHECK:   ('extreloff', 0)
393// CHECK:   ('nextrel', 0)
394// CHECK:   ('locreloff', 0)
395// CHECK:   ('nlocrel', 0)
396// CHECK:   ('_indirect_symbols', [
397// CHECK:   ])
398// CHECK:  ),
399// CHECK: ])
400