1## Check that the --debug-vars option works for simple register locations, when
2## using DWARF5 debug info, with multiple functions in one section.
3
4## Generated with this compile command, with the source code in Inputs/debug.c:
5## clang --target=arm--none-eabi -march=armv7-a -c debug.c -O1 -gdwarf-3 -S -o -
6
7# RUN: llvm-mc -triple armv8a--none-eabi < %s -filetype=obj --dwarf-version=5 | \
8# RUN:     llvm-objdump - -d --debug-vars --no-show-raw-insn | \
9# RUN:     FileCheck %s
10
11# CHECK: Disassembly of section .text:
12# CHECK-EMPTY:
13# CHECK-NEXT: 00000000 <foo>:
14# CHECK-NEXT:                                                                   ┠─ a = R0
15# CHECK-NEXT:                                                                   ┃ ┠─ b = R1
16# CHECK-NEXT:                                                                   ┃ ┃ ┠─ c = R2
17# CHECK-NEXT:                                                                   ┃ ┃ ┃ ┌─ x = R0
18# CHECK-NEXT:        0:       add     r0, r1, r0                                ┻ ┃ ┃ ╈
19# CHECK-NEXT:                                                                   ┌─ y = R0
20# CHECK-NEXT:        4:       add     r0, r0, r2                                ╈ ┃ ┃ ┻
21# CHECK-NEXT:        8:       bx      lr                                        ┻ ┻ ┻
22# CHECK-EMPTY:
23# CHECK-NEXT: 0000000c <bar>:
24# CHECK-NEXT:                                                                   ┠─ a = R0
25# CHECK-NEXT:        c:       add     r0, r0, #126# CHECK-NEXT:       10:       bx      lr27
28	.text
29	.syntax unified
30	.eabi_attribute	67, "2.09"
31	.eabi_attribute	6, 10
32	.eabi_attribute	7, 65
33	.eabi_attribute	8, 1
34	.eabi_attribute	9, 2
35	.fpu	neon
36	.eabi_attribute	34, 0
37	.eabi_attribute	17, 1
38	.eabi_attribute	20, 1
39	.eabi_attribute	21, 1
40	.eabi_attribute	23, 3
41	.eabi_attribute	24, 1
42	.eabi_attribute	25, 1
43	.eabi_attribute	38, 1
44	.eabi_attribute	18, 4
45	.eabi_attribute	26, 2
46	.eabi_attribute	14, 0
47	.file	"debug.c"
48	.globl	foo
49	.p2align	2
50	.type	foo,%function
51	.code	32
52foo:
53.Lfunc_begin0:
54	.file	0 "/work/scratch" "/work/llvm/src/llvm/test/tools/llvm-objdump/ARM/Inputs/debug.c" md5 0x07374f01ab24ec7c07db73bc13bd778e
55	.file	1 "/work" "llvm/src/llvm/test/tools/llvm-objdump/ARM/Inputs/debug.c" md5 0x07374f01ab24ec7c07db73bc13bd778e
56	.loc	1 1 0
57	.fnstart
58	.cfi_sections .debug_frame
59	.cfi_startproc
60	.loc	1 2 13 prologue_end
61	add	r0, r1, r0
62.Ltmp0:
63	.loc	1 3 13
64	add	r0, r0, r2
65.Ltmp1:
66	.loc	1 4 3
67	bx	lr
68.Ltmp2:
69.Lfunc_end0:
70	.size	foo, .Lfunc_end0-foo
71	.cfi_endproc
72	.cantunwind
73	.fnend
74
75	.globl	bar
76	.p2align	2
77	.type	bar,%function
78	.code	32
79bar:
80.Lfunc_begin1:
81	.loc	1 7 0
82	.fnstart
83	.cfi_startproc
84	.loc	1 8 4 prologue_end
85	add	r0, r0, #1
86.Ltmp3:
87	.loc	1 9 3
88	bx	lr
89.Ltmp4:
90.Lfunc_end1:
91	.size	bar, .Lfunc_end1-bar
92	.cfi_endproc
93	.cantunwind
94	.fnend
95
96	.section	.debug_str_offsets,"",%progbits
97	.long	48
98	.short	5
99	.short	0
100.Lstr_offsets_base0:
101	.section	.debug_str,"MS",%progbits,1
102.Linfo_string0:
103	.asciz	"clang version 10.0.0 (git@github.com:llvm/llvm-project.git e73f78acd34360f7450b81167d9dc858ccddc262)"
104.Linfo_string1:
105	.asciz	"/work/llvm/src/llvm/test/tools/llvm-objdump/ARM/Inputs/debug.c"
106.Linfo_string2:
107	.asciz	"/work/scratch"
108.Linfo_string3:
109	.asciz	"foo"
110.Linfo_string4:
111	.asciz	"int"
112.Linfo_string5:
113	.asciz	"bar"
114.Linfo_string6:
115	.asciz	"a"
116.Linfo_string7:
117	.asciz	"b"
118.Linfo_string8:
119	.asciz	"c"
120.Linfo_string9:
121	.asciz	"x"
122.Linfo_string10:
123	.asciz	"y"
124	.section	.debug_str_offsets,"",%progbits
125	.long	.Linfo_string0
126	.long	.Linfo_string1
127	.long	.Linfo_string2
128	.long	.Linfo_string3
129	.long	.Linfo_string4
130	.long	.Linfo_string5
131	.long	.Linfo_string6
132	.long	.Linfo_string7
133	.long	.Linfo_string8
134	.long	.Linfo_string9
135	.long	.Linfo_string10
136	.section	.debug_loclists,"",%progbits
137	.long	.Ldebug_loclist_table_end0-.Ldebug_loclist_table_start0
138.Ldebug_loclist_table_start0:
139	.short	5
140	.byte	4
141	.byte	0
142	.long	3
143.Lloclists_table_base0:
144	.long	.Ldebug_loc0-.Lloclists_table_base0
145	.long	.Ldebug_loc1-.Lloclists_table_base0
146	.long	.Ldebug_loc2-.Lloclists_table_base0
147.Ldebug_loc0:
148	.byte	4
149	.uleb128 .Lfunc_begin0-.Lfunc_begin0
150	.uleb128 .Ltmp0-.Lfunc_begin0
151	.byte	1
152	.byte	80
153	.byte	0
154.Ldebug_loc1:
155	.byte	4
156	.uleb128 .Ltmp0-.Lfunc_begin0
157	.uleb128 .Ltmp1-.Lfunc_begin0
158	.byte	1
159	.byte	80
160	.byte	0
161.Ldebug_loc2:
162	.byte	4
163	.uleb128 .Ltmp1-.Lfunc_begin0
164	.uleb128 .Lfunc_end0-.Lfunc_begin0
165	.byte	1
166	.byte	80
167	.byte	0
168.Ldebug_loclist_table_end0:
169	.section	.debug_abbrev,"",%progbits
170	.byte	1
171	.byte	17
172	.byte	1
173	.byte	37
174	.byte	37
175	.byte	19
176	.byte	5
177	.byte	3
178	.byte	37
179	.byte	114
180	.byte	23
181	.byte	16
182	.byte	23
183	.byte	27
184	.byte	37
185	.byte	17
186	.byte	27
187	.byte	18
188	.byte	6
189	.byte	115
190	.byte	23
191	.ascii	"\214\001"
192	.byte	23
193	.byte	0
194	.byte	0
195	.byte	2
196	.byte	46
197	.byte	1
198	.byte	17
199	.byte	27
200	.byte	18
201	.byte	6
202	.byte	64
203	.byte	24
204	.byte	122
205	.byte	25
206	.byte	3
207	.byte	37
208	.byte	58
209	.byte	11
210	.byte	59
211	.byte	11
212	.byte	39
213	.byte	25
214	.byte	73
215	.byte	19
216	.byte	63
217	.byte	25
218	.byte	0
219	.byte	0
220	.byte	3
221	.byte	5
222	.byte	0
223	.byte	2
224	.byte	34
225	.byte	3
226	.byte	37
227	.byte	58
228	.byte	11
229	.byte	59
230	.byte	11
231	.byte	73
232	.byte	19
233	.byte	0
234	.byte	0
235	.byte	4
236	.byte	5
237	.byte	0
238	.byte	2
239	.byte	24
240	.byte	3
241	.byte	37
242	.byte	58
243	.byte	11
244	.byte	59
245	.byte	11
246	.byte	73
247	.byte	19
248	.byte	0
249	.byte	0
250	.byte	5
251	.byte	52
252	.byte	0
253	.byte	2
254	.byte	34
255	.byte	3
256	.byte	37
257	.byte	58
258	.byte	11
259	.byte	59
260	.byte	11
261	.byte	73
262	.byte	19
263	.byte	0
264	.byte	0
265	.byte	6
266	.byte	36
267	.byte	0
268	.byte	3
269	.byte	37
270	.byte	62
271	.byte	11
272	.byte	11
273	.byte	11
274	.byte	0
275	.byte	0
276	.byte	0
277	.section	.debug_info,"",%progbits
278.Lcu_begin0:
279	.long	.Ldebug_info_end0-.Ldebug_info_start0
280.Ldebug_info_start0:
281	.short	5
282	.byte	1
283	.byte	4
284	.long	.debug_abbrev
285	.byte	1
286	.byte	0
287	.short	12
288	.byte	1
289	.long	.Lstr_offsets_base0
290	.long	.Lline_table_start0
291	.byte	2
292	.byte	0
293	.long	.Lfunc_end1-.Lfunc_begin0
294	.long	.Laddr_table_base0
295	.long	.Lloclists_table_base0
296	.byte	2
297	.byte	0
298	.long	.Lfunc_end0-.Lfunc_begin0
299	.byte	1
300	.byte	91
301
302	.byte	3
303	.byte	1
304	.byte	1
305
306	.long	128
307
308	.byte	3
309	.byte	0
310	.byte	6
311	.byte	1
312	.byte	1
313	.long	128
314	.byte	4
315	.byte	1
316	.byte	81
317	.byte	7
318	.byte	1
319	.byte	1
320	.long	128
321	.byte	4
322	.byte	1
323	.byte	82
324	.byte	8
325	.byte	1
326	.byte	1
327	.long	128
328	.byte	5
329	.byte	1
330	.byte	9
331	.byte	1
332	.byte	2
333	.long	128
334	.byte	5
335	.byte	2
336	.byte	10
337	.byte	1
338	.byte	3
339	.long	128
340	.byte	0
341	.byte	2
342	.byte	1
343	.long	.Lfunc_end1-.Lfunc_begin1
344	.byte	1
345	.byte	91
346
347	.byte	5
348	.byte	1
349	.byte	7
350
351	.long	128
352
353	.byte	4
354	.byte	1
355	.byte	80
356	.byte	6
357	.byte	1
358	.byte	7
359	.long	128
360	.byte	0
361	.byte	6
362	.byte	4
363	.byte	5
364	.byte	4
365	.byte	0
366.Ldebug_info_end0:
367	.section	.debug_addr,"",%progbits
368	.long	.Ldebug_addr_end0-.Ldebug_addr_start0
369.Ldebug_addr_start0:
370	.short	5
371	.byte	4
372	.byte	0
373.Laddr_table_base0:
374	.long	.Lfunc_begin0
375	.long	.Lfunc_begin1
376.Ldebug_addr_end0:
377	.ident	"clang version 10.0.0 (git@github.com:llvm/llvm-project.git e73f78acd34360f7450b81167d9dc858ccddc262)"
378	.section	".note.GNU-stack","",%progbits
379	.addrsig
380	.eabi_attribute	30, 1
381	.section	.debug_line,"",%progbits
382.Lline_table_start0:
383