1/*
2   Copyright 2009-2020 Free Software Foundation, Inc.
3
4   This program is free software; you can redistribute it and/or modify
5   it under the terms of the GNU General Public License as published by
6   the Free Software Foundation; either version 3 of the License, or
7   (at your option) any later version.
8
9   This program is distributed in the hope that it will be useful,
10   but WITHOUT ANY WARRANTY; without even the implied warranty of
11   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12   GNU General Public License for more details.
13
14   You should have received a copy of the GNU General Public License
15   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17/* This was compiled from a trivial program just to test the
18   DW_OP_stack_value and DW_OP_implicit_value operators:
19
20    unsigned int func (unsigned int arg) __attribute__ ((__noinline__));
21
22    unsigned int func (unsigned int arg)
23    {
24      unsigned int uses_stack_op = 23;
25      unsigned int uses_lit_op = 0x7fffffff;
26      unsigned int result = arg;
27
28      if (arg % 2)
29	result += uses_lit_op + uses_stack_op;
30      else
31	{
32	  ++uses_stack_op;
33	  ++uses_lit_op;
34
35	  result -= uses_stack_op + uses_lit_op;
36	}
37
38      return result * uses_stack_op;  // line 19, see the .exp file
39    }
40
41    int main (int argc, char *argv[])
42    {
43      return func (1024);
44    }
45
46  Then it was compiled with:
47
48	gcc -fvar-tracking{,-assignments} -gdwarf-3
49	-fno-inline{,-functions,-small-functions,-functions-called-once}
50	-O2
51
52*/
53
54	.file	"valop.c"
55	.section	.debug_abbrev,"",@progbits
56.Ldebug_abbrev0:
57	.section	.debug_info,"",@progbits
58.Ldebug_info0:
59	.section	.debug_line,"",@progbits
60.Ldebug_line0:
61	.text
62.Ltext0:
63	.p2align 4,,15
64.globl func
65	.type	func, @function
66func:
67.LFB0:
68	.file 1 "valop.c"
69	.loc 1 4 0
70	.cfi_startproc
71.LVL0:
72	pushl	%ebp
73	.cfi_def_cfa_offset 8
74	movl	%esp, %ebp
75	.cfi_offset 5, -8
76	.cfi_def_cfa_register 5
77	.loc 1 4 0
78	movl	8(%ebp), %eax
79.LVL1:
80	.loc 1 9 0
81	testb	$1, %al
82	jne	.L5
83.LVL2:
84	.loc 1 16 0
85	addl	$2147483624, %eax
86.LVL3:
87	.loc 1 13 0
88	movl	$24, %edx
89.LVL4:
90	.loc 1 16 0
91	imull	%edx, %eax
92.LVL5:
93	.loc 1 20 0
94	popl	%ebp
95	.cfi_remember_state
96	.cfi_restore 5
97	.cfi_def_cfa 4, 4
98	ret
99.LVL6:
100	.p2align 4,,7
101	.p2align 3
102.L5:
103	.cfi_restore_state
104	.loc 1 10 0
105	subl	$2147483626, %eax
106.LVL7:
107	.loc 1 5 0
108	movl	$23, %edx
109.LVL8:
110	.loc 1 16 0
111	imull	%edx, %eax
112.LVL9:
113	.loc 1 20 0
114	popl	%ebp
115	.cfi_def_cfa 4, 4
116	.cfi_restore 5
117	ret
118	.cfi_endproc
119.LFE0:
120	.size	func, .-func
121	.p2align 4,,15
122.globl _start
123	.type	_start, @function
124_start:
125.LFB1:
126	.loc 1 23 0
127	.cfi_startproc
128.LVL10:
129	pushl	%ebp
130	.cfi_def_cfa_offset 8
131	movl	%esp, %ebp
132	.cfi_offset 5, -8
133	.cfi_def_cfa_register 5
134	subl	$4, %esp
135	.loc 1 24 0
136	movl	$1024, (%esp)
137	call	func
138.LVL11:
139	.loc 1 25 0
140	leave
141	.cfi_restore 5
142	.cfi_def_cfa 4, 4
143	ret
144	.cfi_endproc
145.LFE1:
146	.size	_start, .-_start
147.Letext0:
148	.section	.debug_loc,"",@progbits
149.Ldebug_loc0:
150.LLST0:
151	.long	.LVL0-.Ltext0
152	.long	.LVL2-.Ltext0
153	.value	0x4
154	.byte	0x47
155	.byte	0x9f
156	.byte	0x93
157	.uleb128 0x4
158	.long	.LVL2-.Ltext0
159	.long	.LVL4-.Ltext0
160	.value	0x4
161	.byte	0x48
162	.byte	0x9f
163	.byte	0x93
164	.uleb128 0x4
165	.long	.LVL4-.Ltext0
166	.long	.LVL6-.Ltext0
167	.value	0x1
168	.byte	0x52
169	.long	.LVL6-.Ltext0
170	.long	.LVL8-.Ltext0
171	.value	0x4
172	.byte	0x47
173	.byte	0x9f
174	.byte	0x93
175	.uleb128 0x4
176	.long	.LVL8-.Ltext0
177	.long	.LFE0-.Ltext0
178	.value	0x1
179	.byte	0x52
180	.long	0x0
181	.long	0x0
182.LLST1:
183	.long	.LVL0-.Ltext0
184	.long	.LVL2-.Ltext0
185	.value	0x6
186	.byte	0x9e
187	.uleb128 0x4
188	.long	0x7fffffff
189	.long	.LVL2-.Ltext0
190	.long	.LVL6-.Ltext0
191	.value	0x6
192	.byte	0x9e
193	.uleb128 0x4
194	.long	0x80000000
195	.long	.LVL6-.Ltext0
196	.long	.LFE0-.Ltext0
197	.value	0x6
198	.byte	0x9e
199	.uleb128 0x4
200	.long	0x7fffffff
201	.long	0x0
202	.long	0x0
203.LLST2:
204	.long	.LVL1-.Ltext0
205	.long	.LVL3-.Ltext0
206	.value	0x1
207	.byte	0x50
208	.long	.LVL3-.Ltext0
209	.long	.LVL5-.Ltext0
210	.value	0x1
211	.byte	0x50
212	.long	.LVL6-.Ltext0
213	.long	.LVL7-.Ltext0
214	.value	0x1
215	.byte	0x50
216	.long	.LVL7-.Ltext0
217	.long	.LVL9-.Ltext0
218	.value	0x1
219	.byte	0x50
220	.long	0x0
221	.long	0x0
222.LLST3:
223	.long	.LVL10-.Ltext0
224	.long	.LVL11-1-.Ltext0
225	.value	0x2
226	.byte	0x91
227	.sleb128 0
228	.long	0x0
229	.long	0x0
230.LLST4:
231	.long	.LVL10-.Ltext0
232	.long	.LVL11-1-.Ltext0
233	.value	0x2
234	.byte	0x91
235	.sleb128 4
236	.long	0x0
237	.long	0x0
238	.section	.debug_info
239	.long	0xd4
240	.value	0x3
241	.long	.Ldebug_abbrev0
242	.byte	0x4
243	.uleb128 0x1
244	.long	.LASF9
245	.byte	0x1
246	.long	.LASF10
247	.long	.LASF11
248	.long	.Ltext0
249	.long	.Letext0
250	.long	.Ldebug_line0
251	.uleb128 0x2
252	.byte	0x1
253	.long	.LASF3
254	.byte	0x1
255	.byte	0x3
256	.byte	0x1
257	.long	0x7c
258	.long	.LFB0
259	.long	.LFE0
260	.byte	0x1
261	.byte	0x9c
262	.long	0x7c
263	.uleb128 0x3
264	.string	"arg"
265	.byte	0x1
266	.byte	0x3
267	.long	0x7c
268	.byte	0x2
269	.byte	0x91
270	.sleb128 0
271	.uleb128 0x4
272	.long	.LASF0
273	.byte	0x1
274	.byte	0x5
275	.long	0x7c
276	.long	.LLST0
277	.uleb128 0x4
278	.long	.LASF1
279	.byte	0x1
280	.byte	0x6
281	.long	0x7c
282	.long	.LLST1
283	.uleb128 0x4
284	.long	.LASF2
285	.byte	0x1
286	.byte	0x7
287	.long	0x7c
288	.long	.LLST2
289	.byte	0x0
290	.uleb128 0x5
291	.byte	0x4
292	.byte	0x7
293	.long	.LASF7
294	.uleb128 0x2
295	.byte	0x1
296	.long	.LASF4
297	.byte	0x1
298	.byte	0x16
299	.byte	0x1
300	.long	0xbd
301	.long	.LFB1
302	.long	.LFE1
303	.byte	0x1
304	.byte	0x9c
305	.long	0xbd
306	.uleb128 0x6
307	.long	.LASF5
308	.byte	0x1
309	.byte	0x16
310	.long	0xbd
311	.long	.LLST3
312	.uleb128 0x6
313	.long	.LASF6
314	.byte	0x1
315	.byte	0x16
316	.long	0xc4
317	.long	.LLST4
318	.byte	0x0
319	.uleb128 0x7
320	.byte	0x4
321	.byte	0x5
322	.string	"int"
323	.uleb128 0x8
324	.byte	0x4
325	.long	0xca
326	.uleb128 0x8
327	.byte	0x4
328	.long	0xd0
329	.uleb128 0x5
330	.byte	0x1
331	.byte	0x6
332	.long	.LASF8
333	.byte	0x0
334	.section	.debug_abbrev
335	.uleb128 0x1
336	.uleb128 0x11
337	.byte	0x1
338	.uleb128 0x25
339	.uleb128 0xe
340	.uleb128 0x13
341	.uleb128 0xb
342	.uleb128 0x3
343	.uleb128 0xe
344	.uleb128 0x1b
345	.uleb128 0xe
346	.uleb128 0x11
347	.uleb128 0x1
348	.uleb128 0x12
349	.uleb128 0x1
350	.uleb128 0x10
351	.uleb128 0x6
352	.byte	0x0
353	.byte	0x0
354	.uleb128 0x2
355	.uleb128 0x2e
356	.byte	0x1
357	.uleb128 0x3f
358	.uleb128 0xc
359	.uleb128 0x3
360	.uleb128 0xe
361	.uleb128 0x3a
362	.uleb128 0xb
363	.uleb128 0x3b
364	.uleb128 0xb
365	.uleb128 0x27
366	.uleb128 0xc
367	.uleb128 0x49
368	.uleb128 0x13
369	.uleb128 0x11
370	.uleb128 0x1
371	.uleb128 0x12
372	.uleb128 0x1
373	.uleb128 0x40
374	.uleb128 0xa
375	.uleb128 0x1
376	.uleb128 0x13
377	.byte	0x0
378	.byte	0x0
379	.uleb128 0x3
380	.uleb128 0x5
381	.byte	0x0
382	.uleb128 0x3
383	.uleb128 0x8
384	.uleb128 0x3a
385	.uleb128 0xb
386	.uleb128 0x3b
387	.uleb128 0xb
388	.uleb128 0x49
389	.uleb128 0x13
390	.uleb128 0x2
391	.uleb128 0xa
392	.byte	0x0
393	.byte	0x0
394	.uleb128 0x4
395	.uleb128 0x34
396	.byte	0x0
397	.uleb128 0x3
398	.uleb128 0xe
399	.uleb128 0x3a
400	.uleb128 0xb
401	.uleb128 0x3b
402	.uleb128 0xb
403	.uleb128 0x49
404	.uleb128 0x13
405	.uleb128 0x2
406	.uleb128 0x6
407	.byte	0x0
408	.byte	0x0
409	.uleb128 0x5
410	.uleb128 0x24
411	.byte	0x0
412	.uleb128 0xb
413	.uleb128 0xb
414	.uleb128 0x3e
415	.uleb128 0xb
416	.uleb128 0x3
417	.uleb128 0xe
418	.byte	0x0
419	.byte	0x0
420	.uleb128 0x6
421	.uleb128 0x5
422	.byte	0x0
423	.uleb128 0x3
424	.uleb128 0xe
425	.uleb128 0x3a
426	.uleb128 0xb
427	.uleb128 0x3b
428	.uleb128 0xb
429	.uleb128 0x49
430	.uleb128 0x13
431	.uleb128 0x2
432	.uleb128 0x6
433	.byte	0x0
434	.byte	0x0
435	.uleb128 0x7
436	.uleb128 0x24
437	.byte	0x0
438	.uleb128 0xb
439	.uleb128 0xb
440	.uleb128 0x3e
441	.uleb128 0xb
442	.uleb128 0x3
443	.uleb128 0x8
444	.byte	0x0
445	.byte	0x0
446	.uleb128 0x8
447	.uleb128 0xf
448	.byte	0x0
449	.uleb128 0xb
450	.uleb128 0xb
451	.uleb128 0x49
452	.uleb128 0x13
453	.byte	0x0
454	.byte	0x0
455	.byte	0x0
456	.section	.debug_pubnames,"",@progbits
457	.long	0x20
458	.value	0x2
459	.long	.Ldebug_info0
460	.long	0xd8
461	.long	0x25
462	.string	"func"
463	.long	0x83
464	.string	"main"
465	.long	0x0
466	.section	.debug_aranges,"",@progbits
467	.long	0x1c
468	.value	0x2
469	.long	.Ldebug_info0
470	.byte	0x4
471	.byte	0x0
472	.value	0x0
473	.value	0x0
474	.long	.Ltext0
475	.long	.Letext0-.Ltext0
476	.long	0x0
477	.long	0x0
478	.section	.debug_str,"MS",@progbits,1
479.LASF7:
480	.string	"unsigned int"
481.LASF3:
482	.string	"func"
483.LASF0:
484	.string	"uses_stack_op"
485.LASF5:
486	.string	"argc"
487.LASF10:
488	.string	"valop.c"
489.LASF2:
490	.string	"result"
491.LASF8:
492	.string	"char"
493.LASF9:
494	.string	"GNU C 4.5.0 20090818 (experimental) [var-tracking-assignments-branch revision 150964]"
495.LASF4:
496	.string	"main"
497.LASF11:
498	.string	"/tmp"
499.LASF1:
500	.string	"uses_lit_op"
501.LASF6:
502	.string	"argv"
503	.ident	"GCC: (GNU) 4.5.0 20090818 (experimental) [var-tracking-assignments-branch revision 150964]"
504	.section	.note.GNU-stack,"",@progbits
505