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