xref: /llvm-project/llvm/test/tools/dsymutil/basic-linking.test (revision 0ed8194256c6c96875ed9dd102d15ee8a9260fec)
1RUN: dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 | FileCheck %s
2RUN: dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic-lto.macho.x86_64 | FileCheck %s --check-prefix=CHECK-LTO
3RUN: dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefix=CHECK-ARCHIVE
4RUN: dsymutil -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 %p/Inputs/basic-lto.macho.x86_64 %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefixes=CHECK,CHECK-LTO,CHECK-ARCHIVE
5RUN: dsymutil -no-output -verbose -oso-prepend-path=%p -D %p/Inputs %p/Inputs/basic-relink.macho.arm64.dylib | FileCheck %s --check-prefix=CHECK-RELINK
6RUN: dsymutil -no-output -verbose -oso-prepend-path=%p -D %p/Inputs %p/Inputs/two-level-relink.macho.arm64.dylib | FileCheck %s --check-prefix=CHECK-RELINK-TWO
7RUN: dsymutil -no-output -verbose -oso-prepend-path=%p -build-variant-suffix=_debug -D WrongPath -D %p/Inputs %p/Inputs/variant-relink.macho.arm64.dylib | FileCheck %s --check-prefix=CHECK-RELINK-VARIANT
8
9RUN: dsymutil --linker parallel -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 | FileCheck %s
10RUN: dsymutil --linker parallel -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic-lto.macho.x86_64 | FileCheck %s --check-prefix=CHECK-LTO
11RUN: dsymutil --linker parallel -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefix=CHECK-ARCHIVE
12RUN: dsymutil --linker parallel -no-output -verbose -oso-prepend-path=%p %p/Inputs/basic.macho.x86_64 %p/Inputs/basic-lto.macho.x86_64 %p/Inputs/basic-archive.macho.x86_64 | FileCheck %s --check-prefixes=CHECK,CHECK-LTO,CHECK-ARCHIVE
13
14This test check the basic Dwarf linking process through the debug dumps.
15
16================================= Simple link ================================
17CHECK: DEBUG MAP OBJECT: {{.*}}basic1.macho.x86_64.o
18CHECK: Input compilation unit:
19CHECK-NEXT: TAG_compile_unit
20CHECK-NOT: TAG
21CHECK: AT_name {{.*}}basic1.c
22
23CHECK: DEBUG MAP OBJECT: {{.*}}basic2.macho.x86_64.o
24CHECK: Input compilation unit:
25CHECK-NEXT: TAG_compile_unit
26CHECK-NOT: TAG
27CHECK: AT_name {{.*}}basic2.c
28
29CHECK: DEBUG MAP OBJECT: {{.*}}basic3.macho.x86_64.o
30CHECK: Input compilation unit:
31CHECK-NEXT: TAG_compile_unit
32CHECK-NOT: TAG
33CHECK: AT_name {{.*}}basic3.c
34
35CHECK-NOT: Found valid debug map entry
36CHECK: Found valid debug map entry: _main	0x0000000000000000 => 0x0000000100000ea0
37CHECK-NEXT: Keeping subprogram DIE:
38CHECK-NEXT: DW_TAG_subprogram
39CHECK-NEXT:   DW_AT_name{{.*}}"main"
40
41CHECK: Found valid debug map entry: _private_int 	0x0000000000000560 => 0x0000000100001008
42CHECK-NEXT: Keeping variable DIE:
43CHECK-NEXT: DW_TAG_variable
44CHECK-NEXT:   DW_AT_name {{.*}}"private_int"
45CHECK-NOT: Found valid debug map entry
46CHECK: Found valid debug map entry: _baz	0x0000000000000310 => 0x0000000100001000
47CHECK-NEXT: Keeping variable DIE:
48CHECK-NEXT: DW_TAG_variable
49CHECK-NEXT:   DW_AT_name {{.*}}"baz"
50CHECK-NOT: Found valid debug map entry
51CHECK: Found valid debug map entry: _foo	0x0000000000000020 => 0x0000000100000ed0
52CHECK-NEXT: Keeping subprogram DIE:
53CHECK-NEXT: DW_TAG_subprogram
54CHECK-NEXT:   DW_AT_name {{.*}}"foo"
55CHECK-NOT: Found valid debug map entry
56CHECK: Found valid debug map entry: _inc	0x0000000000000070 => 0x0000000100000f20
57CHECK-NEXT: Keeping subprogram DIE:
58CHECK-NEXT: DW_TAG_subprogram
59CHECK-NEXT:   DW_AT_name {{.*}}"inc"
60
61CHECK-NOT: Found valid debug map entry
62CHECK: Found valid debug map entry: _val	0xffffffffffffffff => 0x0000000100001004
63CHECK-NEXT: Keeping variable DIE:
64CHECK-NEXT: DW_TAG_variable
65CHECK-NEXT:   DW_AT_name {{.*}}"val"
66CHECK-NOT: Found valid debug map entry
67CHECK: Found valid debug map entry: _bar	0x0000000000000020 => 0x0000000100000f40
68CHECK-NEXT: Keeping subprogram DIE:
69CHECK-NEXT: DW_TAG_subprogram
70CHECK-NEXT:   DW_AT_name {{.*}}"bar"
71CHECK-NOT: Found valid debug map entry
72CHECK: Found valid debug map entry: _inc	0x0000000000000070 => 0x0000000100000f90
73CHECK-NEXT: Keeping subprogram DIE:
74CHECK-NEXT: DW_TAG_subprogram
75CHECK-NEXT:   DW_AT_name {{.*}}"inc")
76
77
78================================= LTO link ================================
79CHECK-LTO: DEBUG MAP OBJECT: {{.*}}basic-lto.macho.x86_64.o
80CHECK-LTO: Input compilation unit:
81CHECK-LTO-NEXT: TAG_compile_unit
82CHECK-LTO-NOT: TAG
83CHECK-LTO: AT_name {{.*}}basic1.c
84CHECK-LTO: Input compilation unit:
85CHECK-LTO-NEXT: TAG_compile_unit
86CHECK-LTO-NOT: TAG
87CHECK-LTO: AT_name {{.*}}basic2.c
88CHECK-LTO: Input compilation unit:
89CHECK-LTO-NEXT: TAG_compile_unit
90CHECK-LTO-NOT: TAG
91CHECK-LTO: AT_name {{.*}}basic3.c
92
93CHECK-LTO-NOT: Found valid debug map entry
94CHECK-LTO: Found valid debug map entry: _main	0x0000000000000000 => 0x0000000100000f40
95CHECK-LTO-NEXT: Keeping subprogram DIE:
96CHECK-LTO-NEXT: DW_TAG_subprogram
97CHECK-LTO-NEXT:   DW_AT_name {{.*}}"main"
98CHECK-LTO-NOT: Found valid debug map entry
99CHECK-LTO: Found valid debug map entry: _private_int 	0x00000000000008e8 => 0x0000000100001008
100CHECK-LTO-NEXT: Keeping variable DIE:
101CHECK-LTO-NEXT: DW_TAG_variable
102CHECK-LTO-NEXT:   DW_AT_name {{.*}}"private_int"
103CHECK-LTO-NOT: Found valid debug map entry
104CHECK-LTO: Found valid debug map entry: _baz	0x0000000000000658 => 0x0000000100001000
105CHECK-LTO-NEXT: Keeping variable DIE:
106CHECK-LTO-NEXT: DW_TAG_variable
107CHECK-LTO-NEXT:   DW_AT_name {{.*}} "baz"
108CHECK-LTO-NOT: Found valid debug map entry
109CHECK-LTO: Found valid debug map entry: _foo	0x0000000000000010 => 0x0000000100000f50
110CHECK-LTO-NEXT: Keeping subprogram DIE:
111CHECK-LTO-NEXT: DW_TAG_subprogram
112CHECK-LTO-NEXT:   DW_AT_name {{.*}}"foo"
113CHECK-LTO-NOT: Found valid debug map entry
114CHECK-LTO: Found valid debug map entry: _val	0x00000000000008ec => 0x0000000100001004
115CHECK-LTO-NEXT: Keeping variable DIE:
116CHECK-LTO-NEXT: DW_TAG_variable
117CHECK-LTO-NEXT:   DW_AT_name {{.*}}"val"
118CHECK-LTO-NOT: Found valid debug map entry
119CHECK-LTO: Found valid debug map entry: _bar	0x0000000000000050 => 0x0000000100000f90
120CHECK-LTO-NEXT: Keeping subprogram DIE:
121CHECK-LTO-NEXT: DW_TAG_subprogram
122CHECK-LTO-NEXT:   DW_AT_name {{.*}}"bar"
123
124
125================================= Archive link ================================
126CHECK-ARCHIVE: DEBUG MAP OBJECT: {{.*}}basic1.macho.x86_64.o
127CHECK-ARCHIVE: Input compilation unit:
128CHECK-ARCHIVE-NEXT: TAG_compile_unit
129CHECK-ARCHIVE-NOT: TAG
130CHECK-ARCHIVE: AT_name {{.*}}basic1.c
131
132CHECK-ARCHIVE: DEBUG MAP OBJECT: {{.*}}libbasic.a(basic2.macho.x86_64.o)
133CHECK-ARCHIVE: Input compilation unit:
134CHECK-ARCHIVE-NEXT: TAG_compile_unit
135CHECK-ARCHIVE-NOT: TAG
136CHECK-ARCHIVE: AT_name {{.*}}basic2.c
137
138CHECK-ARCHIVE: DEBUG MAP OBJECT: {{.*}}libbasic.a(basic3.macho.x86_64.o)
139CHECK-ARCHIVE: Input compilation unit:
140CHECK-ARCHIVE-NEXT: TAG_compile_unit
141CHECK-ARCHIVE-NOT: TAG
142CHECK-ARCHIVE: AT_name {{.*}}basic3.c
143
144CHECK-ARCHIVE-NOT: Found valid debug map entry
145CHECK-ARCHIVE: Found valid debug map entry: _main	0x0000000000000000 => 0x0000000100000ea0
146CHECK-ARCHIVE-NEXT: Keeping subprogram DIE:
147CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
148CHECK-ARCHIVE-NEXT:   DW_AT_name{{.*}}"main"
149
150CHECK-ARCHIVE-NOT: Found valid debug map entry
151CHECK-ARCHIVE: Found valid debug map entry: _private_int	0x0000000000000560 => 0x0000000100001004
152CHECK-ARCHIVE-NEXT: Keeping variable DIE:
153CHECK-ARCHIVE-NEXT: DW_TAG_variable
154CHECK-ARCHIVE-NEXT:   DW_AT_name {{.*}}"private_int"
155CHECK-ARCHIVE-NOT: Found valid debug map entry
156CHECK-ARCHIVE: Found valid debug map entry: _baz	0x0000000000000310 => 0x0000000100001000
157CHECK-ARCHIVE-NEXT: Keeping variable DIE:
158CHECK-ARCHIVE-NEXT: DW_TAG_variable
159CHECK-ARCHIVE-NEXT:   DW_AT_name {{.*}}"baz"
160CHECK-ARCHIVE-NOT: Found valid debug map entry
161CHECK-ARCHIVE: Found valid debug map entry: _foo	0x0000000000000020 => 0x0000000100000ed0
162CHECK-ARCHIVE-NEXT: Keeping subprogram DIE:
163CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
164CHECK-ARCHIVE-NEXT:   DW_AT_name {{.*}}"foo"
165CHECK-ARCHIVE-NOT: Found valid debug map entry
166CHECK-ARCHIVE: Found valid debug map entry: _inc	0x0000000000000070 => 0x0000000100000f20
167CHECK-ARCHIVE-NEXT: Keeping subprogram DIE:
168CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
169CHECK-ARCHIVE-NEXT:   DW_AT_name {{.*}}"inc"
170
171CHECK-ARCHIVE-NOT: Found valid debug map entry
172CHECK-ARCHIVE: Found valid debug map entry: _val	0xffffffffffffffff => 0x0000000100001008
173CHECK-ARCHIVE-NEXT: Keeping variable DIE:
174CHECK-ARCHIVE-NEXT: DW_TAG_variable
175CHECK-ARCHIVE-NEXT:   DW_AT_name {{.*}}"val"
176CHECK-ARCHIVE-NOT: Found valid debug map entry
177CHECK-ARCHIVE: Found valid debug map entry: _bar	0x0000000000000020 => 0x0000000100000f40
178CHECK-ARCHIVE-NEXT: Keeping subprogram DIE:
179CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
180CHECK-ARCHIVE-NEXT:   DW_AT_name {{.*}}"bar"
181CHECK-ARCHIVE-NOT: Found valid debug map entry
182CHECK-ARCHIVE: Found valid debug map entry: _inc	0x0000000000000070 => 0x0000000100000f90
183CHECK-ARCHIVE-NEXT: Keeping subprogram DIE:
184CHECK-ARCHIVE-NEXT: DW_TAG_subprogram
185CHECK-ARCHIVE-NEXT:   DW_AT_name {{.*}}"inc")
186
187
188================================= Simple relink ================================
189CHECK-RELINK: DEBUG MAP OBJECT: {{.*}}basic-relink.macho.arm64.o
190CHECK-RELINK: Input compilation unit:
191CHECK-RELINK-NEXT: TAG_compile_unit
192CHECK-RELINK-NOT: TAG
193CHECK-RELINK: AT_name {{.*}}basic-relink.macho.arm64.c
194
195CHECK-RELINK: DEBUG MAP OBJECT: {{.*}}foo-relink.dylib
196CHECK-RELINK: Input compilation unit:
197CHECK-RELINK-NEXT: TAG_compile_unit
198CHECK-RELINK-NOT: TAG
199CHECK-RELINK: AT_name {{.*}}foo-relink.c
200
201CHECK-RELINK: Input compilation unit:
202CHECK-RELINK-NEXT: TAG_compile_unit
203CHECK-RELINK-NOT: TAG
204CHECK-RELINK: AT_name {{.*}}altfoo-relink.c
205
206CHECK-RELINK: DEBUG MAP OBJECT: {{.*}}bar-relink.dylib
207CHECK-RELINK: Input compilation unit:
208CHECK-RELINK-NEXT: TAG_compile_unit
209CHECK-RELINK-NOT: TAG
210CHECK-RELINK: AT_name {{.*}}bar-relink.c
211
212CHECK-RELINK-NOT: Found valid debug map entry
213CHECK-RELINK: Found valid debug map entry: _display	0x0000000000000000 => 0x0000000000003f10
214CHECK-RELINK-NEXT: Keeping subprogram DIE:
215CHECK-RELINK-NEXT: DW_TAG_subprogram
216CHECK-RELINK:   DW_AT_name{{.*}}"display"
217
218CHECK-RELINK: Found valid debug map entry: _foo	0x0000000000003f54 => 0x0000000000003f2c
219CHECK-RELINK-NEXT: Keeping subprogram DIE:
220CHECK-RELINK-NEXT: DW_TAG_subprogram
221CHECK-RELINK:   DW_AT_name {{.*}}"foo"
222
223CHECK-RELINK-NOT: Found valid debug map entry
224CHECK-RELINK: Found valid debug map entry: _foo_unused	0x0000000000003f74 => 0x0000000000003f4c
225CHECK-RELINK-NEXT: Keeping subprogram DIE:
226CHECK-RELINK-NEXT: DW_TAG_subprogram
227CHECK-RELINK:   DW_AT_name {{.*}}"foo_unused"
228
229CHECK-RELINK-NOT: Found valid debug map entry
230CHECK-RELINK: Found valid debug map entry: _altfoo	0x0000000000003f7c => 0x0000000000003f54
231CHECK-RELINK-NEXT: Keeping subprogram DIE:
232CHECK-RELINK-NEXT: DW_TAG_subprogram
233CHECK-RELINK:   DW_AT_name {{.*}}"altfoo"
234
235CHECK-RELINK-NOT: Found valid debug map entry
236CHECK-RELINK: Found valid debug map entry: _baz	0x0000000000004000 => 0x0000000000008000
237CHECK-RELINK-NEXT: Keeping variable DIE:
238CHECK-RELINK-NEXT: DW_TAG_variable
239CHECK-RELINK-NEXT:   DW_AT_name {{.*}}"baz"
240
241CHECK-RELINK-NOT: Found valid debug map entry
242CHECK-RELINK: Found valid debug map entry: _bar	0x0000000000003fa0 => 0x0000000000003f78
243CHECK-RELINK-NEXT: Keeping subprogram DIE:
244CHECK-RELINK-NEXT: DW_TAG_subprogram
245CHECK-RELINK:   DW_AT_name {{.*}}"bar"
246
247================================= Two level relink ================================
248CHECK-RELINK-TWO: DEBUG MAP OBJECT: {{.*}}proxy-relink.dylib
249CHECK-RELINK-TWO: Input compilation unit:
250CHECK-RELINK-TWO-NEXT: TAG_compile_unit
251CHECK-RELINK-TWO-NOT: TAG
252CHECK-RELINK-TWO: AT_name {{.*}}two-level-relink.macho.arm64.c
253
254CHECK-RELINK-TWO: Input compilation unit:
255CHECK-RELINK-TWO-NEXT: TAG_compile_unit
256CHECK-RELINK-TWO-NOT: TAG
257CHECK-RELINK-TWO: AT_name {{.*}}bar-relink.c
258CHECK-RELINK-TWO: DW_AT_APPLE_origin {{.*}}/path/to/bar-relink.dylib
259
260CHECK-RELINK-TWO: Input compilation unit:
261CHECK-RELINK-TWO-NEXT: TAG_compile_unit
262CHECK-RELINK-TWO-NOT: TAG
263CHECK-RELINK-TWO: AT_name {{.*}}foo-relink.c
264CHECK-RELINK-TWO: DW_AT_APPLE_origin {{.*}}/path/to/foo-relink.dylib
265
266CHECK-RELINK-TWO: Input compilation unit:
267CHECK-RELINK-TWO-NEXT: TAG_compile_unit
268CHECK-RELINK-TWO-NOT: TAG
269CHECK-RELINK-TWO: AT_name {{.*}}altfoo-relink.c
270CHECK-RELINK-TWO: DW_AT_APPLE_origin {{.*}}/path/to/foo-relink.dylib
271
272CHECK-RELINK-TWO-NOT: Found valid debug map entry
273CHECK-RELINK-TWO: Found valid debug map entry: _display	0x0000000000003f1c => 0x0000000000003f1c
274CHECK-RELINK-TWO-NEXT: Keeping subprogram DIE:
275CHECK-RELINK-TWO-NEXT: DW_TAG_subprogram
276CHECK-RELINK-TWO:   DW_AT_name{{.*}}"display"
277
278CHECK-RELINK-TWO-NOT: Found valid debug map entry
279CHECK-RELINK-TWO: Found valid debug map entry: _baz	0x0000000000008000 => 0x0000000000008000
280CHECK-RELINK-TWO-NEXT: Keeping variable DIE:
281CHECK-RELINK-TWO-NEXT: DW_TAG_variable
282CHECK-RELINK-TWO-NEXT:   DW_AT_name {{.*}}"baz"
283
284CHECK-RELINK-TWO-NOT: Found valid debug map entry
285CHECK-RELINK-TWO: Found valid debug map entry: _bar	0x0000000000003f38 => 0x0000000000003f38
286CHECK-RELINK-TWO-NEXT: Keeping subprogram DIE:
287CHECK-RELINK-TWO-NEXT: DW_TAG_subprogram
288CHECK-RELINK-TWO:   DW_AT_name {{.*}}"bar"
289
290CHECK-RELINK-TWO: Found valid debug map entry: _foo	0x0000000000003f40 => 0x0000000000003f40
291CHECK-RELINK-TWO-NEXT: Keeping subprogram DIE:
292CHECK-RELINK-TWO-NEXT: DW_TAG_subprogram
293CHECK-RELINK-TWO:   DW_AT_name {{.*}}"foo"
294
295CHECK-RELINK-TWO-NOT: Found valid debug map entry
296CHECK-RELINK-TWO: Found valid debug map entry: _altfoo	0x0000000000003f64 => 0x0000000000003f64
297CHECK-RELINK-TWO-NEXT: Keeping subprogram DIE:
298CHECK-RELINK-TWO-NEXT: DW_TAG_subprogram
299CHECK-RELINK-TWO:   DW_AT_name {{.*}}"altfoo"
300
301================================= Build variants relink ================================
302CHECK-RELINK-VARIANT: DEBUG MAP OBJECT: {{.*}}basic-relink.macho.arm64.o
303CHECK-RELINK-VARIANT: DEBUG MAP OBJECT: {{.*}}foo-relink-variant_debug.dylib
304CHECK-RELINK-VARIANT: DEBUG MAP OBJECT: {{.*}}bar-relink-variant.dylib
305