1// RUN: llvm-mc -triple i386-apple-darwin9 %s -filetype=obj -o - | macho-dump | FileCheck %s
2
3// FIXME: We are missing a lot of diagnostics on this kind of stuff which the
4// assembler has.
5
6        .lazy_symbol_pointer
7        .indirect_symbol sym_lsp_B
8        .long 0
9
10        .globl sym_lsp_A
11        .indirect_symbol sym_lsp_A
12        .long 0
13
14sym_lsp_C:
15        .indirect_symbol sym_lsp_C
16        .long 0
17
18// FIXME: Enable this test once missing llvm-mc support is in place.
19.if 0
20        .indirect_symbol sym_lsp_D
21        .long sym_lsp_D
22.endif
23
24        .indirect_symbol sym_lsp_E
25        .long 0xFA
26
27// FIXME: Enable this test once missing llvm-mc support is in place.
28.if 0
29sym_lsp_F = 10
30        .indirect_symbol sym_lsp_F
31        .long 0
32.endif
33
34        .globl sym_lsp_G
35sym_lsp_G:
36        .indirect_symbol sym_lsp_G
37        .long 0
38
39        .non_lazy_symbol_pointer
40        .indirect_symbol sym_nlp_B
41        .long 0
42
43        .globl sym_nlp_A
44        .indirect_symbol sym_nlp_A
45        .long 0
46
47sym_nlp_C:
48        .indirect_symbol sym_nlp_C
49        .long 0
50
51// FIXME: Enable this test once missing llvm-mc support is in place.
52.if 0
53        .indirect_symbol sym_nlp_D
54        .long sym_nlp_D
55.endif
56
57        .indirect_symbol sym_nlp_E
58        .long 0xAF
59
60// FIXME: Enable this test once missing llvm-mc support is in place.
61.if 0
62sym_nlp_F = 10
63        .indirect_symbol sym_nlp_F
64        .long 0
65.endif
66
67        .globl sym_nlp_G
68sym_nlp_G:
69        .indirect_symbol sym_nlp_G
70        .long 0
71
72// CHECK: ('cputype', 7)
73// CHECK: ('cpusubtype', 3)
74// CHECK: ('filetype', 1)
75// CHECK: ('num_load_commands', 3)
76// CHECK: ('load_commands_size', 364)
77// CHECK: ('flag', 0)
78// CHECK: ('load_commands', [
79// CHECK:   # Load Command 0
80// CHECK:  (('command', 1)
81// CHECK:   ('size', 260)
82// CHECK:   ('segment_name', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
83// CHECK:   ('vm_addr', 0)
84// CHECK:   ('vm_size', 40)
85// CHECK:   ('file_offset', 392)
86// CHECK:   ('file_size', 40)
87// CHECK:   ('maxprot', 7)
88// CHECK:   ('initprot', 7)
89// CHECK:   ('num_sections', 3)
90// CHECK:   ('flags', 0)
91// CHECK:   ('sections', [
92// CHECK:     # Section 0
93// CHECK:    (('section_name', '__text\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
94// CHECK:     ('address', 0)
95// CHECK:     ('size', 0)
96// CHECK:     ('offset', 392)
97// CHECK:     ('alignment', 0)
98// CHECK:     ('reloc_offset', 0)
99// CHECK:     ('num_reloc', 0)
100// CHECK:     ('flags', 0x80000000)
101// CHECK:     ('reserved1', 0)
102// CHECK:     ('reserved2', 0)
103// CHECK:    ),
104// CHECK:     # Section 1
105// CHECK:    (('section_name', '__la_symbol_ptr\x00')
106// CHECK:     ('segment_name', '__DATA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
107// CHECK:     ('address', 0)
108// CHECK:     ('size', 20)
109// CHECK:     ('offset', 392)
110// CHECK:     ('alignment', 2)
111// CHECK:     ('reloc_offset', 0)
112// CHECK:     ('num_reloc', 0)
113// CHECK:     ('flags', 0x7)
114// CHECK:     ('reserved1', 0)
115// CHECK:     ('reserved2', 0)
116// CHECK:    ),
117// CHECK:     # Section 2
118// CHECK:    (('section_name', '__nl_symbol_ptr\x00')
119// CHECK:     ('segment_name', '__DATA\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
120// CHECK:     ('address', 20)
121// CHECK:     ('size', 20)
122// CHECK:     ('offset', 412)
123// CHECK:     ('alignment', 2)
124// CHECK:     ('reloc_offset', 0)
125// CHECK:     ('num_reloc', 0)
126// CHECK:     ('flags', 0x6)
127        // FIXME: Enable this when fixed!
128// CHECX:     ('reserved1', 5)
129// CHECK:     ('reserved2', 0)
130// CHECK:    ),
131// CHECK:   ])
132// CHECK:  ),
133// CHECK:   # Load Command 1
134// CHECK:  (('command', 2)
135// CHECK:   ('size', 24)
136// CHECK:   ('symoff', 472)
137// CHECK:   ('nsyms', 10)
138// CHECK:   ('stroff', 592)
139// CHECK:   ('strsize', 104)
140// CHECK:   ('_string_data', '\x00sym_lsp_A\x00sym_lsp_G\x00sym_nlp_A\x00sym_nlp_G\x00sym_nlp_B\x00sym_nlp_E\x00sym_lsp_B\x00sym_lsp_E\x00sym_lsp_C\x00sym_nlp_C\x00\x00\x00\x00')
141// CHECK:   ('_symbols', [
142// CHECK:     # Symbol 0
143// CHECK:    (('n_strx', 81)
144// CHECK:     ('n_type', 0xe)
145// CHECK:     ('n_sect', 2)
146// CHECK:     ('n_desc', 0)
147// CHECK:     ('n_value', 8)
148// CHECK:     ('_string', 'sym_lsp_C')
149// CHECK:    ),
150// CHECK:     # Symbol 1
151// CHECK:    (('n_strx', 91)
152// CHECK:     ('n_type', 0xe)
153// CHECK:     ('n_sect', 3)
154// CHECK:     ('n_desc', 0)
155// CHECK:     ('n_value', 28)
156// CHECK:     ('_string', 'sym_nlp_C')
157// CHECK:    ),
158// CHECK:     # Symbol 2
159// CHECK:    (('n_strx', 11)
160// CHECK:     ('n_type', 0xf)
161// CHECK:     ('n_sect', 2)
162// CHECK:     ('n_desc', 0)
163// CHECK:     ('n_value', 16)
164// CHECK:     ('_string', 'sym_lsp_G')
165// CHECK:    ),
166// CHECK:     # Symbol 3
167// CHECK:    (('n_strx', 31)
168// CHECK:     ('n_type', 0xf)
169// CHECK:     ('n_sect', 3)
170// CHECK:     ('n_desc', 0)
171// CHECK:     ('n_value', 36)
172// CHECK:     ('_string', 'sym_nlp_G')
173// CHECK:    ),
174// CHECK:     # Symbol 4
175// CHECK:    (('n_strx', 1)
176// CHECK:     ('n_type', 0x1)
177// CHECK:     ('n_sect', 0)
178// CHECK:     ('n_desc', 0)
179// CHECK:     ('n_value', 0)
180// CHECK:     ('_string', 'sym_lsp_A')
181// CHECK:    ),
182// CHECK:     # Symbol 5
183// CHECK:    (('n_strx', 61)
184// CHECK:     ('n_type', 0x1)
185// CHECK:     ('n_sect', 0)
186// CHECK:     ('n_desc', 1)
187// CHECK:     ('n_value', 0)
188// CHECK:     ('_string', 'sym_lsp_B')
189// CHECK:    ),
190// CHECK:     # Symbol 6
191// CHECK:    (('n_strx', 71)
192// CHECK:     ('n_type', 0x1)
193// CHECK:     ('n_sect', 0)
194// CHECK:     ('n_desc', 1)
195// CHECK:     ('n_value', 0)
196// CHECK:     ('_string', 'sym_lsp_E')
197// CHECK:    ),
198// CHECK:     # Symbol 7
199// CHECK:    (('n_strx', 21)
200// CHECK:     ('n_type', 0x1)
201// CHECK:     ('n_sect', 0)
202// CHECK:     ('n_desc', 0)
203// CHECK:     ('n_value', 0)
204// CHECK:     ('_string', 'sym_nlp_A')
205// CHECK:    ),
206// CHECK:     # Symbol 8
207// CHECK:    (('n_strx', 41)
208// CHECK:     ('n_type', 0x1)
209// CHECK:     ('n_sect', 0)
210// CHECK:     ('n_desc', 0)
211// CHECK:     ('n_value', 0)
212// CHECK:     ('_string', 'sym_nlp_B')
213// CHECK:    ),
214// CHECK:     # Symbol 9
215// CHECK:    (('n_strx', 51)
216// CHECK:     ('n_type', 0x1)
217// CHECK:     ('n_sect', 0)
218// CHECK:     ('n_desc', 0)
219// CHECK:     ('n_value', 0)
220// CHECK:     ('_string', 'sym_nlp_E')
221// CHECK:    ),
222// CHECK:   ])
223// CHECK:  ),
224// CHECK:   # Load Command 2
225// CHECK:  (('command', 11)
226// CHECK:   ('size', 80)
227// CHECK:   ('ilocalsym', 0)
228// CHECK:   ('nlocalsym', 2)
229// CHECK:   ('iextdefsym', 2)
230// CHECK:   ('nextdefsym', 2)
231// CHECK:   ('iundefsym', 4)
232// CHECK:   ('nundefsym', 6)
233// CHECK:   ('tocoff', 0)
234// CHECK:   ('ntoc', 0)
235// CHECK:   ('modtaboff', 0)
236// CHECK:   ('nmodtab', 0)
237// CHECK:   ('extrefsymoff', 0)
238// CHECK:   ('nextrefsyms', 0)
239// CHECK:   ('indirectsymoff', 432)
240// CHECK:   ('nindirectsyms', 10)
241// CHECK:   ('extreloff', 0)
242// CHECK:   ('nextrel', 0)
243// CHECK:   ('locreloff', 0)
244// CHECK:   ('nlocrel', 0)
245// CHECK:   ('_indirect_symbols', [
246// CHECK:     # Indirect Symbol 0
247// CHECK:     (('symbol_index', 0x5),),
248// CHECK:     # Indirect Symbol 1
249// CHECK:     (('symbol_index', 0x4),),
250// CHECK:     # Indirect Symbol 2
251// CHECK:     (('symbol_index', 0x0),),
252// CHECK:     # Indirect Symbol 3
253// CHECK:     (('symbol_index', 0x6),),
254// CHECK:     # Indirect Symbol 4
255// CHECK:     (('symbol_index', 0x2),),
256// CHECK:     # Indirect Symbol 5
257// CHECK:     (('symbol_index', 0x8),),
258// CHECK:     # Indirect Symbol 6
259// CHECK:     (('symbol_index', 0x7),),
260// CHECK:     # Indirect Symbol 7
261// CHECK:     (('symbol_index', 0x80000000),),
262// CHECK:     # Indirect Symbol 8
263// CHECK:     (('symbol_index', 0x9),),
264// CHECK:     # Indirect Symbol 9
265// CHECK:     (('symbol_index', 0x3),),
266// CHECK:   ])
267// CHECK:  ),
268// CHECK: ])
269