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