xref: /llvm-project/bolt/test/X86/dwarf4-types-forward-backward-cross-reference.s (revision 11791ae7b0b05b8bd8d806331ff51da618912cf8)
1# REQUIRES: system-linux
2
3# RUN: llvm-mc -dwarf-version=4 -filetype=obj -triple x86_64-unknown-linux %s -o %t.o
4# RUN: %clang %cflags -gdwarf-4 %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 correctly backward and forward cross CU references
9## for DWARF4 with -fdebug-types-section
10
11# POSTCHECK: version = 0x0004
12# POSTCHECK: DW_TAG_variable [10]
13# POSTCHECK: DW_AT_type [DW_FORM_ref_addr] (0x0000000000000112 "Foo2a")
14
15# POSTCHECK: version = 0x0004
16# POSTCHECK: DW_TAG_variable [10]
17# POSTCHECK: DW_AT_type [DW_FORM_ref_addr] (0x0000000000000094 "Foo")
18# POSTCHECK: DW_TAG_variable [10]
19# POSTCHECK: DW_AT_type [DW_FORM_ref_addr] (0x0000000000000190 "Foo3a")
20
21# main.cpp
22# struct Foo {
23#  char *c1;
24#  char *c2;
25#  char *c3;
26# };
27# struct Foo2 {
28#  char *c1;
29#  char *c2;
30# };
31# int main(int argc, char *argv[]) {
32#  Foo f;
33#  f.c1 = argv[argc];
34#  f.c2 = argv[argc + 1];
35#  f.c3 = argv[argc + 2];
36#  Foo2 f2;
37#  f.c1 = argv[argc + 3];
38#  f.c2 = argv[argc + 4];
39#  return 0;
40# }
41
42# helper.cpp
43# struct Foo2a {
44#   char *c1;
45#   char *c2;
46#   char *c3;
47# };
48# struct Foo3 {
49#   char *c1;
50#   char *c2;
51# };
52#
53# int foo() {
54#   Foo2a f;
55#   Foo3 f2;
56#   return 0;
57# }
58
59# helper1.cpp
60# struct Foo3a {
61#   char *c1;
62#   char *c2;
63#   char *c3;
64# };
65# struct Foo4 {
66#   char *c1;
67#   char *c2;
68# };
69#
70# int foo2() {
71#   Foo3a f;
72#   Foo4 f2;
73#   return 0;
74# }
75
76
77	.text
78	.file	"llvm-link"
79	.globl	main                            # -- Begin function main
80	.p2align	4, 0x90
81	.type	main,@function
82main:                                   # @main
83.Lfunc_begin0:
84	.file	1 "/dwarf4-types-forward-cross-reference-test" "main.cpp"
85	.loc	1 10 0                          # main.cpp:10:0
86	.cfi_startproc
87# %bb.0:                                # %entry
88	pushq	%rbp
89	.cfi_def_cfa_offset 16
90	.cfi_offset %rbp, -16
91	movq	%rsp, %rbp
92	.cfi_def_cfa_register %rbp
93	movl	$0, -4(%rbp)
94	movl	%edi, -8(%rbp)
95	movq	%rsi, -16(%rbp)
96.Ltmp0:
97	.loc	1 12 9 prologue_end             # main.cpp:12:9
98	movq	-16(%rbp), %rax
99	movslq	-8(%rbp), %rcx
100	movq	(%rax,%rcx,8), %rax
101	.loc	1 12 7 is_stmt 0                # main.cpp:12:7
102	movq	%rax, -40(%rbp)
103	.loc	1 13 9 is_stmt 1                # main.cpp:13:9
104	movq	-16(%rbp), %rax
105	.loc	1 13 14 is_stmt 0               # main.cpp:13:14
106	movl	-8(%rbp), %ecx
107	.loc	1 13 19                         # main.cpp:13:19
108	addl	$1, %ecx
109	.loc	1 13 9                          # main.cpp:13:9
110	movslq	%ecx, %rcx
111	movq	(%rax,%rcx,8), %rax
112	.loc	1 13 7                          # main.cpp:13:7
113	movq	%rax, -32(%rbp)
114	.loc	1 14 9 is_stmt 1                # main.cpp:14:9
115	movq	-16(%rbp), %rax
116	.loc	1 14 14 is_stmt 0               # main.cpp:14:14
117	movl	-8(%rbp), %ecx
118	.loc	1 14 19                         # main.cpp:14:19
119	addl	$2, %ecx
120	.loc	1 14 9                          # main.cpp:14:9
121	movslq	%ecx, %rcx
122	movq	(%rax,%rcx,8), %rax
123	.loc	1 14 7                          # main.cpp:14:7
124	movq	%rax, -24(%rbp)
125	.loc	1 16 9 is_stmt 1                # main.cpp:16:9
126	movq	-16(%rbp), %rax
127	.loc	1 16 14 is_stmt 0               # main.cpp:16:14
128	movl	-8(%rbp), %ecx
129	.loc	1 16 19                         # main.cpp:16:19
130	addl	$3, %ecx
131	.loc	1 16 9                          # main.cpp:16:9
132	movslq	%ecx, %rcx
133	movq	(%rax,%rcx,8), %rax
134	.loc	1 16 7                          # main.cpp:16:7
135	movq	%rax, -40(%rbp)
136	.loc	1 17 9 is_stmt 1                # main.cpp:17:9
137	movq	-16(%rbp), %rax
138	.loc	1 17 14 is_stmt 0               # main.cpp:17:14
139	movl	-8(%rbp), %ecx
140	.loc	1 17 19                         # main.cpp:17:19
141	addl	$4, %ecx
142	.loc	1 17 9                          # main.cpp:17:9
143	movslq	%ecx, %rcx
144	movq	(%rax,%rcx,8), %rax
145	.loc	1 17 7                          # main.cpp:17:7
146	movq	%rax, -32(%rbp)
147	.loc	1 18 2 is_stmt 1                # main.cpp:18:2
148	xorl	%eax, %eax
149	.loc	1 18 2 epilogue_begin is_stmt 0 # main.cpp:18:2
150	popq	%rbp
151	.cfi_def_cfa %rsp, 8
152	retq
153.Ltmp1:
154.Lfunc_end0:
155	.size	main, .Lfunc_end0-main
156	.cfi_endproc
157                                        # -- End function
158	.globl	_Z3foov                         # -- Begin function _Z3foov
159	.p2align	4, 0x90
160	.type	_Z3foov,@function
161_Z3foov:                                # @_Z3foov
162.Lfunc_begin1:
163	.file	2 "/dwarf4-types-forward-cross-reference-test" "helper.cpp"
164	.loc	2 11 0 is_stmt 1                # helper.cpp:11:0
165	.cfi_startproc
166# %bb.0:                                # %entry
167	pushq	%rbp
168	.cfi_def_cfa_offset 16
169	.cfi_offset %rbp, -16
170	movq	%rsp, %rbp
171	.cfi_def_cfa_register %rbp
172.Ltmp2:
173	.loc	2 14 3 prologue_end             # helper.cpp:14:3
174	xorl	%eax, %eax
175	.loc	2 14 3 epilogue_begin is_stmt 0 # helper.cpp:14:3
176	popq	%rbp
177	.cfi_def_cfa %rsp, 8
178	retq
179.Ltmp3:
180.Lfunc_end1:
181	.size	_Z3foov, .Lfunc_end1-_Z3foov
182	.cfi_endproc
183                                        # -- End function
184	.globl	_Z4foo2v                        # -- Begin function _Z4foo2v
185	.p2align	4, 0x90
186	.type	_Z4foo2v,@function
187_Z4foo2v:                               # @_Z4foo2v
188.Lfunc_begin2:
189	.file	3 "/dwarf4-types-forward-cross-reference-test" "helper1.cpp"
190	.loc	3 11 0 is_stmt 1                # helper1.cpp:11:0
191	.cfi_startproc
192# %bb.0:                                # %entry
193	pushq	%rbp
194	.cfi_def_cfa_offset 16
195	.cfi_offset %rbp, -16
196	movq	%rsp, %rbp
197	.cfi_def_cfa_register %rbp
198.Ltmp4:
199	.loc	3 14 3 prologue_end             # helper1.cpp:14:3
200	xorl	%eax, %eax
201	.loc	3 14 3 epilogue_begin is_stmt 0 # helper1.cpp:14:3
202	popq	%rbp
203	.cfi_def_cfa %rsp, 8
204	retq
205.Ltmp5:
206.Lfunc_end2:
207	.size	_Z4foo2v, .Lfunc_end2-_Z4foo2v
208	.cfi_endproc
209                                        # -- End function
210	.section	.debug_types,"G",@progbits,7448148824980338162,comdat
211	.long	.Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
212.Ldebug_info_start0:
213	.short	4                               # DWARF version number
214	.long	.debug_abbrev                   # Offset Into Abbrev. Section
215	.byte	8                               # Address Size (in bytes)
216	.quad	7448148824980338162             # Type Signature
217	.long	30                              # Type DIE Offset
218	.byte	1                               # Abbrev [1] 0x17:0x42 DW_TAG_type_unit
219	.short	33                              # DW_AT_language
220	.long	.Lline_table_start0             # DW_AT_stmt_list
221	.byte	2                               # Abbrev [2] 0x1e:0x2e DW_TAG_structure_type
222	.byte	5                               # DW_AT_calling_convention
223	.long	.Linfo_string18                 # DW_AT_name
224	.byte	24                              # DW_AT_byte_size
225	.byte	1                               # DW_AT_decl_file
226	.byte	1                               # DW_AT_decl_line
227	.byte	3                               # Abbrev [3] 0x27:0xc DW_TAG_member
228	.long	.Linfo_string15                 # DW_AT_name
229	.long	76                              # DW_AT_type
230	.byte	1                               # DW_AT_decl_file
231	.byte	2                               # DW_AT_decl_line
232	.byte	0                               # DW_AT_data_member_location
233	.byte	3                               # Abbrev [3] 0x33:0xc DW_TAG_member
234	.long	.Linfo_string16                 # DW_AT_name
235	.long	76                              # DW_AT_type
236	.byte	1                               # DW_AT_decl_file
237	.byte	3                               # DW_AT_decl_line
238	.byte	8                               # DW_AT_data_member_location
239	.byte	3                               # Abbrev [3] 0x3f:0xc DW_TAG_member
240	.long	.Linfo_string17                 # DW_AT_name
241	.long	76                              # DW_AT_type
242	.byte	1                               # DW_AT_decl_file
243	.byte	4                               # DW_AT_decl_line
244	.byte	16                              # DW_AT_data_member_location
245	.byte	0                               # End Of Children Mark
246	.byte	4                               # Abbrev [4] 0x4c:0x5 DW_TAG_pointer_type
247	.long	81                              # DW_AT_type
248	.byte	5                               # Abbrev [5] 0x51:0x7 DW_TAG_base_type
249	.long	.Linfo_string13                 # DW_AT_name
250	.byte	6                               # DW_AT_encoding
251	.byte	1                               # DW_AT_byte_size
252	.byte	0                               # End Of Children Mark
253.Ldebug_info_end0:
254	.section	.debug_types,"G",@progbits,5322170643381124694,comdat
255	.long	.Ldebug_info_end1-.Ldebug_info_start1 # Length of Unit
256.Ldebug_info_start1:
257	.short	4                               # DWARF version number
258	.long	.debug_abbrev                   # Offset Into Abbrev. Section
259	.byte	8                               # Address Size (in bytes)
260	.quad	5322170643381124694             # Type Signature
261	.long	30                              # Type DIE Offset
262	.byte	1                               # Abbrev [1] 0x17:0x36 DW_TAG_type_unit
263	.short	33                              # DW_AT_language
264	.long	.Lline_table_start0             # DW_AT_stmt_list
265	.byte	2                               # Abbrev [2] 0x1e:0x22 DW_TAG_structure_type
266	.byte	5                               # DW_AT_calling_convention
267	.long	.Linfo_string20                 # DW_AT_name
268	.byte	16                              # DW_AT_byte_size
269	.byte	1                               # DW_AT_decl_file
270	.byte	6                               # DW_AT_decl_line
271	.byte	3                               # Abbrev [3] 0x27:0xc DW_TAG_member
272	.long	.Linfo_string15                 # DW_AT_name
273	.long	64                              # DW_AT_type
274	.byte	1                               # DW_AT_decl_file
275	.byte	7                               # DW_AT_decl_line
276	.byte	0                               # DW_AT_data_member_location
277	.byte	3                               # Abbrev [3] 0x33:0xc DW_TAG_member
278	.long	.Linfo_string16                 # DW_AT_name
279	.long	64                              # DW_AT_type
280	.byte	1                               # DW_AT_decl_file
281	.byte	8                               # DW_AT_decl_line
282	.byte	8                               # DW_AT_data_member_location
283	.byte	0                               # End Of Children Mark
284	.byte	4                               # Abbrev [4] 0x40:0x5 DW_TAG_pointer_type
285	.long	69                              # DW_AT_type
286	.byte	5                               # Abbrev [5] 0x45:0x7 DW_TAG_base_type
287	.long	.Linfo_string13                 # DW_AT_name
288	.byte	6                               # DW_AT_encoding
289	.byte	1                               # DW_AT_byte_size
290	.byte	0                               # End Of Children Mark
291.Ldebug_info_end1:
292	.section	.debug_types,"G",@progbits,1175092228111723119,comdat
293	.long	.Ldebug_info_end2-.Ldebug_info_start2 # Length of Unit
294.Ldebug_info_start2:
295	.short	4                               # DWARF version number
296	.long	.debug_abbrev                   # Offset Into Abbrev. Section
297	.byte	8                               # Address Size (in bytes)
298	.quad	1175092228111723119             # Type Signature
299	.long	30                              # Type DIE Offset
300	.byte	1                               # Abbrev [1] 0x17:0x42 DW_TAG_type_unit
301	.short	33                              # DW_AT_language
302	.long	.Lline_table_start0             # DW_AT_stmt_list
303	.byte	2                               # Abbrev [2] 0x1e:0x2e DW_TAG_structure_type
304	.byte	5                               # DW_AT_calling_convention
305	.long	.Linfo_string21                 # DW_AT_name
306	.byte	24                              # DW_AT_byte_size
307	.byte	2                               # DW_AT_decl_file
308	.byte	1                               # DW_AT_decl_line
309	.byte	3                               # Abbrev [3] 0x27:0xc DW_TAG_member
310	.long	.Linfo_string15                 # DW_AT_name
311	.long	76                              # DW_AT_type
312	.byte	2                               # DW_AT_decl_file
313	.byte	2                               # DW_AT_decl_line
314	.byte	0                               # DW_AT_data_member_location
315	.byte	3                               # Abbrev [3] 0x33:0xc DW_TAG_member
316	.long	.Linfo_string16                 # DW_AT_name
317	.long	76                              # DW_AT_type
318	.byte	2                               # DW_AT_decl_file
319	.byte	3                               # DW_AT_decl_line
320	.byte	8                               # DW_AT_data_member_location
321	.byte	3                               # Abbrev [3] 0x3f:0xc DW_TAG_member
322	.long	.Linfo_string17                 # DW_AT_name
323	.long	76                              # DW_AT_type
324	.byte	2                               # DW_AT_decl_file
325	.byte	4                               # DW_AT_decl_line
326	.byte	16                              # DW_AT_data_member_location
327	.byte	0                               # End Of Children Mark
328	.byte	4                               # Abbrev [4] 0x4c:0x5 DW_TAG_pointer_type
329	.long	81                              # DW_AT_type
330	.byte	5                               # Abbrev [5] 0x51:0x7 DW_TAG_base_type
331	.long	.Linfo_string13                 # DW_AT_name
332	.byte	6                               # DW_AT_encoding
333	.byte	1                               # DW_AT_byte_size
334	.byte	0                               # End Of Children Mark
335.Ldebug_info_end2:
336	.section	.debug_types,"G",@progbits,12995149649732825572,comdat
337	.long	.Ldebug_info_end3-.Ldebug_info_start3 # Length of Unit
338.Ldebug_info_start3:
339	.short	4                               # DWARF version number
340	.long	.debug_abbrev                   # Offset Into Abbrev. Section
341	.byte	8                               # Address Size (in bytes)
342	.quad	-5451594423976726044            # Type Signature
343	.long	30                              # Type DIE Offset
344	.byte	1                               # Abbrev [1] 0x17:0x36 DW_TAG_type_unit
345	.short	33                              # DW_AT_language
346	.long	.Lline_table_start0             # DW_AT_stmt_list
347	.byte	2                               # Abbrev [2] 0x1e:0x22 DW_TAG_structure_type
348	.byte	5                               # DW_AT_calling_convention
349	.long	.Linfo_string22                 # DW_AT_name
350	.byte	16                              # DW_AT_byte_size
351	.byte	2                               # DW_AT_decl_file
352	.byte	6                               # DW_AT_decl_line
353	.byte	3                               # Abbrev [3] 0x27:0xc DW_TAG_member
354	.long	.Linfo_string15                 # DW_AT_name
355	.long	64                              # DW_AT_type
356	.byte	2                               # DW_AT_decl_file
357	.byte	7                               # DW_AT_decl_line
358	.byte	0                               # DW_AT_data_member_location
359	.byte	3                               # Abbrev [3] 0x33:0xc DW_TAG_member
360	.long	.Linfo_string16                 # DW_AT_name
361	.long	64                              # DW_AT_type
362	.byte	2                               # DW_AT_decl_file
363	.byte	8                               # DW_AT_decl_line
364	.byte	8                               # DW_AT_data_member_location
365	.byte	0                               # End Of Children Mark
366	.byte	4                               # Abbrev [4] 0x40:0x5 DW_TAG_pointer_type
367	.long	69                              # DW_AT_type
368	.byte	5                               # Abbrev [5] 0x45:0x7 DW_TAG_base_type
369	.long	.Linfo_string13                 # DW_AT_name
370	.byte	6                               # DW_AT_encoding
371	.byte	1                               # DW_AT_byte_size
372	.byte	0                               # End Of Children Mark
373.Ldebug_info_end3:
374	.section	.debug_types,"G",@progbits,10693860647081617285,comdat
375	.long	.Ldebug_info_end4-.Ldebug_info_start4 # Length of Unit
376.Ldebug_info_start4:
377	.short	4                               # DWARF version number
378	.long	.debug_abbrev                   # Offset Into Abbrev. Section
379	.byte	8                               # Address Size (in bytes)
380	.quad	-7752883426627934331            # Type Signature
381	.long	30                              # Type DIE Offset
382	.byte	1                               # Abbrev [1] 0x17:0x42 DW_TAG_type_unit
383	.short	33                              # DW_AT_language
384	.long	.Lline_table_start0             # DW_AT_stmt_list
385	.byte	2                               # Abbrev [2] 0x1e:0x2e DW_TAG_structure_type
386	.byte	5                               # DW_AT_calling_convention
387	.long	.Linfo_string23                 # DW_AT_name
388	.byte	24                              # DW_AT_byte_size
389	.byte	3                               # DW_AT_decl_file
390	.byte	1                               # DW_AT_decl_line
391	.byte	3                               # Abbrev [3] 0x27:0xc DW_TAG_member
392	.long	.Linfo_string15                 # DW_AT_name
393	.long	76                              # DW_AT_type
394	.byte	3                               # DW_AT_decl_file
395	.byte	2                               # DW_AT_decl_line
396	.byte	0                               # DW_AT_data_member_location
397	.byte	3                               # Abbrev [3] 0x33:0xc DW_TAG_member
398	.long	.Linfo_string16                 # DW_AT_name
399	.long	76                              # DW_AT_type
400	.byte	3                               # DW_AT_decl_file
401	.byte	3                               # DW_AT_decl_line
402	.byte	8                               # DW_AT_data_member_location
403	.byte	3                               # Abbrev [3] 0x3f:0xc DW_TAG_member
404	.long	.Linfo_string17                 # DW_AT_name
405	.long	76                              # DW_AT_type
406	.byte	3                               # DW_AT_decl_file
407	.byte	4                               # DW_AT_decl_line
408	.byte	16                              # DW_AT_data_member_location
409	.byte	0                               # End Of Children Mark
410	.byte	4                               # Abbrev [4] 0x4c:0x5 DW_TAG_pointer_type
411	.long	81                              # DW_AT_type
412	.byte	5                               # Abbrev [5] 0x51:0x7 DW_TAG_base_type
413	.long	.Linfo_string13                 # DW_AT_name
414	.byte	6                               # DW_AT_encoding
415	.byte	1                               # DW_AT_byte_size
416	.byte	0                               # End Of Children Mark
417.Ldebug_info_end4:
418	.section	.debug_types,"G",@progbits,17604755499357858397,comdat
419	.long	.Ldebug_info_end5-.Ldebug_info_start5 # Length of Unit
420.Ldebug_info_start5:
421	.short	4                               # DWARF version number
422	.long	.debug_abbrev                   # Offset Into Abbrev. Section
423	.byte	8                               # Address Size (in bytes)
424	.quad	-841988574351693219             # Type Signature
425	.long	30                              # Type DIE Offset
426	.byte	1                               # Abbrev [1] 0x17:0x36 DW_TAG_type_unit
427	.short	33                              # DW_AT_language
428	.long	.Lline_table_start0             # DW_AT_stmt_list
429	.byte	2                               # Abbrev [2] 0x1e:0x22 DW_TAG_structure_type
430	.byte	5                               # DW_AT_calling_convention
431	.long	.Linfo_string24                 # DW_AT_name
432	.byte	16                              # DW_AT_byte_size
433	.byte	3                               # DW_AT_decl_file
434	.byte	6                               # DW_AT_decl_line
435	.byte	3                               # Abbrev [3] 0x27:0xc DW_TAG_member
436	.long	.Linfo_string15                 # DW_AT_name
437	.long	64                              # DW_AT_type
438	.byte	3                               # DW_AT_decl_file
439	.byte	7                               # DW_AT_decl_line
440	.byte	0                               # DW_AT_data_member_location
441	.byte	3                               # Abbrev [3] 0x33:0xc DW_TAG_member
442	.long	.Linfo_string16                 # DW_AT_name
443	.long	64                              # DW_AT_type
444	.byte	3                               # DW_AT_decl_file
445	.byte	8                               # DW_AT_decl_line
446	.byte	8                               # DW_AT_data_member_location
447	.byte	0                               # End Of Children Mark
448	.byte	4                               # Abbrev [4] 0x40:0x5 DW_TAG_pointer_type
449	.long	69                              # DW_AT_type
450	.byte	5                               # Abbrev [5] 0x45:0x7 DW_TAG_base_type
451	.long	.Linfo_string13                 # DW_AT_name
452	.byte	6                               # DW_AT_encoding
453	.byte	1                               # DW_AT_byte_size
454	.byte	0                               # End Of Children Mark
455.Ldebug_info_end5:
456	.section	.debug_abbrev,"",@progbits
457	.byte	1                               # Abbreviation Code
458	.byte	65                              # DW_TAG_type_unit
459	.byte	1                               # DW_CHILDREN_yes
460	.byte	19                              # DW_AT_language
461	.byte	5                               # DW_FORM_data2
462	.byte	16                              # DW_AT_stmt_list
463	.byte	23                              # DW_FORM_sec_offset
464	.byte	0                               # EOM(1)
465	.byte	0                               # EOM(2)
466	.byte	2                               # Abbreviation Code
467	.byte	19                              # DW_TAG_structure_type
468	.byte	1                               # DW_CHILDREN_yes
469	.byte	54                              # DW_AT_calling_convention
470	.byte	11                              # DW_FORM_data1
471	.byte	3                               # DW_AT_name
472	.byte	14                              # DW_FORM_strp
473	.byte	11                              # DW_AT_byte_size
474	.byte	11                              # DW_FORM_data1
475	.byte	58                              # DW_AT_decl_file
476	.byte	11                              # DW_FORM_data1
477	.byte	59                              # DW_AT_decl_line
478	.byte	11                              # DW_FORM_data1
479	.byte	0                               # EOM(1)
480	.byte	0                               # EOM(2)
481	.byte	3                               # Abbreviation Code
482	.byte	13                              # DW_TAG_member
483	.byte	0                               # DW_CHILDREN_no
484	.byte	3                               # DW_AT_name
485	.byte	14                              # DW_FORM_strp
486	.byte	73                              # DW_AT_type
487	.byte	19                              # DW_FORM_ref4
488	.byte	58                              # DW_AT_decl_file
489	.byte	11                              # DW_FORM_data1
490	.byte	59                              # DW_AT_decl_line
491	.byte	11                              # DW_FORM_data1
492	.byte	56                              # DW_AT_data_member_location
493	.byte	11                              # DW_FORM_data1
494	.byte	0                               # EOM(1)
495	.byte	0                               # EOM(2)
496	.byte	4                               # Abbreviation Code
497	.byte	15                              # DW_TAG_pointer_type
498	.byte	0                               # DW_CHILDREN_no
499	.byte	73                              # DW_AT_type
500	.byte	19                              # DW_FORM_ref4
501	.byte	0                               # EOM(1)
502	.byte	0                               # EOM(2)
503	.byte	5                               # Abbreviation Code
504	.byte	36                              # DW_TAG_base_type
505	.byte	0                               # DW_CHILDREN_no
506	.byte	3                               # DW_AT_name
507	.byte	14                              # DW_FORM_strp
508	.byte	62                              # DW_AT_encoding
509	.byte	11                              # DW_FORM_data1
510	.byte	11                              # DW_AT_byte_size
511	.byte	11                              # DW_FORM_data1
512	.byte	0                               # EOM(1)
513	.byte	0                               # EOM(2)
514	.byte	6                               # Abbreviation Code
515	.byte	17                              # DW_TAG_compile_unit
516	.byte	1                               # DW_CHILDREN_yes
517	.byte	37                              # DW_AT_producer
518	.byte	14                              # DW_FORM_strp
519	.byte	19                              # DW_AT_language
520	.byte	5                               # DW_FORM_data2
521	.byte	3                               # DW_AT_name
522	.byte	14                              # DW_FORM_strp
523	.byte	16                              # DW_AT_stmt_list
524	.byte	23                              # DW_FORM_sec_offset
525	.byte	27                              # DW_AT_comp_dir
526	.byte	14                              # DW_FORM_strp
527	.byte	17                              # DW_AT_low_pc
528	.byte	1                               # DW_FORM_addr
529	.byte	18                              # DW_AT_high_pc
530	.byte	6                               # DW_FORM_data4
531	.byte	0                               # EOM(1)
532	.byte	0                               # EOM(2)
533	.byte	7                               # Abbreviation Code
534	.byte	46                              # DW_TAG_subprogram
535	.byte	1                               # DW_CHILDREN_yes
536	.byte	17                              # DW_AT_low_pc
537	.byte	1                               # DW_FORM_addr
538	.byte	18                              # DW_AT_high_pc
539	.byte	6                               # DW_FORM_data4
540	.byte	64                              # DW_AT_frame_base
541	.byte	24                              # DW_FORM_exprloc
542	.byte	3                               # DW_AT_name
543	.byte	14                              # DW_FORM_strp
544	.byte	58                              # DW_AT_decl_file
545	.byte	11                              # DW_FORM_data1
546	.byte	59                              # DW_AT_decl_line
547	.byte	11                              # DW_FORM_data1
548	.byte	73                              # DW_AT_type
549	.byte	19                              # DW_FORM_ref4
550	.byte	63                              # DW_AT_external
551	.byte	25                              # DW_FORM_flag_present
552	.byte	0                               # EOM(1)
553	.byte	0                               # EOM(2)
554	.byte	8                               # Abbreviation Code
555	.byte	5                               # DW_TAG_formal_parameter
556	.byte	0                               # DW_CHILDREN_no
557	.byte	2                               # DW_AT_location
558	.byte	24                              # DW_FORM_exprloc
559	.byte	3                               # DW_AT_name
560	.byte	14                              # DW_FORM_strp
561	.byte	58                              # DW_AT_decl_file
562	.byte	11                              # DW_FORM_data1
563	.byte	59                              # DW_AT_decl_line
564	.byte	11                              # DW_FORM_data1
565	.byte	73                              # DW_AT_type
566	.byte	19                              # DW_FORM_ref4
567	.byte	0                               # EOM(1)
568	.byte	0                               # EOM(2)
569	.byte	9                               # Abbreviation Code
570	.byte	52                              # DW_TAG_variable
571	.byte	0                               # DW_CHILDREN_no
572	.byte	2                               # DW_AT_location
573	.byte	24                              # DW_FORM_exprloc
574	.byte	3                               # DW_AT_name
575	.byte	14                              # DW_FORM_strp
576	.byte	58                              # DW_AT_decl_file
577	.byte	11                              # DW_FORM_data1
578	.byte	59                              # DW_AT_decl_line
579	.byte	11                              # DW_FORM_data1
580	.byte	73                              # DW_AT_type
581	.byte	19                              # DW_FORM_ref4
582	.byte	0                               # EOM(1)
583	.byte	0                               # EOM(2)
584	.byte	10                              # Abbreviation Code
585	.byte	19                              # DW_TAG_structure_type
586	.byte	0                               # DW_CHILDREN_no
587	.byte	60                              # DW_AT_declaration
588	.byte	25                              # DW_FORM_flag_present
589	.byte	105                             # DW_AT_signature
590	.byte	32                              # DW_FORM_ref_sig8
591	.byte	0                               # EOM(1)
592	.byte	0                               # EOM(2)
593	.byte	11                              # Abbreviation Code
594	.byte	46                              # DW_TAG_subprogram
595	.byte	1                               # DW_CHILDREN_yes
596	.byte	17                              # DW_AT_low_pc
597	.byte	1                               # DW_FORM_addr
598	.byte	18                              # DW_AT_high_pc
599	.byte	6                               # DW_FORM_data4
600	.byte	64                              # DW_AT_frame_base
601	.byte	24                              # DW_FORM_exprloc
602	.byte	110                             # DW_AT_linkage_name
603	.byte	14                              # DW_FORM_strp
604	.byte	3                               # DW_AT_name
605	.byte	14                              # DW_FORM_strp
606	.byte	58                              # DW_AT_decl_file
607	.byte	11                              # DW_FORM_data1
608	.byte	59                              # DW_AT_decl_line
609	.byte	11                              # DW_FORM_data1
610	.byte	73                              # DW_AT_type
611	.byte	19                              # DW_FORM_ref4
612	.byte	63                              # DW_AT_external
613	.byte	25                              # DW_FORM_flag_present
614	.byte	0                               # EOM(1)
615	.byte	0                               # EOM(2)
616    .byte   12                              # Abbreviation Code <-- Manually added abbrev decl
617    .byte	52                              # DW_TAG_variable
618	.byte	0                               # DW_CHILDREN_no
619	.byte	2                               # DW_AT_location
620	.byte	24                              # DW_FORM_exprloc
621	.byte	3                               # DW_AT_name
622	.byte	14                              # DW_FORM_strp
623	.byte	58                              # DW_AT_decl_file
624	.byte	11                              # DW_FORM_data1
625	.byte	59                              # DW_AT_decl_line
626	.byte	11                              # DW_FORM_data1
627	.byte	73                              # DW_AT_type
628    .byte   16                              # DW_FORM_ref_addr
629    .byte   0                               # EOM(1)
630    .byte   0                               # EOM(2)
631	.byte	0                               # EOM(3)
632	.section	.debug_info,"",@progbits
633.Lcu_begin0:
634	.long	.Ldebug_info_end6-.Ldebug_info_start6 # Length of Unit
635.Ldebug_info_start6:
636	.short	4                               # DWARF version number
637	.long	.debug_abbrev                   # Offset Into Abbrev. Section
638	.byte	8                               # Address Size (in bytes)
639	.byte	6                               # Abbrev [6] 0xb:0x9c DW_TAG_compile_unit
640	.long	.Linfo_string0                  # DW_AT_producer
641	.short	33                              # DW_AT_language
642	.long	.Linfo_string1                  # DW_AT_name
643	.long	.Lline_table_start0             # DW_AT_stmt_list
644	.long	.Linfo_string2                  # DW_AT_comp_dir
645	.quad	.Lfunc_begin0                   # DW_AT_low_pc
646	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
647	.byte	7                               # Abbrev [7] 0x2a:0x52 DW_TAG_subprogram
648	.quad	.Lfunc_begin0                   # DW_AT_low_pc
649	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
650	.byte	1                               # DW_AT_frame_base
651	.byte	86
652	.long	.Linfo_string5                  # DW_AT_name
653	.byte	1                               # DW_AT_decl_file
654	.byte	10                              # DW_AT_decl_line
655	.long	124                             # DW_AT_type
656                                        # DW_AT_external
657	.byte	8                               # Abbrev [8] 0x43:0xe DW_TAG_formal_parameter
658	.byte	2                               # DW_AT_location
659	.byte	145
660	.byte	120
661	.long	.Linfo_string11                 # DW_AT_name
662	.byte	1                               # DW_AT_decl_file
663	.byte	10                              # DW_AT_decl_line
664	.long	124                             # DW_AT_type
665	.byte	8                               # Abbrev [8] 0x51:0xe DW_TAG_formal_parameter
666	.byte	2                               # DW_AT_location
667	.byte	145
668	.byte	112
669	.long	.Linfo_string12                 # DW_AT_name
670	.byte	1                               # DW_AT_decl_file
671	.byte	10                              # DW_AT_decl_line
672	.long	131                             # DW_AT_type
673	.byte	9                               # Abbrev [9] 0x5f:0xe DW_TAG_variable
674	.byte	2                               # DW_AT_location
675	.byte	145
676	.byte	88
677	.long	.Linfo_string14                 # DW_AT_name
678	.byte	1                               # DW_AT_decl_file
679	.byte	11                              # DW_AT_decl_line
680	.long	148                             # DW_AT_type
681	.byte	12                              # Abbrev [12] 0x6d:0xe DW_TAG_variable <-- Manually modified s/9/12
682	.byte	2                               # DW_AT_location
683	.byte	145
684	.byte	72
685	.long	.Linfo_string19                 # DW_AT_name
686	.byte	1                               # DW_AT_decl_file
687	.byte	15                              # DW_AT_decl_line
688	.long	.Lmanual_label                  # DW_AT_type <-- Manually modified
689	.byte	0                               # End Of Children Mark
690	.byte	5                               # Abbrev [5] 0x7c:0x7 DW_TAG_base_type
691	.long	.Linfo_string6                  # DW_AT_name
692	.byte	5                               # DW_AT_encoding
693	.byte	4                               # DW_AT_byte_size
694	.byte	4                               # Abbrev [4] 0x83:0x5 DW_TAG_pointer_type
695	.long	136                             # DW_AT_type
696	.byte	4                               # Abbrev [4] 0x88:0x5 DW_TAG_pointer_type
697	.long	141                             # DW_AT_type
698	.byte	5                               # Abbrev [5] 0x8d:0x7 DW_TAG_base_type
699	.long	.Linfo_string13                 # DW_AT_name
700	.byte	6                               # DW_AT_encoding
701	.byte	1                               # DW_AT_byte_size
702.Lmanual_label_forward:
703	.byte	10                              # Abbrev [10] 0x94:0x9 DW_TAG_structure_type
704                                        # DW_AT_declaration
705	.quad	7448148824980338162             # DW_AT_signature
706	.byte	10                              # Abbrev [10] 0x9d:0x9 DW_TAG_structure_type
707                                        # DW_AT_declaration
708	.quad	5322170643381124694             # DW_AT_signature
709	.byte	0                               # End Of Children Mark
710.Ldebug_info_end6:
711.Lcu_begin1:
712	.long	.Ldebug_info_end7-.Ldebug_info_start7 # Length of Unit
713.Ldebug_info_start7:
714	.short	4                               # DWARF version number
715	.long	.debug_abbrev                   # Offset Into Abbrev. Section
716	.byte	8                               # Address Size (in bytes)
717	.byte	6                               # Abbrev [6] 0xb:0x73 DW_TAG_compile_unit
718	.long	.Linfo_string0                  # DW_AT_producer
719	.short	33                              # DW_AT_language
720	.long	.Linfo_string3                  # DW_AT_name
721	.long	.Lline_table_start0             # DW_AT_stmt_list
722	.long	.Linfo_string2                  # DW_AT_comp_dir
723	.quad	.Lfunc_begin1                   # DW_AT_low_pc
724	.long	.Lfunc_end1-.Lfunc_begin1       # DW_AT_high_pc
725	.byte	11                              # Abbrev [11] 0x2a:0x3a DW_TAG_subprogram
726	.quad	.Lfunc_begin1                   # DW_AT_low_pc
727	.long	.Lfunc_end1-.Lfunc_begin1       # DW_AT_high_pc
728	.byte	1                               # DW_AT_frame_base
729	.byte	86
730	.long	.Linfo_string7                  # DW_AT_linkage_name
731	.long	.Linfo_string8                  # DW_AT_name
732	.byte	2                               # DW_AT_decl_file
733	.byte	11                              # DW_AT_decl_line
734	.long	100                             # DW_AT_type
735                                        # DW_AT_external
736	.byte	12                              # Abbrev [12] 0x47:0xe DW_TAG_variable2 <-- Manually modified s/9/12
737	.byte	2                               # DW_AT_location
738	.byte	145
739	.byte	104
740	.long	.Linfo_string14                 # DW_AT_name
741	.byte	2                               # DW_AT_decl_file
742	.byte	12                              # DW_AT_decl_line
743	.long	.Lmanual_label_forward          # DW_AT_type <-- Manually modified
744	.byte	12                              # Abbrev [12] 0x55:0xe DW_TAG_variable <-- Manually modified s/9/12
745	.byte	2                               # DW_AT_location
746	.byte	145
747	.byte	88
748	.long	.Linfo_string19                 # DW_AT_name
749	.byte	2                               # DW_AT_decl_file
750	.byte	13                              # DW_AT_decl_line
751	.long	.Lmanual_label2                 # DW_AT_type <-- Manually modified
752	.byte	0                               # End Of Children Mark
753	.byte	5                               # Abbrev [5] 0x64:0x7 DW_TAG_base_type
754	.long	.Linfo_string6                  # DW_AT_name
755	.byte	5                               # DW_AT_encoding
756	.byte	4                               # DW_AT_byte_size
757.Lmanual_label:
758	.byte	10                              # Abbrev [10] 0x6b:0x9 DW_TAG_structure_type
759                                        # DW_AT_declaration
760	.quad	1175092228111723119             # DW_AT_signature
761	.byte	10                              # Abbrev [10] 0x74:0x9 DW_TAG_structure_type
762                                        # DW_AT_declaration
763	.quad	-5451594423976726044            # DW_AT_signature
764	.byte	0                               # End Of Children Mark
765.Ldebug_info_end7:
766.Lcu_begin2:
767	.long	.Ldebug_info_end8-.Ldebug_info_start8 # Length of Unit
768.Ldebug_info_start8:
769	.short	4                               # DWARF version number
770	.long	.debug_abbrev                   # Offset Into Abbrev. Section
771	.byte	8                               # Address Size (in bytes)
772	.byte	6                               # Abbrev [6] 0xb:0x73 DW_TAG_compile_unit
773	.long	.Linfo_string0                  # DW_AT_producer
774	.short	33                              # DW_AT_language
775	.long	.Linfo_string4                  # DW_AT_name
776	.long	.Lline_table_start0             # DW_AT_stmt_list
777	.long	.Linfo_string2                  # DW_AT_comp_dir
778	.quad	.Lfunc_begin2                   # DW_AT_low_pc
779	.long	.Lfunc_end2-.Lfunc_begin2       # DW_AT_high_pc
780	.byte	11                              # Abbrev [11] 0x2a:0x3a DW_TAG_subprogram
781	.quad	.Lfunc_begin2                   # DW_AT_low_pc
782	.long	.Lfunc_end2-.Lfunc_begin2       # DW_AT_high_pc
783	.byte	1                               # DW_AT_frame_base
784	.byte	86
785	.long	.Linfo_string9                  # DW_AT_linkage_name
786	.long	.Linfo_string10                 # DW_AT_name
787	.byte	3                               # DW_AT_decl_file
788	.byte	11                              # DW_AT_decl_line
789	.long	100                             # DW_AT_type
790                                        # DW_AT_external
791	.byte	9                               # Abbrev [9] 0x47:0xe DW_TAG_variable
792	.byte	2                               # DW_AT_location
793	.byte	145
794	.byte	104
795	.long	.Linfo_string14                 # DW_AT_name
796	.byte	3                               # DW_AT_decl_file
797	.byte	12                              # DW_AT_decl_line
798	.long	107                             # DW_AT_type
799	.byte	9                               # Abbrev [9] 0x55:0xe DW_TAG_variable
800	.byte	2                               # DW_AT_location
801	.byte	145
802	.byte	88
803	.long	.Linfo_string19                 # DW_AT_name
804	.byte	3                               # DW_AT_decl_file
805	.byte	13                              # DW_AT_decl_line
806	.long	116                             # DW_AT_type
807	.byte	0                               # End Of Children Mark
808	.byte	5                               # Abbrev [5] 0x64:0x7 DW_TAG_base_type
809	.long	.Linfo_string6                  # DW_AT_name
810	.byte	5                               # DW_AT_encoding
811	.byte	4                               # DW_AT_byte_size
812.Lmanual_label2:
813	.byte	10                              # Abbrev [10] 0x6b:0x9 DW_TAG_structure_type
814                                        # DW_AT_declaration
815	.quad	-7752883426627934331            # DW_AT_signature
816	.byte	10                              # Abbrev [10] 0x74:0x9 DW_TAG_structure_type
817                                        # DW_AT_declaration
818	.quad	-841988574351693219             # DW_AT_signature
819	.byte	0                               # End Of Children Mark
820.Ldebug_info_end8:
821	.section	.debug_str,"MS",@progbits,1
822.Linfo_string0:
823	.asciz	"clang version 17.0.0 (https://github.com/llvm/llvm-project.git 73027ae39b1492e5b6033358a13b86d7d1e781ae)" # string offset=0
824.Linfo_string1:
825	.asciz	"main.cpp"                      # string offset=105
826.Linfo_string2:
827	.asciz	"/dwarf4-types-forward-cross-reference-test" # string offset=114
828.Linfo_string3:
829	.asciz	"helper.cpp"                    # string offset=194
830.Linfo_string4:
831	.asciz	"helper1.cpp"                   # string offset=205
832.Linfo_string5:
833	.asciz	"main"                          # string offset=217
834.Linfo_string6:
835	.asciz	"int"                           # string offset=222
836.Linfo_string7:
837	.asciz	"_Z3foov"                       # string offset=226
838.Linfo_string8:
839	.asciz	"foo"                           # string offset=234
840.Linfo_string9:
841	.asciz	"_Z4foo2v"                      # string offset=238
842.Linfo_string10:
843	.asciz	"foo2"                          # string offset=247
844.Linfo_string11:
845	.asciz	"argc"                          # string offset=252
846.Linfo_string12:
847	.asciz	"argv"                          # string offset=257
848.Linfo_string13:
849	.asciz	"char"                          # string offset=262
850.Linfo_string14:
851	.asciz	"f"                             # string offset=267
852.Linfo_string15:
853	.asciz	"c1"                            # string offset=269
854.Linfo_string16:
855	.asciz	"c2"                            # string offset=272
856.Linfo_string17:
857	.asciz	"c3"                            # string offset=275
858.Linfo_string18:
859	.asciz	"Foo"                           # string offset=278
860.Linfo_string19:
861	.asciz	"f2"                            # string offset=282
862.Linfo_string20:
863	.asciz	"Foo2"                          # string offset=285
864.Linfo_string21:
865	.asciz	"Foo2a"                         # string offset=290
866.Linfo_string22:
867	.asciz	"Foo3"                          # string offset=296
868.Linfo_string23:
869	.asciz	"Foo3a"                         # string offset=301
870.Linfo_string24:
871	.asciz	"Foo4"                          # string offset=307
872	.ident	"clang version 17.0.0 (https://github.com/llvm/llvm-project.git 73027ae39b1492e5b6033358a13b86d7d1e781ae)"
873	.ident	"clang version 17.0.0 (https://github.com/llvm/llvm-project.git 73027ae39b1492e5b6033358a13b86d7d1e781ae)"
874	.ident	"clang version 17.0.0 (https://github.com/llvm/llvm-project.git 73027ae39b1492e5b6033358a13b86d7d1e781ae)"
875	.section	".note.GNU-stack","",@progbits
876	.addrsig
877	.section	.debug_line,"",@progbits
878.Lline_table_start0:
879