xref: /llvm-project/bolt/test/X86/dwarf5-types-forward-cross-reference.s (revision 11791ae7b0b05b8bd8d806331ff51da618912cf8)
1# REQUIRES: system-linux
2
3# RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %s -o %t.o
4# RUN: %clang %cflags -gdwarf-5 %t.o -o %t.exe
5# RUN: llvm-bolt %t.exe -o %t.bolt --update-debug-sections
6# RUN: llvm-dwarfdump --show-form --verbose --debug-info %t.bolt | FileCheck --check-prefix=POSTCHECK %s
7
8## This test checks that BOLT handles forward cross CU references for dwarf5
9## when -fdebug-types-sections is specified.
10
11## The assembly was manually modified to do cross CU reference.
12
13# POSTCHECK: Type Unit
14# POSTCHECK-SAME: version = 0x0005
15# POSTCHECK: Type Unit
16# POSTCHECK-SAME: version = 0x0005
17# POSTCHECK: Type Unit
18# POSTCHECK-SAME: version = 0x0005
19# POSTCHECK: Type Unit
20# POSTCHECK-SAME: version = 0x0005
21# POSTCHECK: Compile Unit
22# POSTCHECK-SAME: version = 0x0005
23# POSTCHECK: DW_TAG_variable [9]
24# POSTCHECK: DW_AT_type [DW_FORM_ref_addr] (0x{{[0-9a-f]+}} "Foo2a")
25# POSTCHECK: Compile Unit
26# POSTCHECK-SAME: version = 0x0005
27# POSTCHECK: DW_TAG_structure_type [11]
28
29
30# main.cpp
31# struct Foo {
32#  char *c1;
33#  char *c2;
34#  char *c3;
35# };
36# struct Foo2 {
37#  char *c1;
38#  char *c2;
39# };
40# int main(int argc, char *argv[]) {
41#  Foo f;
42#  f.c1 = argv[argc];
43#  f.c2 = argv[argc + 1];
44#  f.c3 = argv[argc + 2];
45#  Foo2 f2;
46#  f.c1 = argv[argc + 3];
47#  f.c2 = argv[argc + 4];
48#  return 0;
49# }
50
51# helper.cpp
52# struct Foo2a {
53#   char *c1;
54#   char *c2;
55#   char *c3;
56# };
57# struct Foo3 {
58#   char *c1;
59#   char *c2;
60# };
61#
62# int foo() {
63#   Foo2a f;
64#   Foo3 f2;
65#   return 0;
66# }
67
68
69	.text
70	.file	"llvm-link"
71	.globl	main                            # -- Begin function main
72	.p2align	4, 0x90
73	.type	main,@function
74main:                                   # @main
75.Lfunc_begin0:
76	.file	1 "dwarf5-types-dwarf5-types-cross-reference-test" "main.cpp" md5 0x13f000d932d7bb7e6986b96c183027b9
77	.loc	1 10 0                          # main.cpp:10:0
78	.cfi_startproc
79# %bb.0:
80	pushq	%rbp
81	.cfi_def_cfa_offset 16
82	.cfi_offset %rbp, -16
83	movq	%rsp, %rbp
84	.cfi_def_cfa_register %rbp
85	movl	$0, -4(%rbp)
86	movl	%edi, -8(%rbp)
87	movq	%rsi, -16(%rbp)
88.Ltmp0:
89	.loc	1 12 9 prologue_end             # main.cpp:12:9
90	movq	-16(%rbp), %rax
91	movslq	-8(%rbp), %rcx
92	movq	(%rax,%rcx,8), %rax
93	.loc	1 12 7 is_stmt 0                # main.cpp:12:7
94	movq	%rax, -40(%rbp)
95	.loc	1 13 9 is_stmt 1                # main.cpp:13:9
96	movq	-16(%rbp), %rax
97	.loc	1 13 14 is_stmt 0               # main.cpp:13:14
98	movl	-8(%rbp), %ecx
99	.loc	1 13 19                         # main.cpp:13:19
100	addl	$1, %ecx
101	.loc	1 13 9                          # main.cpp:13:9
102	movslq	%ecx, %rcx
103	movq	(%rax,%rcx,8), %rax
104	.loc	1 13 7                          # main.cpp:13:7
105	movq	%rax, -32(%rbp)
106	.loc	1 14 9 is_stmt 1                # main.cpp:14:9
107	movq	-16(%rbp), %rax
108	.loc	1 14 14 is_stmt 0               # main.cpp:14:14
109	movl	-8(%rbp), %ecx
110	.loc	1 14 19                         # main.cpp:14:19
111	addl	$2, %ecx
112	.loc	1 14 9                          # main.cpp:14:9
113	movslq	%ecx, %rcx
114	movq	(%rax,%rcx,8), %rax
115	.loc	1 14 7                          # main.cpp:14:7
116	movq	%rax, -24(%rbp)
117	.loc	1 16 9 is_stmt 1                # main.cpp:16:9
118	movq	-16(%rbp), %rax
119	.loc	1 16 14 is_stmt 0               # main.cpp:16:14
120	movl	-8(%rbp), %ecx
121	.loc	1 16 19                         # main.cpp:16:19
122	addl	$3, %ecx
123	.loc	1 16 9                          # main.cpp:16:9
124	movslq	%ecx, %rcx
125	movq	(%rax,%rcx,8), %rax
126	.loc	1 16 7                          # main.cpp:16:7
127	movq	%rax, -40(%rbp)
128	.loc	1 17 9 is_stmt 1                # main.cpp:17:9
129	movq	-16(%rbp), %rax
130	.loc	1 17 14 is_stmt 0               # main.cpp:17:14
131	movl	-8(%rbp), %ecx
132	.loc	1 17 19                         # main.cpp:17:19
133	addl	$4, %ecx
134	.loc	1 17 9                          # main.cpp:17:9
135	movslq	%ecx, %rcx
136	movq	(%rax,%rcx,8), %rax
137	.loc	1 17 7                          # main.cpp:17:7
138	movq	%rax, -32(%rbp)
139	.loc	1 18 2 is_stmt 1                # main.cpp:18:2
140	xorl	%eax, %eax
141	.loc	1 18 2 epilogue_begin is_stmt 0 # main.cpp:18:2
142	popq	%rbp
143	.cfi_def_cfa %rsp, 8
144	retq
145.Ltmp1:
146.Lfunc_end0:
147	.size	main, .Lfunc_end0-main
148	.cfi_endproc
149                                        # -- End function
150	.globl	_Z3foov                         # -- Begin function _Z3foov
151	.p2align	4, 0x90
152	.type	_Z3foov,@function
153_Z3foov:                                # @_Z3foov
154.Lfunc_begin1:
155	.file	2 "/dwarf5-types-dwarf5-types-cross-reference-test" "helper.cpp" md5 0x650c984f17ca3a4e7785e30e6ca8f130
156	.loc	2 11 0 is_stmt 1                # helper.cpp:11:0
157	.cfi_startproc
158# %bb.0:
159	pushq	%rbp
160	.cfi_def_cfa_offset 16
161	.cfi_offset %rbp, -16
162	movq	%rsp, %rbp
163	.cfi_def_cfa_register %rbp
164.Ltmp2:
165	.loc	2 14 3 prologue_end             # helper.cpp:14:3
166	xorl	%eax, %eax
167	.loc	2 14 3 epilogue_begin is_stmt 0 # helper.cpp:14:3
168	popq	%rbp
169	.cfi_def_cfa %rsp, 8
170	retq
171.Ltmp3:
172.Lfunc_end1:
173	.size	_Z3foov, .Lfunc_end1-_Z3foov
174	.cfi_endproc
175                                        # -- End function
176	.section	.debug_info,"G",@progbits,7448148824980338162,comdat
177	.long	.Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
178.Ldebug_info_start0:
179	.short	5                               # DWARF version number
180	.byte	2                               # DWARF Unit Type
181	.byte	8                               # Address Size (in bytes)
182	.long	.debug_abbrev                   # Offset Into Abbrev. Section
183	.quad	7448148824980338162             # Type Signature
184	.long	35                              # Type DIE Offset
185	.byte	1                               # Abbrev [1] 0x18:0x37 DW_TAG_type_unit
186	.short	33                              # DW_AT_language
187	.long	.Lline_table_start0             # DW_AT_stmt_list
188	.long	.Lstr_offsets_base0             # DW_AT_str_offsets_base
189	.byte	2                               # Abbrev [2] 0x23:0x22 DW_TAG_structure_type
190	.byte	5                               # DW_AT_calling_convention
191	.byte	15                              # DW_AT_name
192	.byte	24                              # DW_AT_byte_size
193	.byte	1                               # DW_AT_decl_file
194	.byte	1                               # DW_AT_decl_line
195	.byte	3                               # Abbrev [3] 0x29:0x9 DW_TAG_member
196	.byte	12                              # DW_AT_name
197	.long	69                              # DW_AT_type
198	.byte	1                               # DW_AT_decl_file
199	.byte	2                               # DW_AT_decl_line
200	.byte	0                               # DW_AT_data_member_location
201	.byte	3                               # Abbrev [3] 0x32:0x9 DW_TAG_member
202	.byte	13                              # DW_AT_name
203	.long	69                              # DW_AT_type
204	.byte	1                               # DW_AT_decl_file
205	.byte	3                               # DW_AT_decl_line
206	.byte	8                               # DW_AT_data_member_location
207	.byte	3                               # Abbrev [3] 0x3b:0x9 DW_TAG_member
208	.byte	14                              # DW_AT_name
209	.long	69                              # DW_AT_type
210	.byte	1                               # DW_AT_decl_file
211	.byte	4                               # DW_AT_decl_line
212	.byte	16                              # DW_AT_data_member_location
213	.byte	0                               # End Of Children Mark
214	.byte	4                               # Abbrev [4] 0x45:0x5 DW_TAG_pointer_type
215	.long	74                              # DW_AT_type
216	.byte	5                               # Abbrev [5] 0x4a:0x4 DW_TAG_base_type
217	.byte	10                              # DW_AT_name
218	.byte	6                               # DW_AT_encoding
219	.byte	1                               # DW_AT_byte_size
220	.byte	0                               # End Of Children Mark
221.Ldebug_info_end0:
222	.section	.debug_info,"G",@progbits,5322170643381124694,comdat
223	.long	.Ldebug_info_end1-.Ldebug_info_start1 # Length of Unit
224.Ldebug_info_start1:
225	.short	5                               # DWARF version number
226	.byte	2                               # DWARF Unit Type
227	.byte	8                               # Address Size (in bytes)
228	.long	.debug_abbrev                   # Offset Into Abbrev. Section
229	.quad	5322170643381124694             # Type Signature
230	.long	35                              # Type DIE Offset
231	.byte	1                               # Abbrev [1] 0x18:0x2e DW_TAG_type_unit
232	.short	33                              # DW_AT_language
233	.long	.Lline_table_start0             # DW_AT_stmt_list
234	.long	.Lstr_offsets_base0             # DW_AT_str_offsets_base
235	.byte	2                               # Abbrev [2] 0x23:0x19 DW_TAG_structure_type
236	.byte	5                               # DW_AT_calling_convention
237	.byte	17                              # DW_AT_name
238	.byte	16                              # DW_AT_byte_size
239	.byte	1                               # DW_AT_decl_file
240	.byte	6                               # DW_AT_decl_line
241	.byte	3                               # Abbrev [3] 0x29:0x9 DW_TAG_member
242	.byte	12                              # DW_AT_name
243	.long	60                              # DW_AT_type
244	.byte	1                               # DW_AT_decl_file
245	.byte	7                               # DW_AT_decl_line
246	.byte	0                               # DW_AT_data_member_location
247	.byte	3                               # Abbrev [3] 0x32:0x9 DW_TAG_member
248	.byte	13                              # DW_AT_name
249	.long	60                              # DW_AT_type
250	.byte	1                               # DW_AT_decl_file
251	.byte	8                               # DW_AT_decl_line
252	.byte	8                               # DW_AT_data_member_location
253	.byte	0                               # End Of Children Mark
254	.byte	4                               # Abbrev [4] 0x3c:0x5 DW_TAG_pointer_type
255	.long	65                              # DW_AT_type
256	.byte	5                               # Abbrev [5] 0x41:0x4 DW_TAG_base_type
257	.byte	10                              # DW_AT_name
258	.byte	6                               # DW_AT_encoding
259	.byte	1                               # DW_AT_byte_size
260	.byte	0                               # End Of Children Mark
261.Ldebug_info_end1:
262	.section	.debug_info,"G",@progbits,1175092228111723119,comdat
263	.long	.Ldebug_info_end2-.Ldebug_info_start2 # Length of Unit
264.Ldebug_info_start2:
265	.short	5                               # DWARF version number
266	.byte	2                               # DWARF Unit Type
267	.byte	8                               # Address Size (in bytes)
268	.long	.debug_abbrev                   # Offset Into Abbrev. Section
269	.quad	1175092228111723119             # Type Signature
270	.long	35                              # Type DIE Offset
271	.byte	1                               # Abbrev [1] 0x18:0x37 DW_TAG_type_unit
272	.short	33                              # DW_AT_language
273	.long	.Lline_table_start0             # DW_AT_stmt_list
274	.long	.Lstr_offsets_base0             # DW_AT_str_offsets_base
275	.byte	2                               # Abbrev [2] 0x23:0x22 DW_TAG_structure_type
276	.byte	5                               # DW_AT_calling_convention
277	.byte	18                              # DW_AT_name
278	.byte	24                              # DW_AT_byte_size
279	.byte	2                               # DW_AT_decl_file
280	.byte	1                               # DW_AT_decl_line
281	.byte	3                               # Abbrev [3] 0x29:0x9 DW_TAG_member
282	.byte	12                              # DW_AT_name
283	.long	69                              # DW_AT_type
284	.byte	2                               # DW_AT_decl_file
285	.byte	2                               # DW_AT_decl_line
286	.byte	0                               # DW_AT_data_member_location
287	.byte	3                               # Abbrev [3] 0x32:0x9 DW_TAG_member
288	.byte	13                              # DW_AT_name
289	.long	69                              # DW_AT_type
290	.byte	2                               # DW_AT_decl_file
291	.byte	3                               # DW_AT_decl_line
292	.byte	8                               # DW_AT_data_member_location
293	.byte	3                               # Abbrev [3] 0x3b:0x9 DW_TAG_member
294	.byte	14                              # DW_AT_name
295	.long	69                              # DW_AT_type
296	.byte	2                               # DW_AT_decl_file
297	.byte	4                               # DW_AT_decl_line
298	.byte	16                              # DW_AT_data_member_location
299	.byte	0                               # End Of Children Mark
300	.byte	4                               # Abbrev [4] 0x45:0x5 DW_TAG_pointer_type
301	.long	74                              # DW_AT_type
302	.byte	5                               # Abbrev [5] 0x4a:0x4 DW_TAG_base_type
303	.byte	10                              # DW_AT_name
304	.byte	6                               # DW_AT_encoding
305	.byte	1                               # DW_AT_byte_size
306	.byte	0                               # End Of Children Mark
307.Ldebug_info_end2:
308	.section	.debug_info,"G",@progbits,12995149649732825572,comdat
309	.long	.Ldebug_info_end3-.Ldebug_info_start3 # Length of Unit
310.Ldebug_info_start3:
311	.short	5                               # DWARF version number
312	.byte	2                               # DWARF Unit Type
313	.byte	8                               # Address Size (in bytes)
314	.long	.debug_abbrev                   # Offset Into Abbrev. Section
315	.quad	-5451594423976726044            # Type Signature
316	.long	35                              # Type DIE Offset
317	.byte	1                               # Abbrev [1] 0x18:0x2e DW_TAG_type_unit
318	.short	33                              # DW_AT_language
319	.long	.Lline_table_start0             # DW_AT_stmt_list
320	.long	.Lstr_offsets_base0             # DW_AT_str_offsets_base
321	.byte	2                               # Abbrev [2] 0x23:0x19 DW_TAG_structure_type
322	.byte	5                               # DW_AT_calling_convention
323	.byte	19                              # DW_AT_name
324	.byte	16                              # DW_AT_byte_size
325	.byte	2                               # DW_AT_decl_file
326	.byte	6                               # DW_AT_decl_line
327	.byte	3                               # Abbrev [3] 0x29:0x9 DW_TAG_member
328	.byte	12                              # DW_AT_name
329	.long	60                              # DW_AT_type
330	.byte	2                               # DW_AT_decl_file
331	.byte	7                               # DW_AT_decl_line
332	.byte	0                               # DW_AT_data_member_location
333	.byte	3                               # Abbrev [3] 0x32:0x9 DW_TAG_member
334	.byte	13                              # DW_AT_name
335	.long	60                              # DW_AT_type
336	.byte	2                               # DW_AT_decl_file
337	.byte	8                               # DW_AT_decl_line
338	.byte	8                               # DW_AT_data_member_location
339	.byte	0                               # End Of Children Mark
340	.byte	4                               # Abbrev [4] 0x3c:0x5 DW_TAG_pointer_type
341	.long	65                              # DW_AT_type
342	.byte	5                               # Abbrev [5] 0x41:0x4 DW_TAG_base_type
343	.byte	10                              # DW_AT_name
344	.byte	6                               # DW_AT_encoding
345	.byte	1                               # DW_AT_byte_size
346	.byte	0                               # End Of Children Mark
347.Ldebug_info_end3:
348	.section	.debug_abbrev,"",@progbits
349	.byte	1                               # Abbreviation Code
350	.byte	65                              # DW_TAG_type_unit
351	.byte	1                               # DW_CHILDREN_yes
352	.byte	19                              # DW_AT_language
353	.byte	5                               # DW_FORM_data2
354	.byte	16                              # DW_AT_stmt_list
355	.byte	23                              # DW_FORM_sec_offset
356	.byte	114                             # DW_AT_str_offsets_base
357	.byte	23                              # DW_FORM_sec_offset
358	.byte	0                               # EOM(1)
359	.byte	0                               # EOM(2)
360	.byte	2                               # Abbreviation Code
361	.byte	19                              # DW_TAG_structure_type
362	.byte	1                               # DW_CHILDREN_yes
363	.byte	54                              # DW_AT_calling_convention
364	.byte	11                              # DW_FORM_data1
365	.byte	3                               # DW_AT_name
366	.byte	37                              # DW_FORM_strx1
367	.byte	11                              # DW_AT_byte_size
368	.byte	11                              # DW_FORM_data1
369	.byte	58                              # DW_AT_decl_file
370	.byte	11                              # DW_FORM_data1
371	.byte	59                              # DW_AT_decl_line
372	.byte	11                              # DW_FORM_data1
373	.byte	0                               # EOM(1)
374	.byte	0                               # EOM(2)
375	.byte	3                               # Abbreviation Code
376	.byte	13                              # DW_TAG_member
377	.byte	0                               # DW_CHILDREN_no
378	.byte	3                               # DW_AT_name
379	.byte	37                              # DW_FORM_strx1
380	.byte	73                              # DW_AT_type
381	.byte	19                              # DW_FORM_ref4
382	.byte	58                              # DW_AT_decl_file
383	.byte	11                              # DW_FORM_data1
384	.byte	59                              # DW_AT_decl_line
385	.byte	11                              # DW_FORM_data1
386	.byte	56                              # DW_AT_data_member_location
387	.byte	11                              # DW_FORM_data1
388	.byte	0                               # EOM(1)
389	.byte	0                               # EOM(2)
390	.byte	4                               # Abbreviation Code
391	.byte	15                              # DW_TAG_pointer_type
392	.byte	0                               # DW_CHILDREN_no
393	.byte	73                              # DW_AT_type
394	.byte	19                              # DW_FORM_ref4
395	.byte	0                               # EOM(1)
396	.byte	0                               # EOM(2)
397	.byte	5                               # Abbreviation Code
398	.byte	36                              # DW_TAG_base_type
399	.byte	0                               # DW_CHILDREN_no
400	.byte	3                               # DW_AT_name
401	.byte	37                              # DW_FORM_strx1
402	.byte	62                              # DW_AT_encoding
403	.byte	11                              # DW_FORM_data1
404	.byte	11                              # DW_AT_byte_size
405	.byte	11                              # DW_FORM_data1
406	.byte	0                               # EOM(1)
407	.byte	0                               # EOM(2)
408	.byte	6                               # Abbreviation Code
409	.byte	17                              # DW_TAG_compile_unit
410	.byte	1                               # DW_CHILDREN_yes
411	.byte	37                              # DW_AT_producer
412	.byte	37                              # DW_FORM_strx1
413	.byte	19                              # DW_AT_language
414	.byte	5                               # DW_FORM_data2
415	.byte	3                               # DW_AT_name
416	.byte	37                              # DW_FORM_strx1
417	.byte	114                             # DW_AT_str_offsets_base
418	.byte	23                              # DW_FORM_sec_offset
419	.byte	16                              # DW_AT_stmt_list
420	.byte	23                              # DW_FORM_sec_offset
421	.byte	27                              # DW_AT_comp_dir
422	.byte	37                              # DW_FORM_strx1
423	.byte	17                              # DW_AT_low_pc
424	.byte	27                              # DW_FORM_addrx
425	.byte	18                              # DW_AT_high_pc
426	.byte	6                               # DW_FORM_data4
427	.byte	115                             # DW_AT_addr_base
428	.byte	23                              # DW_FORM_sec_offset
429	.byte	0                               # EOM(1)
430	.byte	0                               # EOM(2)
431	.byte	7                               # Abbreviation Code
432	.byte	46                              # DW_TAG_subprogram
433	.byte	1                               # DW_CHILDREN_yes
434	.byte	17                              # DW_AT_low_pc
435	.byte	27                              # DW_FORM_addrx
436	.byte	18                              # DW_AT_high_pc
437	.byte	6                               # DW_FORM_data4
438	.byte	64                              # DW_AT_frame_base
439	.byte	24                              # DW_FORM_exprloc
440	.byte	3                               # DW_AT_name
441	.byte	37                              # DW_FORM_strx1
442	.byte	58                              # DW_AT_decl_file
443	.byte	11                              # DW_FORM_data1
444	.byte	59                              # DW_AT_decl_line
445	.byte	11                              # DW_FORM_data1
446	.byte	73                              # DW_AT_type
447	.byte	19                              # DW_FORM_ref4
448	.byte	63                              # DW_AT_external
449	.byte	25                              # DW_FORM_flag_present
450	.byte	0                               # EOM(1)
451	.byte	0                               # EOM(2)
452	.byte	8                               # Abbreviation Code
453	.byte	5                               # DW_TAG_formal_parameter
454	.byte	0                               # DW_CHILDREN_no
455	.byte	2                               # DW_AT_location
456	.byte	24                              # DW_FORM_exprloc
457	.byte	3                               # DW_AT_name
458	.byte	37                              # DW_FORM_strx1
459	.byte	58                              # DW_AT_decl_file
460	.byte	11                              # DW_FORM_data1
461	.byte	59                              # DW_AT_decl_line
462	.byte	11                              # DW_FORM_data1
463	.byte	73                              # DW_AT_type
464	.byte	19                              # DW_FORM_ref4
465	.byte	0                               # EOM(1)
466	.byte	0                               # EOM(2)
467	.byte	9                               # Abbreviation Code
468	.byte	52                              # DW_TAG_variable
469	.byte	0                               # DW_CHILDREN_no
470	.byte	2                               # DW_AT_location
471	.byte	24                              # DW_FORM_exprloc
472	.byte	3                               # DW_AT_name
473	.byte	37                              # DW_FORM_strx1
474	.byte	58                              # DW_AT_decl_file
475	.byte	11                              # DW_FORM_data1
476	.byte	59                              # DW_AT_decl_line
477	.byte	11                              # DW_FORM_data1
478	.byte	73                              # DW_AT_type
479	.byte	19                              # DW_FORM_ref4
480	.byte	0                               # EOM(1)
481	.byte	0                               # EOM(2)
482	.byte	10                              # Abbreviation Code
483	.byte	19                              # DW_TAG_structure_type
484	.byte	0                               # DW_CHILDREN_no
485	.byte	60                              # DW_AT_declaration
486	.byte	25                              # DW_FORM_flag_present
487	.byte	105                             # DW_AT_signature
488	.byte	32                              # DW_FORM_ref_sig8
489	.byte	0                               # EOM(1)
490	.byte	0                               # EOM(2)
491	.byte	11                              # Abbreviation Code
492	.byte	46                              # DW_TAG_subprogram
493	.byte	1                               # DW_CHILDREN_yes
494	.byte	17                              # DW_AT_low_pc
495	.byte	27                              # DW_FORM_addrx
496	.byte	18                              # DW_AT_high_pc
497	.byte	6                               # DW_FORM_data4
498	.byte	64                              # DW_AT_frame_base
499	.byte	24                              # DW_FORM_exprloc
500	.byte	110                             # DW_AT_linkage_name
501	.byte	37                              # DW_FORM_strx1
502	.byte	3                               # DW_AT_name
503	.byte	37                              # DW_FORM_strx1
504	.byte	58                              # DW_AT_decl_file
505	.byte	11                              # DW_FORM_data1
506	.byte	59                              # DW_AT_decl_line
507	.byte	11                              # DW_FORM_data1
508	.byte	73                              # DW_AT_type
509	.byte	19                              # DW_FORM_ref4
510	.byte	63                              # DW_AT_external
511	.byte	25                              # DW_FORM_flag_present
512	.byte	0                               # EOM(1)
513	.byte	0                               # EOM(2)
514    .byte   12                              # Abbreviation Code <-- Manually added abbrev decl
515    .byte   52                              # DW_TAG_variable
516    .byte   0                               # DW_CHILDREN_no
517    .byte   2                               # DW_AT_location
518    .byte   24                              # DW_FORM_exprloc
519    .byte   3                               # DW_AT_name
520    .byte   37                              # DW_FORM_strx1
521    .byte   58                              # DW_AT_decl_file
522    .byte   11                              # DW_FORM_data1
523    .byte   59                              # DW_AT_decl_line
524    .byte   11                              # DW_FORM_data1
525    .byte   73                              # DW_AT_type
526    .byte   16                              # DW_FORM_ref_addr
527    .byte   0                               # EOM(1)
528    .byte   0                               # EOM(2)
529	.byte	0                               # EOM(3)
530	.section	.debug_info,"",@progbits
531.Lcu_begin0:
532	.long	.Ldebug_info_end4-.Ldebug_info_start4 # Length of Unit
533.Ldebug_info_start4:
534	.short	5                               # DWARF version number
535	.byte	1                               # DWARF Unit Type
536	.byte	8                               # Address Size (in bytes)
537	.long	.debug_abbrev                   # Offset Into Abbrev. Section
538	.byte	6                               # Abbrev [6] 0xc:0x78 DW_TAG_compile_unit
539	.byte	0                               # DW_AT_producer
540	.short	33                              # DW_AT_language
541	.byte	1                               # DW_AT_name
542	.long	.Lstr_offsets_base0             # DW_AT_str_offsets_base
543	.long	.Lline_table_start0             # DW_AT_stmt_list
544	.byte	2                               # DW_AT_comp_dir
545	.byte	0                               # DW_AT_low_pc
546	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
547	.long	.Laddr_table_base0              # DW_AT_addr_base
548	.byte	7                               # Abbrev [7] 0x23:0x3c DW_TAG_subprogram
549	.byte	0                               # DW_AT_low_pc
550	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
551	.byte	1                               # DW_AT_frame_base
552	.byte	86
553	.byte	4                               # DW_AT_name
554	.byte	1                               # DW_AT_decl_file
555	.byte	10                              # DW_AT_decl_line
556	.long	95                              # DW_AT_type
557                                        # DW_AT_external
558	.byte	8                               # Abbrev [8] 0x32:0xb DW_TAG_formal_parameter
559	.byte	2                               # DW_AT_location
560	.byte	145
561	.byte	120
562	.byte	8                               # DW_AT_name
563	.byte	1                               # DW_AT_decl_file
564	.byte	10                              # DW_AT_decl_line
565	.long	95                              # DW_AT_type
566	.byte	8                               # Abbrev [8] 0x3d:0xb DW_TAG_formal_parameter
567	.byte	2                               # DW_AT_location
568	.byte	145
569	.byte	112
570	.byte	9                               # DW_AT_name
571	.byte	1                               # DW_AT_decl_file
572	.byte	10                              # DW_AT_decl_line
573	.long	99                              # DW_AT_type
574	.byte	12                              # Abbrev [12] 0x48:0xb DW_TAG_variable <-- Manually modified s/9/12
575	.byte	2                               # DW_AT_location
576	.byte	145
577	.byte	88
578	.byte	11                              # DW_AT_name
579	.byte	1                               # DW_AT_decl_file
580	.byte	11                              # DW_AT_decl_line
581	.long	.Lmanual_label                  # DW_AT_type <-- Manually modified
582	.byte	9                               # Abbrev [9] 0x53:0xb DW_TAG_variable
583	.byte	2                               # DW_AT_location
584	.byte	145
585	.byte	72
586	.byte	16                              # DW_AT_name
587	.byte	1                               # DW_AT_decl_file
588	.byte	15                              # DW_AT_decl_line
589	.long	122                             # DW_AT_type
590	.byte	0                               # End Of Children Mark
591	.byte	5                               # Abbrev [5] 0x5f:0x4 DW_TAG_base_type
592	.byte	5                               # DW_AT_name
593	.byte	5                               # DW_AT_encoding
594	.byte	4                               # DW_AT_byte_size
595	.byte	4                               # Abbrev [4] 0x63:0x5 DW_TAG_pointer_type
596	.long	104                             # DW_AT_type
597	.byte	4                               # Abbrev [4] 0x68:0x5 DW_TAG_pointer_type
598	.long	109                             # DW_AT_type
599	.byte	5                               # Abbrev [5] 0x6d:0x4 DW_TAG_base_type
600	.byte	10                              # DW_AT_name
601	.byte	6                               # DW_AT_encoding
602	.byte	1                               # DW_AT_byte_size
603	.byte	10                              # Abbrev [10] 0x71:0x9 DW_TAG_structure_type
604                                        # DW_AT_declaration
605	.quad	7448148824980338162             # DW_AT_signature
606	.byte	10                              # Abbrev [10] 0x7a:0x9 DW_TAG_structure_type
607                                        # DW_AT_declaration
608	.quad	5322170643381124694             # DW_AT_signature
609	.byte	0                               # End Of Children Mark
610.Ldebug_info_end4:
611.Lcu_begin1:
612	.long	.Ldebug_info_end5-.Ldebug_info_start5 # Length of Unit
613.Ldebug_info_start5:
614	.short	5                               # DWARF version number
615	.byte	1                               # DWARF Unit Type
616	.byte	8                               # Address Size (in bytes)
617	.long	.debug_abbrev                   # Offset Into Abbrev. Section
618	.byte	6                               # Abbrev [6] 0xc:0x55 DW_TAG_compile_unit
619	.byte	0                               # DW_AT_producer
620	.short	33                              # DW_AT_language
621	.byte	3                               # DW_AT_name
622	.long	.Lstr_offsets_base0             # DW_AT_str_offsets_base
623	.long	.Lline_table_start0             # DW_AT_stmt_list
624	.byte	2                               # DW_AT_comp_dir
625	.byte	1                               # DW_AT_low_pc
626	.long	.Lfunc_end1-.Lfunc_begin1       # DW_AT_high_pc
627	.long	.Laddr_table_base0              # DW_AT_addr_base
628	.byte	11                              # Abbrev [11] 0x23:0x27 DW_TAG_subprogram
629	.byte	1                               # DW_AT_low_pc
630	.long	.Lfunc_end1-.Lfunc_begin1       # DW_AT_high_pc
631	.byte	1                               # DW_AT_frame_base
632	.byte	86
633	.byte	6                               # DW_AT_linkage_name
634	.byte	7                               # DW_AT_name
635	.byte	2                               # DW_AT_decl_file
636	.byte	11                              # DW_AT_decl_line
637	.long	74                              # DW_AT_type
638                                        # DW_AT_external
639	.byte	9                               # Abbrev [9] 0x33:0xb DW_TAG_variable
640	.byte	2                               # DW_AT_location
641	.byte	145
642	.byte	104
643	.byte	11                              # DW_AT_name
644	.byte	2                               # DW_AT_decl_file
645	.byte	12                              # DW_AT_decl_line
646	.long	78                              # DW_AT_type
647	.byte	9                               # Abbrev [9] 0x3e:0xb DW_TAG_variable
648	.byte	2                               # DW_AT_location
649	.byte	145
650	.byte	88
651	.byte	16                              # DW_AT_name
652	.byte	2                               # DW_AT_decl_file
653	.byte	13                              # DW_AT_decl_line
654	.long	87                              # DW_AT_type
655	.byte	0                               # End Of Children Mark
656	.byte	5                               # Abbrev [5] 0x4a:0x4 DW_TAG_base_type
657	.byte	5                               # DW_AT_name
658	.byte	5                               # DW_AT_encoding
659	.byte	4                               # DW_AT_byte_size
660.Lmanual_label:
661	.byte	10                              # Abbrev [10] 0x4e:0x9 DW_TAG_structure_type
662                                        # DW_AT_declaration
663	.quad	1175092228111723119             # DW_AT_signature
664	.byte	10                              # Abbrev [10] 0x57:0x9 DW_TAG_structure_type
665                                        # DW_AT_declaration
666	.quad	-5451594423976726044            # DW_AT_signature
667	.byte	0                               # End Of Children Mark
668.Ldebug_info_end5:
669	.section	.debug_str_offsets,"",@progbits
670	.long	84                              # Length of String Offsets Set
671	.short	5
672	.short	0
673.Lstr_offsets_base0:
674	.section	.debug_str,"MS",@progbits,1
675.Linfo_string0:
676	.asciz	"clang version 15.0.0" # string offset=0
677.Linfo_string1:
678	.asciz	"main.cpp"                      # string offset=146
679.Linfo_string2:
680	.asciz	"/dwarf5-types-dwarf5-types-cross-reference-test" # string offset=155
681.Linfo_string3:
682	.asciz	"helper.cpp"                    # string offset=240
683.Linfo_string4:
684	.asciz	"main"                          # string offset=251
685.Linfo_string5:
686	.asciz	"int"                           # string offset=256
687.Linfo_string6:
688	.asciz	"_Z3foov"                       # string offset=260
689.Linfo_string7:
690	.asciz	"foo"                           # string offset=268
691.Linfo_string8:
692	.asciz	"argc"                          # string offset=272
693.Linfo_string9:
694	.asciz	"argv"                          # string offset=277
695.Linfo_string10:
696	.asciz	"char"                          # string offset=282
697.Linfo_string11:
698	.asciz	"f"                             # string offset=287
699.Linfo_string12:
700	.asciz	"c1"                            # string offset=289
701.Linfo_string13:
702	.asciz	"c2"                            # string offset=292
703.Linfo_string14:
704	.asciz	"c3"                            # string offset=295
705.Linfo_string15:
706	.asciz	"Foo"                           # string offset=298
707.Linfo_string16:
708	.asciz	"f2"                            # string offset=302
709.Linfo_string17:
710	.asciz	"Foo2"                          # string offset=305
711.Linfo_string18:
712	.asciz	"Foo2a"                         # string offset=310
713.Linfo_string19:
714	.asciz	"Foo3"                          # string offset=316
715	.section	.debug_str_offsets,"",@progbits
716	.long	.Linfo_string0
717	.long	.Linfo_string1
718	.long	.Linfo_string2
719	.long	.Linfo_string3
720	.long	.Linfo_string4
721	.long	.Linfo_string5
722	.long	.Linfo_string6
723	.long	.Linfo_string7
724	.long	.Linfo_string8
725	.long	.Linfo_string9
726	.long	.Linfo_string10
727	.long	.Linfo_string11
728	.long	.Linfo_string12
729	.long	.Linfo_string13
730	.long	.Linfo_string14
731	.long	.Linfo_string15
732	.long	.Linfo_string16
733	.long	.Linfo_string17
734	.long	.Linfo_string18
735	.long	.Linfo_string19
736	.section	.debug_addr,"",@progbits
737	.long	.Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution
738.Ldebug_addr_start0:
739	.short	5                               # DWARF version number
740	.byte	8                               # Address size
741	.byte	0                               # Segment selector size
742.Laddr_table_base0:
743	.quad	.Lfunc_begin0
744	.quad	.Lfunc_begin1
745.Ldebug_addr_end0:
746	.ident	"clang version 15.0.0"
747	.ident	"clang version 15.0.0"
748	.section	".note.GNU-stack","",@progbits
749	.addrsig
750	.section	.debug_line,"",@progbits
751.Lline_table_start0:
752