1RUN: dsymutil -o - %p/../Inputs/basic.macho.i386 -f | llvm-readobj --file-headers -l -S --symbols - | FileCheck %s -check-prefixes=CHECK,CHECK32
2RUN: dsymutil -o - -oso-prepend-path=%p/.. %p/../Inputs/basic.macho.x86_64 -f | llvm-readobj --file-headers -l -S --symbols - | FileCheck %s -check-prefixes=CHECK,CHECK64
3
4This test checks that the dSYM companion binaries generated in 32 and 64 bits
5are correct. The check are pretty strict (we check even the offsets and sizes
6of the sections) in order to test the VM address layout algorithm. As the
7debug sections are generated, this is a bit risky, but I don't expect
8dsymutil's output to change much for these tiny C programs so this should
9be OK.
10The 32bits version doesn't have object files, thus it has basically no debug
11sections.
12
13CHECK32: Format: Mach-O 32-bit i386
14CHECK32: Arch: i386
15CHECK32: AddressSize: 32bit
16CHECK64: Format: Mach-O 64-bit x86-64
17CHECK64: Arch: x86_64
18CHECK64: AddressSize: 64bit
19CHECK:   MachHeader {
20CHECK32:   Magic: Magic (0xFEEDFACE)
21CHECK32:   CpuType: X86 (0x7)
22CHECK32:   CpuSubType: CPU_SUBTYPE_I386_ALL (0x3)
23CHECK64:   Magic: Magic64 (0xFEEDFACF)
24CHECK64:   CpuType: X86-64 (0x1000007)
25CHECK64:   CpuSubType: CPU_SUBTYPE_X86_64_ALL (0x3)
26CHECK:     FileType: DWARFSymbol (0xA)
27CHECK:     NumOfLoadCommands: 7
28CHECK:     Flags [ (0x0)
29CHECK:   }
30CHECK:   Sections [
31CHECK:     Section {
32CHECK:       Name: __text
33CHECK:       Segment: __TEXT
34CHECK32:     Address: 0x1E90
35CHECK32:     Size: 0x11A
36CHECK64:     Address: 0x100000EA0
37CHECK64:     Size: 0x109
38CHECK:       Offset: 0
39CHECK:       Alignment: 4
40CHECK:       RelocationOffset: 0x0
41CHECK:       RelocationCount: 0
42CHECK:       Type: Regular (0x0)
43CHECK:       Attributes [ (0x800004)
44CHECK:         PureInstructions (0x800000)
45CHECK:         SomeInstructions (0x4)
46CHECK:       ]
47CHECK:       Reserved1: 0x0
48CHECK:       Reserved2: 0x0
49CHECK:     }
50CHECK:     Section {
51CHECK:       Name: __unwind_info
52CHECK:       Segment: __TEXT
53CHECK32:     Address: 0x1FAC
54CHECK64:     Address: 0x100000FAC
55CHECK:       Size: 0x48
56CHECK:       Offset: 0
57CHECK:       Alignment: 2
58CHECK:       RelocationOffset: 0x0
59CHECK:       RelocationCount: 0
60CHECK:       Type: Regular (0x0)
61CHECK:       Attributes [ (0x0)
62CHECK:       ]
63CHECK:       Reserved1: 0x0
64CHECK:       Reserved2: 0x0
65CHECK:     }
66CHECK32:  Section {
67CHECK32:    Name: __nl_symbol_ptr
68CHECK32:    Segment: __DATA
69CHECK32:    Address: 0x2000
70CHECK32:    Size: 0x4
71CHECK32:    Offset: 0
72CHECK32:    Alignment: 2
73CHECK32:    RelocationOffset: 0x0
74CHECK32:    RelocationCount: 0
75CHECK32:    Type: NonLazySymbolPointers (0x6)
76CHECK32:    Attributes [ (0x0)
77CHECK32:    ]
78CHECK32:    Reserved1: 0x0
79CHECK32:    Reserved2: 0x0
80CHECK32:  }
81CHECK:     Section {
82CHECK:       Name: __data
83CHECK:       Segment: __DATA
84CHECK32:     Address: 0x2004
85CHECK64:     Address: 0x100001000
86CHECK:       Size: 0x4
87CHECK:       Offset: 0
88CHECK:       Alignment: 2
89CHECK:       RelocationOffset: 0x0
90CHECK:       RelocationCount: 0
91CHECK:       Type: Regular (0x0)
92CHECK:       Attributes [ (0x0)
93CHECK:       ]
94CHECK:       Reserved1: 0x0
95CHECK:       Reserved2: 0x0
96CHECK:     }
97CHECK:     Section {
98CHECK:       Name: __common
99CHECK:       Segment: __DATA
100CHECK32:     Address: 0x2008
101CHECK64:     Address: 0x100001004
102CHECK:       Size: 0x4
103CHECK:       Offset: 0
104CHECK:       Alignment: 2
105CHECK:       RelocationOffset: 0x0
106CHECK:       RelocationCount: 0
107CHECK:       Type: ZeroFill (0x1)
108CHECK:       Attributes [ (0x0)
109CHECK:       ]
110CHECK:       Reserved1: 0x0
111CHECK:       Reserved2: 0x0
112CHECK:     }
113CHECK:     Section {
114CHECK:       Name: __bss
115CHECK:       Segment: __DATA
116CHECK32:     Address: 0x200C
117CHECK64:     Address: 0x100001008
118CHECK:       Size: 0x4
119CHECK:       Offset: 0
120CHECK:       Alignment: 2
121CHECK:       RelocationOffset: 0x0
122CHECK:       RelocationCount: 0
123CHECK:       Type: ZeroFill (0x1)
124CHECK:       Attributes [ (0x0)
125CHECK:       ]
126CHECK:       Reserved1: 0x0
127CHECK:       Reserved2: 0x0
128CHECK:     }
129CHECK64:   Section {
130CHECK64:     Name: __debug_line
131CHECK64:     Segment: __DWARF
132CHECK64:     Address: 0x100003000
133CHECK64:     Size: 0xEA
134CHECK64:     Offset: 8192
135CHECK64:     Alignment: 0
136CHECK64:     RelocationOffset: 0x0
137CHECK64:     RelocationCount: 0
138CHECK64:     Type: Regular (0x0)
139CHECK64:     Attributes [ (0x0)
140CHECK64:     ]
141CHECK64:     Reserved1: 0x0
142CHECK64:     Reserved2: 0x0
143CHECK64:   }
144CHECK64:   Section {
145CHECK64:     Name: __debug_pubnames
146CHECK64:     Segment: __DWARF
147CHECK64:     Address: 0x1000030EA
148CHECK64:     Size: 0x7F
149CHECK64:     Offset: 8426
150CHECK64:     Alignment: 0
151CHECK64:     RelocationOffset: 0x0
152CHECK64:     RelocationCount: 0
153CHECK64:     Type: Regular (0x0)
154CHECK64:     Attributes [ (0x0)
155CHECK64:     ]
156CHECK64:     Reserved1: 0x0
157CHECK64:     Reserved2: 0x0
158CHECK64:   }
159CHECK64:   Section {
160CHECK64:     Name: __debug_pubtypes
161CHECK64:     Segment: __DWARF
162CHECK64:     Address: 0x100003169
163CHECK64:     Size: 0x57
164CHECK64:     Offset: 8553
165CHECK64:     Alignment: 0
166CHECK64:     RelocationOffset: 0x0
167CHECK64:     RelocationCount: 0
168CHECK64:     Type: Regular (0x0)
169CHECK64:     Attributes [ (0x0)
170CHECK64:     ]
171CHECK64:     Reserved1: 0x0
172CHECK64:     Reserved2: 0x0
173CHECK64:   }
174CHECK64:   Section {
175CHECK64:     Name: __debug_aranges
176CHECK64:     Segment: __DWARF
177CHECK64:     Address: 0x1000031C0
178CHECK64:     Size: 0xB0
179CHECK64:     Offset: 8640
180CHECK64:     Alignment: 0
181CHECK64:     RelocationOffset: 0x0
182CHECK64:     RelocationCount: 0
183CHECK64:     Type: Regular (0x0)
184CHECK64:     Attributes [ (0x0)
185CHECK64:     ]
186CHECK64:     Reserved1: 0x0
187CHECK64:     Reserved2: 0x0
188CHECK64:   }
189CHECK64:   Section {
190CHECK64:     Name: __debug_info
191CHECK64:     Segment: __DWARF
192CHECK64:     Address: 0x100003270
193CHECK64:     Size: 0x1BC
194CHECK64:     Offset: 8816
195CHECK64:     Alignment: 0
196CHECK64:     RelocationOffset: 0x0
197CHECK64:     RelocationCount: 0
198CHECK64:     Type: Regular (0x0)
199CHECK64:     Attributes [ (0x0)
200CHECK64:     ]
201CHECK64:     Reserved1: 0x0
202CHECK64:     Reserved2: 0x0
203CHECK64:   }
204CHECK:     Section {
205CHECK:       Name: __debug_abbrev
206CHECK:       Segment: __DWARF
207CHECK32:     Address: 0x4000
208CHECK32:     Size: 0x1
209CHECK32:     Offset: 8192
210CHECK64:     Address: 0x10000342C
211CHECK64:     Size: 0x8F
212CHECK64:     Offset: 9260
213CHECK:       Alignment: 0
214CHECK:       RelocationOffset: 0x0
215CHECK:       RelocationCount: 0
216CHECK:       Type: Regular (0x0)
217CHECK:       Attributes [ (0x0)
218CHECK:       ]
219CHECK:       Reserved1: 0x0
220CHECK:       Reserved2: 0x0
221CHECK:     }
222CHECK:     Section {
223CHECK:       Name: __debug_str
224CHECK:       Segment: __DWARF
225CHECK32:     Address: 0x4001
226CHECK32:     Size: 0x1
227CHECK32:     Offset: 8193
228CHECK64:     Address: 0x1000034BB
229CHECK64:     Size: 0x9F
230CHECK64:     Offset: 9403
231CHECK:       Alignment: 0
232CHECK:       RelocationOffset: 0x0
233CHECK:       RelocationCount: 0
234CHECK:       Type: Regular (0x0)
235CHECK:       Attributes [ (0x0)
236CHECK:       ]
237CHECK:       Reserved1: 0x0
238CHECK:       Reserved2: 0x0
239CHECK:     }
240CHECK:   ]
241CHECK:   Symbols [
242CHECK:     Symbol {
243CHECK:       Name: _inc (2)
244CHECK:       Type: Section (0xE)
245CHECK:       Section: __text
246CHECK:       RefType: UndefinedNonLazy (0x0)
247CHECK:       Flags [ (0x0)
248CHECK:       ]
249CHECK32:     Value: 0x1F20
250CHECK64:     Value: 0x100000F20
251CHECK:     }
252CHECK:     Symbol {
253CHECK:       Name: _inc (2)
254CHECK:       Type: Section (0xE)
255CHECK:       Section: __text
256CHECK:       RefType: UndefinedNonLazy (0x0)
257CHECK:       Flags [ (0x0)
258CHECK:       ]
259CHECK32:     Value: 0x1F90
260CHECK64:     Value: 0x100000F90
261CHECK:     }
262CHECK:     Symbol {
263CHECK:       Name: _baz (7)
264CHECK:       Type: Section (0xE)
265CHECK:       Section: __data
266CHECK:       RefType: UndefinedNonLazy (0x0)
267CHECK:       Flags [ (0x0)
268CHECK:       ]
269CHECK32:     Value: 0x2004
270CHECK64:     Value: 0x100001000
271CHECK:     }
272CHECK:     Symbol {
273CHECK:       Name: _private_int (12)
274CHECK:       Type: Section (0xE)
275CHECK:       Section: __bss
276CHECK:       RefType: UndefinedNonLazy (0x0)
277CHECK:       Flags [ (0x0)
278CHECK:       ]
279CHECK32:     Value: 0x200C
280CHECK64:     Value: 0x100001008
281CHECK:     }
282CHECK:     Symbol {
283CHECK:       Name: __mh_execute_header (25)
284CHECK:       Extern
285CHECK:       Type: Section (0xE)
286CHECK:       Section: __text
287CHECK:       RefType: UndefinedNonLazy (0x0)
288CHECK:       Flags [ (0x10)
289CHECK:         ReferencedDynamically (0x10)
290CHECK:       ]
291CHECK32:     Value: 0x1000
292CHECK64:     Value: 0x100000000
293CHECK:     }
294CHECK:     Symbol {
295CHECK:       Name: _bar (45)
296CHECK:       Extern
297CHECK:       Type: Section (0xE)
298CHECK:       Section: __text
299CHECK:       RefType: UndefinedNonLazy (0x0)
300CHECK:       Flags [ (0x0)
301CHECK:       ]
302CHECK32:     Value: 0x1F40
303CHECK64:     Value: 0x100000F40
304CHECK:     }
305CHECK:     Symbol {
306CHECK:       Name: _foo (50)
307CHECK:       Extern
308CHECK:       Type: Section (0xE)
309CHECK:       Section: __text
310CHECK:       RefType: UndefinedNonLazy (0x0)
311CHECK:       Flags [ (0x0)
312CHECK:       ]
313CHECK32:     Value: 0x1EC0
314CHECK64:     Value: 0x100000ED0
315CHECK:     }
316CHECK:     Symbol {
317CHECK:       Name: _main (55)
318CHECK:       Extern
319CHECK:       Type: Section (0xE)
320CHECK:       Section: __text
321CHECK:       RefType: UndefinedNonLazy (0x0)
322CHECK:       Flags [ (0x0)
323CHECK:       ]
324CHECK32:     Value: 0x1E90
325CHECK64:     Value: 0x100000EA0
326CHECK:     }
327CHECK:     Symbol {
328CHECK:       Name: _val (61)
329CHECK:       Extern
330CHECK:       Type: Section (0xE)
331CHECK:       Section: __common
332CHECK:       RefType: UndefinedNonLazy (0x0)
333CHECK:       Flags [ (0x0)
334CHECK:       ]
335CHECK32:     Value: 0x2008
336CHECK64:     Value: 0x100001004
337CHECK:     }
338CHECK:   ]
339
340