xref: /llvm-project/llvm/test/tools/llvm-dwarfdump/X86/debugloc.s (revision 0908093977b2b80d00baa12f0b2f1424dde096fb)
1622c563bSJonas Devlieghere# RUN: llvm-mc %s -filetype obj -triple x86_64-linux-elf -o - \
2622c563bSJonas Devlieghere# RUN: | llvm-dwarfdump --debug-loc - \
3622c563bSJonas Devlieghere# RUN: | FileCheck %s
4622c563bSJonas Devlieghere
57d4a974dSJonas Devlieghere# RUN: llvm-mc %s -filetype obj -triple x86_64-linux-elf -o - \
67d4a974dSJonas Devlieghere# RUN: | llvm-dwarfdump --verify - \
77d4a974dSJonas Devlieghere# RUN: | FileCheck %s --check-prefix VERIFY
87d4a974dSJonas Devlieghere
9622c563bSJonas Devlieghere# CHECK: .debug_loc contents:
10622c563bSJonas Devlieghere
11622c563bSJonas Devlieghere# CHECK: 0x00000000:
12*09080939SPavel Labath# CHECK-NEXT: (0x0000000000000000, 0x0000000000000003): DW_OP_reg5 RDI
13*09080939SPavel Labath# CHECK-NEXT: (0x0000000000000003, 0x0000000000000004): DW_OP_reg0 RAX
14622c563bSJonas Devlieghere
15622c563bSJonas Devlieghere# CHECK: 0x00000036:
16*09080939SPavel Labath# CHECK-NEXT: (0x0000000000000010, 0x0000000000000013): DW_OP_reg5 RDI
17*09080939SPavel Labath# CHECK-NEXT: (0x0000000000000013, 0x0000000000000014): DW_OP_reg0 RAX
18622c563bSJonas Devlieghere
197d4a974dSJonas Devlieghere# VERIFY: Verifying .debug_info Unit Header Chain
207d4a974dSJonas Devlieghere# VERIFY-NOT: DIE has invalid DW_AT_location encoding
217d4a974dSJonas Devlieghere
22622c563bSJonas Devlieghere# Source:
23622c563bSJonas Devlieghere#   int* foo(int* i) { return i; }
24622c563bSJonas Devlieghere#   int* bar(int* i) { return i; }
25622c563bSJonas Devlieghere# Compile with:
26622c563bSJonas Devlieghere#   clang -g -O3 test.c -S -o debugloc.s
27622c563bSJonas Devlieghere
28622c563bSJonas Devlieghere	.text
29622c563bSJonas Devlieghere	.file	"test.c"
30622c563bSJonas Devlieghere	.globl	foo
31622c563bSJonas Devlieghere	.align	16, 0x90
32622c563bSJonas Devlieghere	.type	foo,@function
33622c563bSJonas Devliegherefoo:                                    # @foo
34622c563bSJonas Devlieghere.Lfunc_begin0:
35622c563bSJonas Devlieghere	.file	1 "test.c"
36622c563bSJonas Devlieghere	.loc	1 1 0                   # test.c:1:0
37622c563bSJonas Devlieghere	.cfi_startproc
3825528d6dSFrancis Visoiu Mistrih# %bb.0:
39622c563bSJonas Devlieghere	#DEBUG_VALUE: foo:i <- %RDI
40622c563bSJonas Devlieghere	.loc	1 2 3 prologue_end      # test.c:2:3
41622c563bSJonas Devlieghere	movq	%rdi, %rax
42622c563bSJonas Devlieghere.Ltmp0:
43622c563bSJonas Devlieghere	#DEBUG_VALUE: foo:i <- %RAX
44622c563bSJonas Devlieghere	retq
45622c563bSJonas Devlieghere.Ltmp1:
46622c563bSJonas Devlieghere.Lfunc_end0:
47622c563bSJonas Devlieghere	.size	foo, .Lfunc_end0-foo
48622c563bSJonas Devlieghere	.cfi_endproc
49622c563bSJonas Devlieghere
50622c563bSJonas Devlieghere	.globl	bar
51622c563bSJonas Devlieghere	.align	16, 0x90
52622c563bSJonas Devlieghere	.type	bar,@function
53622c563bSJonas Devliegherebar:                                    # @bar
54622c563bSJonas Devlieghere.Lfunc_begin1:
55622c563bSJonas Devlieghere	.loc	1 5 0                   # test.c:5:0
56622c563bSJonas Devlieghere	.cfi_startproc
5725528d6dSFrancis Visoiu Mistrih# %bb.0:
58622c563bSJonas Devlieghere	#DEBUG_VALUE: bar:i <- %RDI
59622c563bSJonas Devlieghere	.loc	1 6 3 prologue_end      # test.c:6:3
60622c563bSJonas Devlieghere	movq	%rdi, %rax
61622c563bSJonas Devlieghere.Ltmp2:
62622c563bSJonas Devlieghere	#DEBUG_VALUE: bar:i <- %RAX
63622c563bSJonas Devlieghere	retq
64622c563bSJonas Devlieghere.Ltmp3:
65622c563bSJonas Devlieghere.Lfunc_end1:
66622c563bSJonas Devlieghere	.size	bar, .Lfunc_end1-bar
67622c563bSJonas Devlieghere	.cfi_endproc
68622c563bSJonas Devlieghere
69622c563bSJonas Devlieghere	.section	.debug_str,"MS",@progbits,1
70622c563bSJonas Devlieghere.Linfo_string0:
71622c563bSJonas Devlieghere	.asciz	"clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)" # string offset=0
72622c563bSJonas Devlieghere.Linfo_string1:
73622c563bSJonas Devlieghere	.asciz	"test.c"                # string offset=54
74622c563bSJonas Devlieghere.Linfo_string2:
75622c563bSJonas Devlieghere	.asciz	"/tmp"                  # string offset=61
76622c563bSJonas Devlieghere.Linfo_string3:
77622c563bSJonas Devlieghere	.asciz	"foo"                   # string offset=66
78622c563bSJonas Devlieghere.Linfo_string4:
79622c563bSJonas Devlieghere	.asciz	"int"                   # string offset=70
80622c563bSJonas Devlieghere.Linfo_string5:
81622c563bSJonas Devlieghere	.asciz	"bar"                   # string offset=74
82622c563bSJonas Devlieghere.Linfo_string6:
83622c563bSJonas Devlieghere	.asciz	"i"                     # string offset=78
84622c563bSJonas Devlieghere	.section	.debug_loc,"",@progbits
85622c563bSJonas Devlieghere.Ldebug_loc0:
86622c563bSJonas Devlieghere	.quad	.Lfunc_begin0-.Lfunc_begin0
87622c563bSJonas Devlieghere	.quad	.Ltmp0-.Lfunc_begin0
88622c563bSJonas Devlieghere	.short	1                       # Loc expr size
89622c563bSJonas Devlieghere	.byte	85                      # DW_OP_reg5
90622c563bSJonas Devlieghere	.quad	.Ltmp0-.Lfunc_begin0
91622c563bSJonas Devlieghere	.quad	.Lfunc_end0-.Lfunc_begin0
92622c563bSJonas Devlieghere	.short	1                       # Loc expr size
93622c563bSJonas Devlieghere	.byte	80                      # DW_OP_reg0
94622c563bSJonas Devlieghere	.quad	0
95622c563bSJonas Devlieghere	.quad	0
96622c563bSJonas Devlieghere.Ldebug_loc1:
97622c563bSJonas Devlieghere	.quad	.Lfunc_begin1-.Lfunc_begin0
98622c563bSJonas Devlieghere	.quad	.Ltmp2-.Lfunc_begin0
99622c563bSJonas Devlieghere	.short	1                       # Loc expr size
100622c563bSJonas Devlieghere	.byte	85                      # DW_OP_reg5
101622c563bSJonas Devlieghere	.quad	.Ltmp2-.Lfunc_begin0
102622c563bSJonas Devlieghere	.quad	.Lfunc_end1-.Lfunc_begin0
103622c563bSJonas Devlieghere	.short	1                       # Loc expr size
104622c563bSJonas Devlieghere	.byte	80                      # DW_OP_reg0
105622c563bSJonas Devlieghere	.quad	0
106622c563bSJonas Devlieghere	.quad	0
107622c563bSJonas Devlieghere	.section	.debug_abbrev,"",@progbits
108622c563bSJonas Devlieghere.Lsection_abbrev:
109622c563bSJonas Devlieghere	.byte	1                       # Abbreviation Code
110622c563bSJonas Devlieghere	.byte	17                      # DW_TAG_compile_unit
111622c563bSJonas Devlieghere	.byte	1                       # DW_CHILDREN_yes
112622c563bSJonas Devlieghere	.byte	37                      # DW_AT_producer
113622c563bSJonas Devlieghere	.byte	14                      # DW_FORM_strp
114622c563bSJonas Devlieghere	.byte	19                      # DW_AT_language
115622c563bSJonas Devlieghere	.byte	5                       # DW_FORM_data2
116622c563bSJonas Devlieghere	.byte	3                       # DW_AT_name
117622c563bSJonas Devlieghere	.byte	14                      # DW_FORM_strp
118622c563bSJonas Devlieghere	.byte	16                      # DW_AT_stmt_list
119622c563bSJonas Devlieghere	.byte	23                      # DW_FORM_sec_offset
120622c563bSJonas Devlieghere	.byte	27                      # DW_AT_comp_dir
121622c563bSJonas Devlieghere	.byte	14                      # DW_FORM_strp
122622c563bSJonas Devlieghere	.ascii	"\341\177"              # DW_AT_APPLE_optimized
123622c563bSJonas Devlieghere	.byte	25                      # DW_FORM_flag_present
124622c563bSJonas Devlieghere	.byte	17                      # DW_AT_low_pc
125622c563bSJonas Devlieghere	.byte	1                       # DW_FORM_addr
126622c563bSJonas Devlieghere	.byte	18                      # DW_AT_high_pc
127622c563bSJonas Devlieghere	.byte	6                       # DW_FORM_data4
128622c563bSJonas Devlieghere	.byte	0                       # EOM(1)
129622c563bSJonas Devlieghere	.byte	0                       # EOM(2)
130622c563bSJonas Devlieghere	.byte	2                       # Abbreviation Code
131622c563bSJonas Devlieghere	.byte	46                      # DW_TAG_subprogram
132622c563bSJonas Devlieghere	.byte	1                       # DW_CHILDREN_yes
133622c563bSJonas Devlieghere	.byte	17                      # DW_AT_low_pc
134622c563bSJonas Devlieghere	.byte	1                       # DW_FORM_addr
135622c563bSJonas Devlieghere	.byte	18                      # DW_AT_high_pc
136622c563bSJonas Devlieghere	.byte	6                       # DW_FORM_data4
137622c563bSJonas Devlieghere	.ascii	"\347\177"              # DW_AT_APPLE_omit_frame_ptr
138622c563bSJonas Devlieghere	.byte	25                      # DW_FORM_flag_present
139622c563bSJonas Devlieghere	.byte	64                      # DW_AT_frame_base
140622c563bSJonas Devlieghere	.byte	24                      # DW_FORM_exprloc
141622c563bSJonas Devlieghere	.byte	3                       # DW_AT_name
142622c563bSJonas Devlieghere	.byte	14                      # DW_FORM_strp
143622c563bSJonas Devlieghere	.byte	58                      # DW_AT_decl_file
144622c563bSJonas Devlieghere	.byte	11                      # DW_FORM_data1
145622c563bSJonas Devlieghere	.byte	59                      # DW_AT_decl_line
146622c563bSJonas Devlieghere	.byte	11                      # DW_FORM_data1
147622c563bSJonas Devlieghere	.byte	39                      # DW_AT_prototyped
148622c563bSJonas Devlieghere	.byte	25                      # DW_FORM_flag_present
149622c563bSJonas Devlieghere	.byte	73                      # DW_AT_type
150622c563bSJonas Devlieghere	.byte	19                      # DW_FORM_ref4
151622c563bSJonas Devlieghere	.byte	63                      # DW_AT_external
152622c563bSJonas Devlieghere	.byte	25                      # DW_FORM_flag_present
153622c563bSJonas Devlieghere	.ascii	"\341\177"              # DW_AT_APPLE_optimized
154622c563bSJonas Devlieghere	.byte	25                      # DW_FORM_flag_present
155622c563bSJonas Devlieghere	.byte	0                       # EOM(1)
156622c563bSJonas Devlieghere	.byte	0                       # EOM(2)
157622c563bSJonas Devlieghere	.byte	3                       # Abbreviation Code
158622c563bSJonas Devlieghere	.byte	5                       # DW_TAG_formal_parameter
159622c563bSJonas Devlieghere	.byte	0                       # DW_CHILDREN_no
160622c563bSJonas Devlieghere	.byte	2                       # DW_AT_location
161622c563bSJonas Devlieghere	.byte	23                      # DW_FORM_sec_offset
162622c563bSJonas Devlieghere	.byte	3                       # DW_AT_name
163622c563bSJonas Devlieghere	.byte	14                      # DW_FORM_strp
164622c563bSJonas Devlieghere	.byte	58                      # DW_AT_decl_file
165622c563bSJonas Devlieghere	.byte	11                      # DW_FORM_data1
166622c563bSJonas Devlieghere	.byte	59                      # DW_AT_decl_line
167622c563bSJonas Devlieghere	.byte	11                      # DW_FORM_data1
168622c563bSJonas Devlieghere	.byte	73                      # DW_AT_type
169622c563bSJonas Devlieghere	.byte	19                      # DW_FORM_ref4
170622c563bSJonas Devlieghere	.byte	0                       # EOM(1)
171622c563bSJonas Devlieghere	.byte	0                       # EOM(2)
172622c563bSJonas Devlieghere	.byte	4                       # Abbreviation Code
173622c563bSJonas Devlieghere	.byte	15                      # DW_TAG_pointer_type
174622c563bSJonas Devlieghere	.byte	0                       # DW_CHILDREN_no
175622c563bSJonas Devlieghere	.byte	73                      # DW_AT_type
176622c563bSJonas Devlieghere	.byte	19                      # DW_FORM_ref4
177622c563bSJonas Devlieghere	.byte	0                       # EOM(1)
178622c563bSJonas Devlieghere	.byte	0                       # EOM(2)
179622c563bSJonas Devlieghere	.byte	5                       # Abbreviation Code
180622c563bSJonas Devlieghere	.byte	36                      # DW_TAG_base_type
181622c563bSJonas Devlieghere	.byte	0                       # DW_CHILDREN_no
182622c563bSJonas Devlieghere	.byte	3                       # DW_AT_name
183622c563bSJonas Devlieghere	.byte	14                      # DW_FORM_strp
184622c563bSJonas Devlieghere	.byte	62                      # DW_AT_encoding
185622c563bSJonas Devlieghere	.byte	11                      # DW_FORM_data1
186622c563bSJonas Devlieghere	.byte	11                      # DW_AT_byte_size
187622c563bSJonas Devlieghere	.byte	11                      # DW_FORM_data1
188622c563bSJonas Devlieghere	.byte	0                       # EOM(1)
189622c563bSJonas Devlieghere	.byte	0                       # EOM(2)
190622c563bSJonas Devlieghere	.byte	0                       # EOM(3)
191622c563bSJonas Devlieghere	.section	.debug_info,"",@progbits
192622c563bSJonas Devlieghere.Lsection_info:
193622c563bSJonas Devlieghere.Lcu_begin0:
194622c563bSJonas Devlieghere	.long	133                     # Length of Unit
195622c563bSJonas Devlieghere	.short	4                       # DWARF version number
196622c563bSJonas Devlieghere	.long	.Lsection_abbrev        # Offset Into Abbrev. Section
197622c563bSJonas Devlieghere	.byte	8                       # Address Size (in bytes)
198622c563bSJonas Devlieghere	.byte	1                       # Abbrev [1] 0xb:0x7e DW_TAG_compile_unit
199622c563bSJonas Devlieghere	.long	.Linfo_string0          # DW_AT_producer
200622c563bSJonas Devlieghere	.short	12                      # DW_AT_language
201622c563bSJonas Devlieghere	.long	.Linfo_string1          # DW_AT_name
202622c563bSJonas Devlieghere	.long	.Lline_table_start0     # DW_AT_stmt_list
203622c563bSJonas Devlieghere	.long	.Linfo_string2          # DW_AT_comp_dir
204622c563bSJonas Devlieghere                                        # DW_AT_APPLE_optimized
205622c563bSJonas Devlieghere	.quad	.Lfunc_begin0           # DW_AT_low_pc
206622c563bSJonas Devlieghere	.long	.Lfunc_end1-.Lfunc_begin0 # DW_AT_high_pc
207622c563bSJonas Devlieghere	.byte	2                       # Abbrev [2] 0x2a:0x29 DW_TAG_subprogram
208622c563bSJonas Devlieghere	.quad	.Lfunc_begin0           # DW_AT_low_pc
209622c563bSJonas Devlieghere	.long	.Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc
210622c563bSJonas Devlieghere                                        # DW_AT_APPLE_omit_frame_ptr
211622c563bSJonas Devlieghere	.byte	1                       # DW_AT_frame_base
212622c563bSJonas Devlieghere	.byte	87
213622c563bSJonas Devlieghere	.long	.Linfo_string3          # DW_AT_name
214622c563bSJonas Devlieghere	.byte	1                       # DW_AT_decl_file
215622c563bSJonas Devlieghere	.byte	1                       # DW_AT_decl_line
216622c563bSJonas Devlieghere                                        # DW_AT_prototyped
217622c563bSJonas Devlieghere	.long	124                     # DW_AT_type
218622c563bSJonas Devlieghere                                        # DW_AT_external
219622c563bSJonas Devlieghere                                        # DW_AT_APPLE_optimized
220622c563bSJonas Devlieghere	.byte	3                       # Abbrev [3] 0x43:0xf DW_TAG_formal_parameter
221622c563bSJonas Devlieghere	.long	.Ldebug_loc0            # DW_AT_location
222622c563bSJonas Devlieghere	.long	.Linfo_string6          # DW_AT_name
223622c563bSJonas Devlieghere	.byte	1                       # DW_AT_decl_file
224622c563bSJonas Devlieghere	.byte	1                       # DW_AT_decl_line
225622c563bSJonas Devlieghere	.long	124                     # DW_AT_type
226622c563bSJonas Devlieghere	.byte	0                       # End Of Children Mark
227622c563bSJonas Devlieghere	.byte	2                       # Abbrev [2] 0x53:0x29 DW_TAG_subprogram
228622c563bSJonas Devlieghere	.quad	.Lfunc_begin1           # DW_AT_low_pc
229622c563bSJonas Devlieghere	.long	.Lfunc_end1-.Lfunc_begin1 # DW_AT_high_pc
230622c563bSJonas Devlieghere                                        # DW_AT_APPLE_omit_frame_ptr
231622c563bSJonas Devlieghere	.byte	1                       # DW_AT_frame_base
232622c563bSJonas Devlieghere	.byte	87
233622c563bSJonas Devlieghere	.long	.Linfo_string5          # DW_AT_name
234622c563bSJonas Devlieghere	.byte	1                       # DW_AT_decl_file
235622c563bSJonas Devlieghere	.byte	5                       # DW_AT_decl_line
236622c563bSJonas Devlieghere                                        # DW_AT_prototyped
237622c563bSJonas Devlieghere	.long	124                     # DW_AT_type
238622c563bSJonas Devlieghere                                        # DW_AT_external
239622c563bSJonas Devlieghere                                        # DW_AT_APPLE_optimized
240622c563bSJonas Devlieghere	.byte	3                       # Abbrev [3] 0x6c:0xf DW_TAG_formal_parameter
241622c563bSJonas Devlieghere	.long	.Ldebug_loc1            # DW_AT_location
242622c563bSJonas Devlieghere	.long	.Linfo_string6          # DW_AT_name
243622c563bSJonas Devlieghere	.byte	1                       # DW_AT_decl_file
244622c563bSJonas Devlieghere	.byte	5                       # DW_AT_decl_line
245622c563bSJonas Devlieghere	.long	124                     # DW_AT_type
246622c563bSJonas Devlieghere	.byte	0                       # End Of Children Mark
247622c563bSJonas Devlieghere	.byte	4                       # Abbrev [4] 0x7c:0x5 DW_TAG_pointer_type
248622c563bSJonas Devlieghere	.long	129                     # DW_AT_type
249622c563bSJonas Devlieghere	.byte	5                       # Abbrev [5] 0x81:0x7 DW_TAG_base_type
250622c563bSJonas Devlieghere	.long	.Linfo_string4          # DW_AT_name
251622c563bSJonas Devlieghere	.byte	5                       # DW_AT_encoding
252622c563bSJonas Devlieghere	.byte	4                       # DW_AT_byte_size
253622c563bSJonas Devlieghere	.byte	0                       # End Of Children Mark
254622c563bSJonas Devlieghere	.section	.debug_ranges,"",@progbits
255622c563bSJonas Devlieghere.Ldebug_range:
256622c563bSJonas Devlieghere	.section	.debug_macinfo,"",@progbits
257622c563bSJonas Devlieghere	.byte	0                       # End Of Macro List Mark
258622c563bSJonas Devlieghere	.section	.debug_pubnames,"",@progbits
259622c563bSJonas Devlieghere	.long	.LpubNames_end0-.LpubNames_begin0 # Length of Public Names Info
260622c563bSJonas Devlieghere.LpubNames_begin0:
261622c563bSJonas Devlieghere	.short	2                       # DWARF Version
262622c563bSJonas Devlieghere	.long	.Lcu_begin0             # Offset of Compilation Unit Info
263622c563bSJonas Devlieghere	.long	137                     # Compilation Unit Length
264622c563bSJonas Devlieghere	.long	42                      # DIE offset
265622c563bSJonas Devlieghere	.asciz	"foo"                   # External Name
266622c563bSJonas Devlieghere	.long	83                      # DIE offset
267622c563bSJonas Devlieghere	.asciz	"bar"                   # External Name
268622c563bSJonas Devlieghere	.long	0                       # End Mark
269622c563bSJonas Devlieghere.LpubNames_end0:
270622c563bSJonas Devlieghere	.section	.debug_pubtypes,"",@progbits
271622c563bSJonas Devlieghere	.long	.LpubTypes_end0-.LpubTypes_begin0 # Length of Public Types Info
272622c563bSJonas Devlieghere.LpubTypes_begin0:
273622c563bSJonas Devlieghere	.short	2                       # DWARF Version
274622c563bSJonas Devlieghere	.long	.Lcu_begin0             # Offset of Compilation Unit Info
275622c563bSJonas Devlieghere	.long	137                     # Compilation Unit Length
276622c563bSJonas Devlieghere	.long	129                     # DIE offset
277622c563bSJonas Devlieghere	.asciz	"int"                   # External Name
278622c563bSJonas Devlieghere	.long	0                       # End Mark
279622c563bSJonas Devlieghere.LpubTypes_end0:
280622c563bSJonas Devlieghere
281622c563bSJonas Devlieghere	.ident	"clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)"
282622c563bSJonas Devlieghere	.section	".note.GNU-stack","",@progbits
283622c563bSJonas Devlieghere	.section	.debug_line,"",@progbits
284622c563bSJonas Devlieghere.Lline_table_start0:
285