1 /* This testcase is part of GDB, the GNU debugger.
3 Copyright 2010-2023 Free Software Foundation, Inc.
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published by
7 the Free Software Foundation; either version 3 of the License, or
8 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
18 /* The goal of this test is to provide anonymous DW_TAG_structure_type
19 containing __pfn + __delta (read in by quirk_gcc_member_function_pointer)
20 before DW_TAG_structure_type of "class C" to exploit the forward reference
21 through "__pfn" and back from DW_TAG_member "fp" of "class C". As the
22 compiler may place the DIEs in arbitrary order they are rather prepared as
26 typedef int (C::*fp_t) ();
33 .file "member-ptr-forwardref.cc"
34 .section .debug_abbrev,"",%progbits
36 .section .debug_info,"",%progbits
38 .section .debug_line,"",%progbits
57 .file 1 "gdb.dwarf2/member-ptr-forwardref.cc"
59 .4byte 0xa9 /* Length of Compilation Unit Info */
60 .2byte 0x3 /* DWARF version number */
61 .4byte .Ldebug_abbrev0 /* Offset Into Abbrev. Section */
62 .byte 0x4 /* Pointer Size (in bytes) */
63 .uleb128 0x1 /* (DIE (0xb) DW_TAG_compile_unit) */
64 .4byte .LASF2 /* DW_AT_producer: "GNU C++ 4.4.2 20091222 (Red Hat 4.4.2-20)" */
65 .byte 0x4 /* DW_AT_language */
66 .4byte .LASF3 /* DW_AT_name: "gdb.dwarf2/member-ptr-forwardref.cc" */
67 .4byte .LASF4 /* DW_AT_comp_dir: "gdb/testsuite" */
68 .4byte .Ltext0 /* DW_AT_low_pc */
69 .4byte .Letext0 /* DW_AT_high_pc */
70 .4byte .Ldebug_line0 /* DW_AT_stmt_list */
71 .uleb128 0x2 /* (DIE (0x25) DW_TAG_typedef) */
72 .4byte .LASF5 /* DW_AT_name: "fp_t" */
73 .byte 0x1 /* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
74 .byte 0x13 /* DW_AT_decl_line */
75 .4byte 0x30 /* DW_AT_type */
76 .uleb128 0x3 /* (DIE (0x30) DW_TAG_structure_type) */
77 .byte 0x8 /* DW_AT_byte_size */
78 .byte 0x1 /* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
79 .byte 0x13 /* DW_AT_decl_line */
80 .4byte 0x51 /* DW_AT_sibling */
81 .uleb128 0x4 /* (DIE (0x38) DW_TAG_member) */
82 .4byte .LASF0 /* DW_AT_name: "__pfn" */
83 .byte 0x1 /* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
84 .byte 0x13 /* DW_AT_decl_line */
85 .4byte 0x85 /* DW_AT_type */
86 .sleb128 0 /* DW_AT_data_member_location */
87 .uleb128 0x4 /* (DIE (0x44) DW_TAG_member) */
88 .4byte .LASF1 /* DW_AT_name: "__delta" */
89 .byte 0x1 /* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
90 .byte 0x13 /* DW_AT_decl_line */
91 .4byte 0x61 /* DW_AT_type */
92 .sleb128 4 /* DW_AT_data_member_location */
93 .byte 0x0 /* end of children of DIE 0x30 */
94 .uleb128 0x5 /* (DIE (0x51) DW_TAG_subroutine_type) */
95 .4byte 0x61 /* DW_AT_type */
96 .4byte 0x61 /* DW_AT_sibling */
97 .uleb128 0x6 /* (DIE (0x5a) DW_TAG_formal_parameter) */
98 .4byte 0x68 /* DW_AT_type */
99 .byte 0x1 /* DW_AT_artificial */
100 .byte 0x0 /* end of children of DIE 0x51 */
101 .uleb128 0x7 /* (DIE (0x61) DW_TAG_base_type) */
102 .byte 0x4 /* DW_AT_byte_size */
103 .byte 0x5 /* DW_AT_encoding */
104 .ascii "int\0" /* DW_AT_name */
105 .uleb128 0x8 /* (DIE (0x68) DW_TAG_pointer_type) */
106 .byte 0x4 /* DW_AT_byte_size */
107 .4byte 0x6e /* DW_AT_type */
108 .uleb128 0x9 /* (DIE (0x6e) DW_TAG_structure_type) */
109 .ascii "C\0" /* DW_AT_name */
110 .byte 0x8 /* DW_AT_byte_size */
111 .byte 0x1 /* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
112 .byte 0x16 /* DW_AT_decl_line */
113 .4byte 0x85 /* DW_AT_sibling */
114 .uleb128 0xa /* (DIE (0x78) DW_TAG_member) */
115 .ascii "fp\0" /* DW_AT_name */
116 .byte 0x1 /* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
117 .byte 0x17 /* DW_AT_decl_line */
118 .4byte 0x30 /* DW_AT_type */
119 .sleb128 0 /* DW_AT_data_member_location */
120 .byte 0x3 /* DW_AT_accessibility */
121 .byte 0x0 /* end of children of DIE 0x6e */
122 .uleb128 0x8 /* (DIE (0x85) DW_TAG_pointer_type) */
123 .byte 0x4 /* DW_AT_byte_size */
124 .4byte 0x51 /* DW_AT_type */
125 .uleb128 0xb /* (DIE (0x8b) DW_TAG_variable) */
126 .ascii "fp\0" /* DW_AT_name */
127 .byte 0x1 /* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
128 .byte 0x14 /* DW_AT_decl_line */
129 .4byte 0x25 /* DW_AT_type */
130 .byte 0x1 /* DW_AT_external */
131 .byte 0x5 /* DW_AT_location */
132 .byte 0x3 /* DW_OP_addr */
134 .uleb128 0xb /* (DIE (0x9c) DW_TAG_variable) */
135 .ascii "c\0" /* DW_AT_name */
136 .byte 0x1 /* DW_AT_decl_file (gdb.dwarf2/member-ptr-forwardref.cc) */
137 .byte 0x18 /* DW_AT_decl_line */
138 .4byte 0x6e /* DW_AT_type */
139 .byte 0x1 /* DW_AT_external */
140 .byte 0x5 /* DW_AT_location */
141 .byte 0x3 /* DW_OP_addr */
143 .byte 0x0 /* end of children of DIE 0xb */
144 .section .debug_abbrev
145 .uleb128 0x1 /* (abbrev code) */
146 .uleb128 0x11 /* (TAG: DW_TAG_compile_unit) */
147 .byte 0x1 /* DW_children_yes */
148 .uleb128 0x25 /* (DW_AT_producer) */
149 .uleb128 0xe /* (DW_FORM_strp) */
150 .uleb128 0x13 /* (DW_AT_language) */
151 .uleb128 0xb /* (DW_FORM_data1) */
152 .uleb128 0x3 /* (DW_AT_name) */
153 .uleb128 0xe /* (DW_FORM_strp) */
154 .uleb128 0x1b /* (DW_AT_comp_dir) */
155 .uleb128 0xe /* (DW_FORM_strp) */
156 .uleb128 0x11 /* (DW_AT_low_pc) */
157 .uleb128 0x1 /* (DW_FORM_addr) */
158 .uleb128 0x12 /* (DW_AT_high_pc) */
159 .uleb128 0x1 /* (DW_FORM_addr) */
160 .uleb128 0x10 /* (DW_AT_stmt_list) */
161 .uleb128 0x6 /* (DW_FORM_data4) */
164 .uleb128 0x2 /* (abbrev code) */
165 .uleb128 0x16 /* (TAG: DW_TAG_typedef) */
166 .byte 0x0 /* DW_children_no */
167 .uleb128 0x3 /* (DW_AT_name) */
168 .uleb128 0xe /* (DW_FORM_strp) */
169 .uleb128 0x3a /* (DW_AT_decl_file) */
170 .uleb128 0xb /* (DW_FORM_data1) */
171 .uleb128 0x3b /* (DW_AT_decl_line) */
172 .uleb128 0xb /* (DW_FORM_data1) */
173 .uleb128 0x49 /* (DW_AT_type) */
174 .uleb128 0x13 /* (DW_FORM_ref4) */
177 .uleb128 0x3 /* (abbrev code) */
178 .uleb128 0x13 /* (TAG: DW_TAG_structure_type) */
179 .byte 0x1 /* DW_children_yes */
180 .uleb128 0xb /* (DW_AT_byte_size) */
181 .uleb128 0xb /* (DW_FORM_data1) */
182 .uleb128 0x3a /* (DW_AT_decl_file) */
183 .uleb128 0xb /* (DW_FORM_data1) */
184 .uleb128 0x3b /* (DW_AT_decl_line) */
185 .uleb128 0xb /* (DW_FORM_data1) */
186 .uleb128 0x1 /* (DW_AT_sibling) */
187 .uleb128 0x13 /* (DW_FORM_ref4) */
190 .uleb128 0x4 /* (abbrev code) */
191 .uleb128 0xd /* (TAG: DW_TAG_member) */
192 .byte 0x0 /* DW_children_no */
193 .uleb128 0x3 /* (DW_AT_name) */
194 .uleb128 0xe /* (DW_FORM_strp) */
195 .uleb128 0x3a /* (DW_AT_decl_file) */
196 .uleb128 0xb /* (DW_FORM_data1) */
197 .uleb128 0x3b /* (DW_AT_decl_line) */
198 .uleb128 0xb /* (DW_FORM_data1) */
199 .uleb128 0x49 /* (DW_AT_type) */
200 .uleb128 0x13 /* (DW_FORM_ref4) */
201 .uleb128 0x38 /* (DW_AT_data_member_location) */
202 .uleb128 0xd /* (DW_FORM_sdata) */
205 .uleb128 0x5 /* (abbrev code) */
206 .uleb128 0x15 /* (TAG: DW_TAG_subroutine_type) */
207 .byte 0x1 /* DW_children_yes */
208 .uleb128 0x49 /* (DW_AT_type) */
209 .uleb128 0x13 /* (DW_FORM_ref4) */
210 .uleb128 0x1 /* (DW_AT_sibling) */
211 .uleb128 0x13 /* (DW_FORM_ref4) */
214 .uleb128 0x6 /* (abbrev code) */
215 .uleb128 0x5 /* (TAG: DW_TAG_formal_parameter) */
216 .byte 0x0 /* DW_children_no */
217 .uleb128 0x49 /* (DW_AT_type) */
218 .uleb128 0x13 /* (DW_FORM_ref4) */
219 .uleb128 0x34 /* (DW_AT_artificial) */
220 .uleb128 0xc /* (DW_FORM_flag) */
223 .uleb128 0x7 /* (abbrev code) */
224 .uleb128 0x24 /* (TAG: DW_TAG_base_type) */
225 .byte 0x0 /* DW_children_no */
226 .uleb128 0xb /* (DW_AT_byte_size) */
227 .uleb128 0xb /* (DW_FORM_data1) */
228 .uleb128 0x3e /* (DW_AT_encoding) */
229 .uleb128 0xb /* (DW_FORM_data1) */
230 .uleb128 0x3 /* (DW_AT_name) */
231 .uleb128 0x8 /* (DW_FORM_string) */
234 .uleb128 0x8 /* (abbrev code) */
235 .uleb128 0xf /* (TAG: DW_TAG_pointer_type) */
236 .byte 0x0 /* DW_children_no */
237 .uleb128 0xb /* (DW_AT_byte_size) */
238 .uleb128 0xb /* (DW_FORM_data1) */
239 .uleb128 0x49 /* (DW_AT_type) */
240 .uleb128 0x13 /* (DW_FORM_ref4) */
243 .uleb128 0x9 /* (abbrev code) */
244 .uleb128 0x13 /* (TAG: DW_TAG_structure_type) */
245 .byte 0x1 /* DW_children_yes */
246 .uleb128 0x3 /* (DW_AT_name) */
247 .uleb128 0x8 /* (DW_FORM_string) */
248 .uleb128 0xb /* (DW_AT_byte_size) */
249 .uleb128 0xb /* (DW_FORM_data1) */
250 .uleb128 0x3a /* (DW_AT_decl_file) */
251 .uleb128 0xb /* (DW_FORM_data1) */
252 .uleb128 0x3b /* (DW_AT_decl_line) */
253 .uleb128 0xb /* (DW_FORM_data1) */
254 .uleb128 0x1 /* (DW_AT_sibling) */
255 .uleb128 0x13 /* (DW_FORM_ref4) */
258 .uleb128 0xa /* (abbrev code) */
259 .uleb128 0xd /* (TAG: DW_TAG_member) */
260 .byte 0x0 /* DW_children_no */
261 .uleb128 0x3 /* (DW_AT_name) */
262 .uleb128 0x8 /* (DW_FORM_string) */
263 .uleb128 0x3a /* (DW_AT_decl_file) */
264 .uleb128 0xb /* (DW_FORM_data1) */
265 .uleb128 0x3b /* (DW_AT_decl_line) */
266 .uleb128 0xb /* (DW_FORM_data1) */
267 .uleb128 0x49 /* (DW_AT_type) */
268 .uleb128 0x13 /* (DW_FORM_ref4) */
269 .uleb128 0x38 /* (DW_AT_data_member_location) */
270 .uleb128 0xd /* (DW_FORM_sdata) */
271 .uleb128 0x32 /* (DW_AT_accessibility) */
272 .uleb128 0xb /* (DW_FORM_data1) */
275 .uleb128 0xb /* (abbrev code) */
276 .uleb128 0x34 /* (TAG: DW_TAG_variable) */
277 .byte 0x0 /* DW_children_no */
278 .uleb128 0x3 /* (DW_AT_name) */
279 .uleb128 0x8 /* (DW_FORM_string) */
280 .uleb128 0x3a /* (DW_AT_decl_file) */
281 .uleb128 0xb /* (DW_FORM_data1) */
282 .uleb128 0x3b /* (DW_AT_decl_line) */
283 .uleb128 0xb /* (DW_FORM_data1) */
284 .uleb128 0x49 /* (DW_AT_type) */
285 .uleb128 0x13 /* (DW_FORM_ref4) */
286 .uleb128 0x3f /* (DW_AT_external) */
287 .uleb128 0xc /* (DW_FORM_flag) */
288 .uleb128 0x2 /* (DW_AT_location) */
289 .uleb128 0xa /* (DW_FORM_block1) */
293 .section .debug_pubnames,"",%progbits
294 .4byte 0x1b /* Length of Public Names Info */
295 .2byte 0x2 /* DWARF Version */
296 .4byte .Ldebug_info0 /* Offset of Compilation Unit Info */
297 .4byte 0xad /* Compilation Unit Length */
298 .4byte 0x8b /* DIE offset */
299 .ascii "fp\0" /* external name */
300 .4byte 0x9c /* DIE offset */
301 .ascii "c\0" /* external name */
303 .section .debug_pubtypes,"",%progbits
304 .4byte 0x1d /* Length of Public Type Names Info */
305 .2byte 0x2 /* DWARF Version */
306 .4byte .Ldebug_info0 /* Offset of Compilation Unit Info */
307 .4byte 0xad /* Compilation Unit Length */
308 .4byte 0x25 /* DIE offset */
309 .ascii "fp_t\0" /* external name */
310 .4byte 0x6e /* DIE offset */
311 .ascii "C\0" /* external name */
313 .section .debug_str,"MS",%progbits,1
317 .string "GNU C++ 4.4.2 20091222 (Red Hat 4.4.2-20)"
321 .string "gdb/testsuite"
323 .string "gdb.dwarf2/member-ptr-forwardref.cc"
326 .ident "GCC: (GNU) 4.4.2 20091222 (Red Hat 4.4.2-20)"
327 .section .note.GNU-stack,"",%progbits