xref: /llvm-project/bolt/test/X86/dwarf5-debug-line.s (revision 11791ae7b0b05b8bd8d806331ff51da618912cf8)
1014cd37fSAlexander Yermolovich# REQUIRES: system-linux
2014cd37fSAlexander Yermolovich
3014cd37fSAlexander Yermolovich# RUN: llvm-mc -dwarf-version=5 -filetype=obj -triple x86_64-unknown-linux %s -o %t1.o
4014cd37fSAlexander Yermolovich# RUN: %clang %cflags -dwarf-5 %t1.o -o %t.exe -Wl,-q
5d648aa1bSMaksim Panchenko# RUN: llvm-bolt %t.exe -o %t.bolt --update-debug-sections
6014cd37fSAlexander Yermolovich# RUN: llvm-dwarfdump --show-form --verbose --debug-line %t.exe | FileCheck --check-prefix=PRECHECK %s
7014cd37fSAlexander Yermolovich# RUN: llvm-dwarfdump --show-form --verbose --debug-line %t.bolt | FileCheck --check-prefix=POSTCHECK %s
8014cd37fSAlexander Yermolovich
9*11791ae7SSayhaan Siddiqui## This test checks that DWARF5 .debug_line is handled correctly.
10014cd37fSAlexander Yermolovich
11014cd37fSAlexander Yermolovich# PRECHECK: version: 5
12ec2711b3SAlexander Yermolovich# PRECHECK: include_directories[  0] =  .debug_line_str
13ec2711b3SAlexander Yermolovich# PRECHECK-SAME: ] = "."
14014cd37fSAlexander Yermolovich# PRECHECK-NEXT: file_names[  0]:
15ec2711b3SAlexander Yermolovich# PRECHECK-NEXT: name:  .debug_line_str
16ec2711b3SAlexander Yermolovich# PRECHECK-SAME: = "main.cpp"
17014cd37fSAlexander Yermolovich# PRECHECK-NEXT: dir_index: 0
18014cd37fSAlexander Yermolovich# PRECHECK-NEXT: md5_checksum: bb12fec8d002b1f0e06f7dee4604c6cc
19014cd37fSAlexander Yermolovich# PRECHECK-NOT: file_names[  1]:
20014cd37fSAlexander Yermolovich
21014cd37fSAlexander Yermolovich# POSTCHECK: version: 5
22ec2711b3SAlexander Yermolovich# POSTCHECK: include_directories[  0] =  .debug_line_str
23ec2711b3SAlexander Yermolovich# POSTCHECK-SAME: ] = "."
24014cd37fSAlexander Yermolovich# POSTCHECK-NEXT: file_names[  0]:
25ec2711b3SAlexander Yermolovich# POSTCHECK-NEXT: name:  .debug_line_str
26ec2711b3SAlexander Yermolovich# POSTCHECK-SAME: ] = "main.cpp"
27014cd37fSAlexander Yermolovich# POSTCHECK-NEXT: dir_index: 0
28014cd37fSAlexander Yermolovich# POSTCHECK-NEXT: md5_checksum: bb12fec8d002b1f0e06f7dee4604c6cc
29014cd37fSAlexander Yermolovich# POSTCHECK-NOT: file_names[  1]:
30014cd37fSAlexander Yermolovich
31014cd37fSAlexander Yermolovich# int main() {
32014cd37fSAlexander Yermolovich#    return 0;
33014cd37fSAlexander Yermolovich# }
34014cd37fSAlexander Yermolovich
35014cd37fSAlexander Yermolovich	.text
36014cd37fSAlexander Yermolovich	.file	"main.cpp"
37014cd37fSAlexander Yermolovich	.globl	main                            # -- Begin function main
38014cd37fSAlexander Yermolovich	.p2align	4, 0x90
39014cd37fSAlexander Yermolovich	.type	main,@function
40014cd37fSAlexander Yermolovichmain:                                   # @main
41014cd37fSAlexander Yermolovich.Lfunc_begin0:
42014cd37fSAlexander Yermolovich	.file	0 "." "main.cpp" md5 0xbb12fec8d002b1f0e06f7dee4604c6cc
43014cd37fSAlexander Yermolovich	.loc	0 1 0                           # main.cpp:1:0
44014cd37fSAlexander Yermolovich	.cfi_startproc
45014cd37fSAlexander Yermolovich# %bb.0:                                # %entry
46014cd37fSAlexander Yermolovich	pushq	%rbp
47014cd37fSAlexander Yermolovich	.cfi_def_cfa_offset 16
48014cd37fSAlexander Yermolovich	.cfi_offset %rbp, -16
49014cd37fSAlexander Yermolovich	movq	%rsp, %rbp
50014cd37fSAlexander Yermolovich	.cfi_def_cfa_register %rbp
51014cd37fSAlexander Yermolovich	movl	$0, -4(%rbp)
52014cd37fSAlexander Yermolovich.Ltmp0:
53014cd37fSAlexander Yermolovich	.loc	0 2 3 prologue_end              # main.cpp:2:3
54014cd37fSAlexander Yermolovich	xorl	%eax, %eax
55014cd37fSAlexander Yermolovich	popq	%rbp
56014cd37fSAlexander Yermolovich	.cfi_def_cfa %rsp, 8
57014cd37fSAlexander Yermolovich	retq
58014cd37fSAlexander Yermolovich.Ltmp1:
59014cd37fSAlexander Yermolovich.Lfunc_end0:
60014cd37fSAlexander Yermolovich	.size	main, .Lfunc_end0-main
61014cd37fSAlexander Yermolovich	.cfi_endproc
62014cd37fSAlexander Yermolovich                                        # -- End function
63014cd37fSAlexander Yermolovich	.section	.debug_abbrev,"",@progbits
64014cd37fSAlexander Yermolovich	.byte	1                               # Abbreviation Code
65014cd37fSAlexander Yermolovich	.byte	17                              # DW_TAG_compile_unit
66014cd37fSAlexander Yermolovich	.byte	1                               # DW_CHILDREN_yes
67014cd37fSAlexander Yermolovich	.byte	37                              # DW_AT_producer
68014cd37fSAlexander Yermolovich	.byte	37                              # DW_FORM_strx1
69014cd37fSAlexander Yermolovich	.byte	19                              # DW_AT_language
70014cd37fSAlexander Yermolovich	.byte	5                               # DW_FORM_data2
71014cd37fSAlexander Yermolovich	.byte	3                               # DW_AT_name
72014cd37fSAlexander Yermolovich	.byte	37                              # DW_FORM_strx1
73014cd37fSAlexander Yermolovich	.byte	114                             # DW_AT_str_offsets_base
74014cd37fSAlexander Yermolovich	.byte	23                              # DW_FORM_sec_offset
75014cd37fSAlexander Yermolovich	.byte	16                              # DW_AT_stmt_list
76014cd37fSAlexander Yermolovich	.byte	23                              # DW_FORM_sec_offset
77014cd37fSAlexander Yermolovich	.byte	27                              # DW_AT_comp_dir
78014cd37fSAlexander Yermolovich	.byte	37                              # DW_FORM_strx1
79014cd37fSAlexander Yermolovich	.byte	17                              # DW_AT_low_pc
80014cd37fSAlexander Yermolovich	.byte	27                              # DW_FORM_addrx
81014cd37fSAlexander Yermolovich	.byte	18                              # DW_AT_high_pc
82014cd37fSAlexander Yermolovich	.byte	6                               # DW_FORM_data4
83014cd37fSAlexander Yermolovich	.byte	115                             # DW_AT_addr_base
84014cd37fSAlexander Yermolovich	.byte	23                              # DW_FORM_sec_offset
85014cd37fSAlexander Yermolovich	.byte	0                               # EOM(1)
86014cd37fSAlexander Yermolovich	.byte	0                               # EOM(2)
87014cd37fSAlexander Yermolovich	.byte	2                               # Abbreviation Code
88014cd37fSAlexander Yermolovich	.byte	46                              # DW_TAG_subprogram
89014cd37fSAlexander Yermolovich	.byte	0                               # DW_CHILDREN_no
90014cd37fSAlexander Yermolovich	.byte	17                              # DW_AT_low_pc
91014cd37fSAlexander Yermolovich	.byte	27                              # DW_FORM_addrx
92014cd37fSAlexander Yermolovich	.byte	18                              # DW_AT_high_pc
93014cd37fSAlexander Yermolovich	.byte	6                               # DW_FORM_data4
94014cd37fSAlexander Yermolovich	.byte	64                              # DW_AT_frame_base
95014cd37fSAlexander Yermolovich	.byte	24                              # DW_FORM_exprloc
96014cd37fSAlexander Yermolovich	.byte	3                               # DW_AT_name
97014cd37fSAlexander Yermolovich	.byte	37                              # DW_FORM_strx1
98014cd37fSAlexander Yermolovich	.byte	58                              # DW_AT_decl_file
99014cd37fSAlexander Yermolovich	.byte	11                              # DW_FORM_data1
100014cd37fSAlexander Yermolovich	.byte	59                              # DW_AT_decl_line
101014cd37fSAlexander Yermolovich	.byte	11                              # DW_FORM_data1
102014cd37fSAlexander Yermolovich	.byte	73                              # DW_AT_type
103014cd37fSAlexander Yermolovich	.byte	19                              # DW_FORM_ref4
104014cd37fSAlexander Yermolovich	.byte	63                              # DW_AT_external
105014cd37fSAlexander Yermolovich	.byte	25                              # DW_FORM_flag_present
106014cd37fSAlexander Yermolovich	.byte	0                               # EOM(1)
107014cd37fSAlexander Yermolovich	.byte	0                               # EOM(2)
108014cd37fSAlexander Yermolovich	.byte	3                               # Abbreviation Code
109014cd37fSAlexander Yermolovich	.byte	36                              # DW_TAG_base_type
110014cd37fSAlexander Yermolovich	.byte	0                               # DW_CHILDREN_no
111014cd37fSAlexander Yermolovich	.byte	3                               # DW_AT_name
112014cd37fSAlexander Yermolovich	.byte	37                              # DW_FORM_strx1
113014cd37fSAlexander Yermolovich	.byte	62                              # DW_AT_encoding
114014cd37fSAlexander Yermolovich	.byte	11                              # DW_FORM_data1
115014cd37fSAlexander Yermolovich	.byte	11                              # DW_AT_byte_size
116014cd37fSAlexander Yermolovich	.byte	11                              # DW_FORM_data1
117014cd37fSAlexander Yermolovich	.byte	0                               # EOM(1)
118014cd37fSAlexander Yermolovich	.byte	0                               # EOM(2)
119014cd37fSAlexander Yermolovich	.byte	0                               # EOM(3)
120014cd37fSAlexander Yermolovich	.section	.debug_info,"",@progbits
121014cd37fSAlexander Yermolovich.Lcu_begin0:
122014cd37fSAlexander Yermolovich	.long	.Ldebug_info_end0-.Ldebug_info_start0 # Length of Unit
123014cd37fSAlexander Yermolovich.Ldebug_info_start0:
124014cd37fSAlexander Yermolovich	.short	5                               # DWARF version number
125014cd37fSAlexander Yermolovich	.byte	1                               # DWARF Unit Type
126014cd37fSAlexander Yermolovich	.byte	8                               # Address Size (in bytes)
127014cd37fSAlexander Yermolovich	.long	.debug_abbrev                   # Offset Into Abbrev. Section
128014cd37fSAlexander Yermolovich	.byte	1                               # Abbrev [1] 0xc:0x2b DW_TAG_compile_unit
129014cd37fSAlexander Yermolovich	.byte	0                               # DW_AT_producer
130014cd37fSAlexander Yermolovich	.short	33                              # DW_AT_language
131014cd37fSAlexander Yermolovich	.byte	1                               # DW_AT_name
132014cd37fSAlexander Yermolovich	.long	.Lstr_offsets_base0             # DW_AT_str_offsets_base
133014cd37fSAlexander Yermolovich	.long	.Lline_table_start0             # DW_AT_stmt_list
134014cd37fSAlexander Yermolovich	.byte	2                               # DW_AT_comp_dir
135014cd37fSAlexander Yermolovich	.byte	0                               # DW_AT_low_pc
136014cd37fSAlexander Yermolovich	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
137014cd37fSAlexander Yermolovich	.long	.Laddr_table_base0              # DW_AT_addr_base
138014cd37fSAlexander Yermolovich	.byte	2                               # Abbrev [2] 0x23:0xf DW_TAG_subprogram
139014cd37fSAlexander Yermolovich	.byte	0                               # DW_AT_low_pc
140014cd37fSAlexander Yermolovich	.long	.Lfunc_end0-.Lfunc_begin0       # DW_AT_high_pc
141014cd37fSAlexander Yermolovich	.byte	1                               # DW_AT_frame_base
142014cd37fSAlexander Yermolovich	.byte	86
143014cd37fSAlexander Yermolovich	.byte	3                               # DW_AT_name
144014cd37fSAlexander Yermolovich	.byte	0                               # DW_AT_decl_file
145014cd37fSAlexander Yermolovich	.byte	1                               # DW_AT_decl_line
146014cd37fSAlexander Yermolovich	.long	50                              # DW_AT_type
147014cd37fSAlexander Yermolovich                                        # DW_AT_external
148014cd37fSAlexander Yermolovich	.byte	3                               # Abbrev [3] 0x32:0x4 DW_TAG_base_type
149014cd37fSAlexander Yermolovich	.byte	4                               # DW_AT_name
150014cd37fSAlexander Yermolovich	.byte	5                               # DW_AT_encoding
151014cd37fSAlexander Yermolovich	.byte	4                               # DW_AT_byte_size
152014cd37fSAlexander Yermolovich	.byte	0                               # End Of Children Mark
153014cd37fSAlexander Yermolovich.Ldebug_info_end0:
154014cd37fSAlexander Yermolovich	.section	.debug_str_offsets,"",@progbits
155014cd37fSAlexander Yermolovich	.long	24                              # Length of String Offsets Set
156014cd37fSAlexander Yermolovich	.short	5
157014cd37fSAlexander Yermolovich	.short	0
158014cd37fSAlexander Yermolovich.Lstr_offsets_base0:
159014cd37fSAlexander Yermolovich	.section	.debug_str,"MS",@progbits,1
160014cd37fSAlexander Yermolovich.Linfo_string0:
161014cd37fSAlexander Yermolovich	.asciz	"clang version 15.0.0" # string offset=0
162014cd37fSAlexander Yermolovich.Linfo_string1:
163014cd37fSAlexander Yermolovich	.asciz	"main.cpp"                      # string offset=134
164014cd37fSAlexander Yermolovich.Linfo_string2:
165014cd37fSAlexander Yermolovich	.asciz	"." # string offset=143
166014cd37fSAlexander Yermolovich.Linfo_string3:
167014cd37fSAlexander Yermolovich	.asciz	"main"                          # string offset=180
168014cd37fSAlexander Yermolovich.Linfo_string4:
169014cd37fSAlexander Yermolovich	.asciz	"int"                           # string offset=185
170014cd37fSAlexander Yermolovich	.section	.debug_str_offsets,"",@progbits
171014cd37fSAlexander Yermolovich	.long	.Linfo_string0
172014cd37fSAlexander Yermolovich	.long	.Linfo_string1
173014cd37fSAlexander Yermolovich	.long	.Linfo_string2
174014cd37fSAlexander Yermolovich	.long	.Linfo_string3
175014cd37fSAlexander Yermolovich	.long	.Linfo_string4
176014cd37fSAlexander Yermolovich	.section	.debug_addr,"",@progbits
177014cd37fSAlexander Yermolovich	.long	.Ldebug_addr_end0-.Ldebug_addr_start0 # Length of contribution
178014cd37fSAlexander Yermolovich.Ldebug_addr_start0:
179014cd37fSAlexander Yermolovich	.short	5                               # DWARF version number
180014cd37fSAlexander Yermolovich	.byte	8                               # Address size
181014cd37fSAlexander Yermolovich	.byte	0                               # Segment selector size
182014cd37fSAlexander Yermolovich.Laddr_table_base0:
183014cd37fSAlexander Yermolovich	.quad	.Lfunc_begin0
184014cd37fSAlexander Yermolovich.Ldebug_addr_end0:
185014cd37fSAlexander Yermolovich	.ident	"clang version 15.0.0"
186014cd37fSAlexander Yermolovich	.section	".note.GNU-stack","",@progbits
187014cd37fSAlexander Yermolovich	.addrsig
188014cd37fSAlexander Yermolovich	.section	.debug_line,"",@progbits
189014cd37fSAlexander Yermolovich.Lline_table_start0:
190