xref: /netbsd-src/external/gpl3/gdb.old/dist/gdb/testsuite/gdb.dwarf2/fission-reread.S (revision b2c35e17b976cf7ccd7250c86c6f5e95090ed636)
1/* Copyright 2012-2020 Free Software Foundation, Inc.
2
3   This program is free software; you can redistribute it and/or modify
4   it under the terms of the GNU General Public License as published by
5   the Free Software Foundation; either version 3 of the License, or
6   (at your option) any later version.
7
8   This program is distributed in the hope that it will be useful,
9   but WITHOUT ANY WARRANTY; without even the implied warranty of
10   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11   GNU General Public License for more details.
12
13   You should have received a copy of the GNU General Public License
14   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
15
16/* Testcase to exercise the code path in bug 13961 for Fission.
17   http://gcc.gnu.org/wiki/DebugFission
18
19   Compiled from:
20
21   class foo
22   {
23    public:
24     int bar;
25   };
26
27   foo baz;
28
29   int
30   main ()
31   {
32     return 0;
33   }
34
35   And then manually edited to insert the necessary DW_AT_specification
36   entries to trigger the desired code path.
37   There's no real need to make this architecture-specific, so it has been
38   further hand-edited to support that.
39*/
40
41#define CONCAT1(a, b) CONCAT2(a, b)
42#define CONCAT2(a, b) a ## b
43
44#ifdef SYMBOL_PREFIX
45# define SYMBOL(str)     CONCAT1(SYMBOL_PREFIX, str)
46#else
47# define SYMBOL(str)     str
48#endif
49
50	.file	"fission-reread.cc"
51
52	.globl	SYMBOL(baz)
53	.data	/* Previously this used .bss, but it's not portable.  */
54	.align 4
55	.type	SYMBOL(baz), %object
56	.size	SYMBOL(baz), 4
57SYMBOL(baz):
58	.zero	4
59
60	.text
61.Ltext0:
62	.globl	SYMBOL(main)
63	.type	SYMBOL(main), %function
64SYMBOL(main):
65.LFB0:
66	.file 1 "fission-reread.cc"
67	.loc 1 11 0
68	.4byte 0
69.LFE0:
70	.size	SYMBOL(main), .-SYMBOL(main)
71.Letext0:
72
73	.section	.debug_types.dwo
74.Ltu_start_dwo:
75	.4byte	.Ltu_end_dwo - .Ltu_start_dwo - 4	/* Length of Compilation Unit Info */
76	.2byte	0x4	/* DWARF version number */
77	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
78	.byte	0x4	/* Pointer Size (in bytes) */
79	.byte	0x19	/* Type Signature */
80	.byte	0x8b
81	.byte	0x7e
82	.byte	0xac
83	.byte	0xce
84	.byte	0xf1
85	.byte	0x22
86	.byte	0x90
87	.4byte	.Ltu_class_type - .Ltu_start_dwo	/* Offset to Type DIE */
88	.uleb128 0x1	/* (DIE (0x17) DW_TAG_type_unit) */
89	.byte	0x4	/* DW_AT_language */
90	.byte	0x73	/* DW_AT_GNU_odr_signature */
91	.byte	0xea
92	.byte	0x85
93	.byte	0x23
94	.byte	0x75
95	.byte	0x8a
96	.byte	0x7e
97	.byte	0x87
98	.4byte	.Lskeleton_debug_line0	/* DW_AT_stmt_list */
99
100	/* Manually inserted to have a DW_AT_specification refering to
101	   something and appearing ahead of it.  */
102	.uleb128 0x8	/* DW_TAG_class_type */
103	.4byte .Ltu_class_type - .Ltu_start_dwo
104	/* End of manual insertion */
105
106.Ltu_class_type:
107	.uleb128 0x2	/* (DIE (0x25) DW_TAG_class_type) */
108	.ascii "foo\0"	/* DW_AT_name */
109	.byte	0x4	/* DW_AT_byte_size */
110	.byte	0x1	/* DW_AT_decl_file (fission-reread.cc) */
111	.byte	0x1	/* DW_AT_decl_line */
112	.4byte	.Ltu_int - .Ltu_start_dwo /* DW_AT_sibling */
113	.uleb128 0x3	/* (DIE (0x31) DW_TAG_member) */
114	.ascii "bar\0"	/* DW_AT_name */
115	.byte	0x1	/* DW_AT_decl_file (fission-reread.cc) */
116	.byte	0x4	/* DW_AT_decl_line */
117	.4byte	.Ltu_int - .Ltu_start_dwo /* DW_AT_type */
118	.byte	0	/* DW_AT_data_member_location */
119	.byte	0x1	/* DW_AT_accessibility */
120	.byte	0	/* end of children of DIE 0x25 */
121.Ltu_int:
122	.uleb128 0x4	/* (DIE (0x3f) DW_TAG_base_type) */
123	.byte	0x4	/* DW_AT_byte_size */
124	.byte	0x5	/* DW_AT_encoding */
125	.ascii "int\0"	/* DW_AT_name */
126	.byte	0	/* end of children of DIE 0x17 */
127.Ltu_end_dwo:
128
129	.section	.debug_types
130.Ltu_start:
131	.4byte	.Ltu_end - .Ltu_start - 4	/* Length of Type Unit Info */
132	.2byte	0x4	/* DWARF version number */
133	.4byte	.Lskeleton_debug_abbrev0	/* Offset Into Abbrev. Section */
134	.byte	0x4	/* Pointer Size (in bytes) */
135	.byte	0x19	/* Type Signature */
136	.byte	0x8b
137	.byte	0x7e
138	.byte	0xac
139	.byte	0xce
140	.byte	0xf1
141	.byte	0x22
142	.byte	0x90
143	.4byte	0	/* Offset to Type DIE */
144	.uleb128 0x2	/* (DIE (0) DW_TAG_type_unit) */
145	.ascii "/tmp/src/gdb/testsuite\0"	/* DW_AT_comp_dir */
146	.ascii "fission-reread.dwo\0" /* DW_AT_GNU_dwo_name */
147	.4byte	.Ldebug_pubnames0	/* DW_AT_GNU_pubnames */
148	.4byte	.Ldebug_pubtypes0	/* DW_AT_GNU_pubtypes */
149	.4byte	.Ldebug_addr0	/* DW_AT_GNU_addr_base */
150.Ltu_end:
151
152	.section	.debug_info.dwo
153.Lcu_start_dwo:
154	.4byte	.Lcu_end_dwo - .Lcu_start_dwo - 4	/* Length of Compilation Unit Info */
155	.2byte	0x4	/* DWARF version number */
156	.4byte	.Ldebug_abbrev0	/* Offset Into Abbrev. Section */
157	.byte	0x4	/* Pointer Size (in bytes) */
158	.uleb128 0x5	/* (DIE (0xb) DW_TAG_compile_unit) */
159	.ascii "GNU C++ 4.6.x-fission\0"	/* DW_AT_producer */
160	.byte	0x4	/* DW_AT_language */
161	.ascii "gdb.dwarf2/fission-reread.cc\0"	/* DW_AT_name */
162	.ascii "/tmp/src/gdb/testsuite\0"	/* DW_AT_comp_dir */
163	.byte	1	/* DW_AT_GNU_dwo_id */
164	.byte	2
165	.byte	3
166	.byte	4
167	.byte	5
168	.byte	6
169	.byte	7
170	.byte	8
171.Lcu_int:
172	.uleb128 0x4	/* (DIE (0x7f) DW_TAG_base_type) */
173	.byte	0x4	/* DW_AT_byte_size */
174	.byte	0x5	/* DW_AT_encoding */
175	.ascii "int\0"	/* DW_AT_name */
176	.uleb128 0x6	/* (DIE (0x86) DW_TAG_subprogram) */
177			/* DW_AT_external */
178	.ascii "main\0"	/* DW_AT_name */
179	.byte	0x1	/* DW_AT_decl_file (fission-reread.cc) */
180	.byte	0xa	/* DW_AT_decl_line */
181	.4byte	.Lcu_int - .Lcu_start_dwo /* DW_AT_type */
182	.uleb128 0	/* DW_AT_low_pc */
183	.4byte	.LFE0-.LFB0	/* DW_AT_high_pc */
184	.uleb128 0x1	/* DW_AT_frame_base */
185	.byte	0x9c	/* DW_OP_call_frame_cfa */
186	.uleb128 0x7	/* (DIE (0x9d) DW_TAG_variable) */
187	.ascii "baz\0"	/* DW_AT_name */
188	.byte	0x1	/* DW_AT_decl_file (fission-reread.cc) */
189	.byte	0x7	/* DW_AT_decl_line */
190	.byte	0x19	/* DW_AT_type */
191	.byte	0x8b
192	.byte	0x7e
193	.byte	0xac
194	.byte	0xce
195	.byte	0xf1
196	.byte	0x22
197	.byte	0x90
198			/* DW_AT_external */
199	.uleb128 0x2	/* DW_AT_location */
200	.byte	0xfb	/* DW_OP_GNU_addr_index */
201	.uleb128 0x1	/* (index into .debug_addr) */
202	.byte	0	/* end of children of DIE 0xb */
203.Lcu_end_dwo:
204
205	.section	.debug_info
206.Lskeleton_debug_info0:
207.Lcu_start:
208	.4byte	.Lcu_end - .Lcu_start - 4	/* Length of Compilation Unit Info */
209	.2byte	0x4	/* DWARF version number */
210	.4byte	.Lskeleton_debug_abbrev0	/* Offset Into Abbrev. Section */
211	.byte	0x4	/* Pointer Size (in bytes) */
212	.uleb128 0x1	/* (DIE (0) DW_TAG_compile_unit) */
213	.4byte	.Ltext0	/* DW_AT_low_pc */
214	.4byte	.Letext0-.Ltext0	/* DW_AT_high_pc */
215	.4byte	.Ldebug_line0	/* DW_AT_stmt_list */
216	.ascii "/tmp/src/gdb/testsuite\0"	/* DW_AT_comp_dir */
217	.ascii "fission-reread.dwo\0" /* DW_AT_GNU_dwo_name */
218	.4byte	.Ldebug_pubnames0	/* DW_AT_GNU_pubnames */
219	.4byte	.Ldebug_pubtypes0	/* DW_AT_GNU_pubtypes */
220	.4byte	.Ldebug_addr0	/* DW_AT_GNU_addr_base */
221	.byte	1	/* DW_AT_GNU_dwo_id */
222	.byte	2
223	.byte	3
224	.byte	4
225	.byte	5
226	.byte	6
227	.byte	7
228	.byte	8
229.Lcu_end:
230
231	.section	.debug_abbrev
232.Lskeleton_debug_abbrev0:
233	.uleb128 0x1	/* (abbrev code) */
234	.uleb128 0x11	/* (TAG: DW_TAG_compile_unit) */
235	.byte	0	/* DW_children_no */
236	.uleb128 0x11	/* (DW_AT_low_pc) */
237	.uleb128 0x1	/* (DW_FORM_addr) */
238	.uleb128 0x12	/* (DW_AT_high_pc) */
239	.uleb128 0x6	/* (DW_FORM_data4) */
240	.uleb128 0x10	/* (DW_AT_stmt_list) */
241	.uleb128 0x17	/* (DW_FORM_sec_offset) */
242	.uleb128 0x1b	/* (DW_AT_comp_dir) */
243	.uleb128 0x8	/* (DW_FORM_string) */
244	.uleb128 0x2130	/* (DW_AT_GNU_dwo_name) */
245	.uleb128 0x8	/* (DW_FORM_string) */
246	.uleb128 0x2134	/* (DW_AT_GNU_pubnames) */
247	.uleb128 0x17	/* (DW_FORM_sec_offset) */
248	.uleb128 0x2135	/* (DW_AT_GNU_pubtypes) */
249	.uleb128 0x17	/* (DW_FORM_sec_offset) */
250	.uleb128 0x2133	/* (DW_AT_GNU_addr_base) */
251	.uleb128 0x17	/* (DW_FORM_sec_offset) */
252	.uleb128 0x2131	/* (DW_AT_GNU_dwo_id) */
253	.uleb128 0x7	/* (DW_FORM_data8) */
254	.byte	0
255	.byte	0
256	.uleb128 0x2	/* (abbrev code) */
257	.uleb128 0x41	/* (TAG: DW_TAG_type_unit) */
258	.byte	0	/* DW_children_no */
259	.uleb128 0x1b	/* (DW_AT_comp_dir) */
260	.uleb128 0x8	/* (DW_FORM_string) */
261	.uleb128 0x2130	/* (DW_AT_GNU_dwo_name) */
262	.uleb128 0x8	/* (DW_FORM_string) */
263	.uleb128 0x2134	/* (DW_AT_GNU_pubnames) */
264	.uleb128 0x17	/* (DW_FORM_sec_offset) */
265	.uleb128 0x2135	/* (DW_AT_GNU_pubtypes) */
266	.uleb128 0x17	/* (DW_FORM_sec_offset) */
267	.uleb128 0x2133	/* (DW_AT_GNU_addr_base) */
268	.uleb128 0x17	/* (DW_FORM_sec_offset) */
269	.byte	0
270	.byte	0
271	.byte	0	/* end of skeleton .debug_abbrev */
272	.section	.debug_abbrev.dwo
273.Ldebug_abbrev0:
274	.uleb128 0x1	/* (abbrev code) */
275	.uleb128 0x41	/* (TAG: DW_TAG_type_unit) */
276	.byte	0x1	/* DW_children_yes */
277	.uleb128 0x13	/* (DW_AT_language) */
278	.uleb128 0xb	/* (DW_FORM_data1) */
279	.uleb128 0x210f	/* (DW_AT_GNU_odr_signature) */
280	.uleb128 0x7	/* (DW_FORM_data8) */
281	.uleb128 0x10	/* (DW_AT_stmt_list) */
282	.uleb128 0x17	/* (DW_FORM_sec_offset) */
283	.byte	0
284	.byte	0
285	.uleb128 0x2	/* (abbrev code) */
286	.uleb128 0x2	/* (TAG: DW_TAG_class_type) */
287	.byte	0x1	/* DW_children_yes */
288	.uleb128 0x3	/* (DW_AT_name) */
289	.uleb128 0x8	/* (DW_FORM_string) */
290	.uleb128 0xb	/* (DW_AT_byte_size) */
291	.uleb128 0xb	/* (DW_FORM_data1) */
292	.uleb128 0x3a	/* (DW_AT_decl_file) */
293	.uleb128 0xb	/* (DW_FORM_data1) */
294	.uleb128 0x3b	/* (DW_AT_decl_line) */
295	.uleb128 0xb	/* (DW_FORM_data1) */
296	.uleb128 0x1	/* (DW_AT_sibling) */
297	.uleb128 0x13	/* (DW_FORM_ref4) */
298	.byte	0
299	.byte	0
300	.uleb128 0x3	/* (abbrev code) */
301	.uleb128 0xd	/* (TAG: DW_TAG_member) */
302	.byte	0	/* DW_children_no */
303	.uleb128 0x3	/* (DW_AT_name) */
304	.uleb128 0x8	/* (DW_FORM_string) */
305	.uleb128 0x3a	/* (DW_AT_decl_file) */
306	.uleb128 0xb	/* (DW_FORM_data1) */
307	.uleb128 0x3b	/* (DW_AT_decl_line) */
308	.uleb128 0xb	/* (DW_FORM_data1) */
309	.uleb128 0x49	/* (DW_AT_type) */
310	.uleb128 0x13	/* (DW_FORM_ref4) */
311	.uleb128 0x38	/* (DW_AT_data_member_location) */
312	.uleb128 0xb	/* (DW_FORM_data1) */
313	.uleb128 0x32	/* (DW_AT_accessibility) */
314	.uleb128 0xb	/* (DW_FORM_data1) */
315	.byte	0
316	.byte	0
317	.uleb128 0x4	/* (abbrev code) */
318	.uleb128 0x24	/* (TAG: DW_TAG_base_type) */
319	.byte	0	/* DW_children_no */
320	.uleb128 0xb	/* (DW_AT_byte_size) */
321	.uleb128 0xb	/* (DW_FORM_data1) */
322	.uleb128 0x3e	/* (DW_AT_encoding) */
323	.uleb128 0xb	/* (DW_FORM_data1) */
324	.uleb128 0x3	/* (DW_AT_name) */
325	.uleb128 0x8	/* (DW_FORM_string) */
326	.byte	0
327	.byte	0
328	.uleb128 0x5	/* (abbrev code) */
329	.uleb128 0x11	/* (TAG: DW_TAG_compile_unit) */
330	.byte	0x1	/* DW_children_yes */
331	.uleb128 0x25	/* (DW_AT_producer) */
332	.uleb128 0x8	/* (DW_FORM_string) */
333	.uleb128 0x13	/* (DW_AT_language) */
334	.uleb128 0xb	/* (DW_FORM_data1) */
335	.uleb128 0x3	/* (DW_AT_name) */
336	.uleb128 0x8	/* (DW_FORM_string) */
337	.uleb128 0x1b	/* (DW_AT_comp_dir) */
338	.uleb128 0x8	/* (DW_FORM_string) */
339	.uleb128 0x2131	/* (DW_AT_GNU_dwo_id) */
340	.uleb128 0x7	/* (DW_FORM_data8) */
341	.byte	0
342	.byte	0
343	.uleb128 0x6	/* (abbrev code) */
344	.uleb128 0x2e	/* (TAG: DW_TAG_subprogram) */
345	.byte	0	/* DW_children_no */
346	.uleb128 0x3f	/* (DW_AT_external) */
347	.uleb128 0x19	/* (DW_FORM_flag_present) */
348	.uleb128 0x3	/* (DW_AT_name) */
349	.uleb128 0x8	/* (DW_FORM_string) */
350	.uleb128 0x3a	/* (DW_AT_decl_file) */
351	.uleb128 0xb	/* (DW_FORM_data1) */
352	.uleb128 0x3b	/* (DW_AT_decl_line) */
353	.uleb128 0xb	/* (DW_FORM_data1) */
354	.uleb128 0x49	/* (DW_AT_type) */
355	.uleb128 0x13	/* (DW_FORM_ref4) */
356	.uleb128 0x11	/* (DW_AT_low_pc) */
357	.uleb128 0x1f01	/* (DW_FORM_GNU_addr_index) */
358	.uleb128 0x12	/* (DW_AT_high_pc) */
359	.uleb128 0x6	/* (DW_FORM_data4) */
360	.uleb128 0x40	/* (DW_AT_frame_base) */
361	.uleb128 0x18	/* (DW_FORM_exprloc) */
362	.byte	0
363	.byte	0
364	.uleb128 0x7	/* (abbrev code) */
365	.uleb128 0x34	/* (TAG: DW_TAG_variable) */
366	.byte	0	/* DW_children_no */
367	.uleb128 0x3	/* (DW_AT_name) */
368	.uleb128 0x8	/* (DW_FORM_string) */
369	.uleb128 0x3a	/* (DW_AT_decl_file) */
370	.uleb128 0xb	/* (DW_FORM_data1) */
371	.uleb128 0x3b	/* (DW_AT_decl_line) */
372	.uleb128 0xb	/* (DW_FORM_data1) */
373	.uleb128 0x49	/* (DW_AT_type) */
374	.uleb128 0x20	/* (DW_FORM_ref_sig8) */
375	.uleb128 0x3f	/* (DW_AT_external) */
376	.uleb128 0x19	/* (DW_FORM_flag_present) */
377	.uleb128 0x2	/* (DW_AT_location) */
378	.uleb128 0x18	/* (DW_FORM_exprloc) */
379	.byte	0
380	.byte	0
381
382	/* Manually inserted.  */
383	.uleb128 0x8		/* abbrev code */
384	.uleb128 0x2		/* DW_TAG_class_type */
385	.byte	0x0		/* DW_has_children_no */
386	.uleb128 0x47		/* DW_AT_specification */
387	.uleb128 0x13		/* DW_FORM_ref4 */
388	.byte	0x0		/* Terminator */
389	.byte	0x0		/* Terminator */
390	/* End of manual insertion.  */
391
392	.byte	0
393	.section	.debug_pubnames
394.Ldebug_pubnames0:
395	.4byte	0x1f	/* Length of Public Names Info */
396	.2byte	0x2	/* DWARF Version */
397	.4byte	.Lskeleton_debug_info0	/* Offset of Compilation Unit Info */
398	.4byte	0xb0	/* Compilation Unit Length */
399	.4byte	0x86	/* DIE offset */
400	.ascii "main\0"	/* external name */
401	.4byte	0x9d	/* DIE offset */
402	.ascii "baz\0"	/* external name */
403	.4byte	0
404	.section	.debug_pubtypes
405.Ldebug_pubtypes0:
406	.4byte	0x1e	/* Length of Public Type Names Info */
407	.2byte	0x2	/* DWARF Version */
408	.4byte	.Lskeleton_debug_info0	/* Offset of Compilation Unit Info */
409	.4byte	0xb0	/* Compilation Unit Length */
410	.4byte	0x7f	/* DIE offset */
411	.ascii "int\0"	/* external name */
412	.4byte	0x25	/* DIE offset */
413	.ascii "foo\0"	/* external name */
414	.4byte	0
415	.section	.debug_aranges
416	.4byte	0x1c	/* Length of Address Ranges Info */
417	.2byte	0x2	/* DWARF Version */
418	.4byte	.Lskeleton_debug_info0	/* Offset of Compilation Unit Info */
419	.byte	0x4	/* Size of Address */
420	.byte	0	/* Size of Segment Descriptor */
421	.2byte	0	/* Pad to 16 byte boundary */
422	.2byte	0
423	.4byte	.Ltext0	/* Address */
424	.4byte	.Letext0-.Ltext0	/* Length */
425	.4byte	0
426	.4byte	0
427	.section	.debug_line
428.Ldebug_line0:
429	.section	.debug_line.dwo
430.Lskeleton_debug_line0:
431	.4byte	.LELT0-.LSLT0	/* Length of Source Line Info */
432.LSLT0:
433	.2byte	0x4	/* DWARF Version */
434	.4byte	.LELTP0-.LASLTP0	/* Prolog Length */
435.LASLTP0:
436	.byte	0x1	/* Minimum Instruction Length */
437	.byte	0x1	/* Maximum Operations Per Instruction */
438	.byte	0x1	/* Default is_stmt_start flag */
439	.byte	0xf6	/* Line Base Value (Special Opcodes) */
440	.byte	0xf5	/* Line Range Value (Special Opcodes) */
441	.byte	0xa	/* Special Opcode Base */
442	.byte	0	/* opcode: 0x1 has 0 args */
443	.byte	0x1	/* opcode: 0x2 has 1 args */
444	.byte	0x1	/* opcode: 0x3 has 1 args */
445	.byte	0x1	/* opcode: 0x4 has 1 args */
446	.byte	0x1	/* opcode: 0x5 has 1 args */
447	.byte	0	/* opcode: 0x6 has 0 args */
448	.byte	0	/* opcode: 0x7 has 0 args */
449	.byte	0	/* opcode: 0x8 has 0 args */
450	.byte	0x1	/* opcode: 0x9 has 1 args */
451	.byte	0	/* End directory table */
452	.ascii "fission-reread.cc\0"	/* File Entry: 0x1 */
453	.uleb128 0
454	.uleb128 0
455	.uleb128 0
456	.byte	0	/* End file name table */
457.LELTP0:
458.LELT0:
459	.section	.debug_addr
460.Ldebug_addr0:
461	.4byte	.LFB0	/* DW_AT_low_pc */
462	.4byte	SYMBOL(baz)	/* DW_AT_location */
463