1 Made more safe (but less effective) by using a linked list.
4 Re: [RFA] Delayed physname computation
5 http://sourceware.org/ml/gdb-patches/2010-05/msg00248.html
7 Neither its obstack-leak.patch nor
8 [patch] Fix duplicate types for single DIE
9 http://sourceware.org/ml/gdb-patches/2010-05/msg00271.html
10 is needed as the linked list is used instead.
12 Index: gdb-7.1.90.20100721/gdb/dwarf2read.c
13 ===================================================================
14 --- gdb-7.1.90.20100721.orig/gdb/dwarf2read.c 2010-07-22 11:59:19.000000000 +0200
15 +++ gdb-7.1.90.20100721/gdb/dwarf2read.c 2010-07-22 12:00:08.000000000 +0200
16 @@ -253,6 +253,28 @@ struct comp_unit_head
17 unsigned int first_die_offset;
20 +/* Type used for delaying computation of method physnames.
21 + See comments for compute_delayed_physnames. */
22 +struct delayed_method_info
24 + struct delayed_method_info *next;
26 + /* The type to which the method is attached, i.e., its parent class. */
29 + /* The index of the method in the type's function fieldlists. */
32 + /* The index of the method in the fieldlist. */
35 + /* The name of the DIE. */
38 + /* The DIE associated with this method. */
39 + struct die_info *die;
42 /* Internal state when decoding a particular compilation unit. */
45 @@ -331,6 +353,10 @@ struct dwarf2_cu
46 /* Header data from the line table, during full symbol processing. */
47 struct line_header *line_header;
49 + /* A list of methods which need to have physnames computed
50 + after all type information has been read. */
51 + struct delayed_method_info *method_list;
53 /* Mark used when releasing cached dies. */
54 unsigned int mark : 1;
56 @@ -1239,6 +1265,9 @@ static gdb_byte *partial_read_comp_unit_
57 static void init_cu_die_reader (struct die_reader_specs *reader,
58 struct dwarf2_cu *cu);
60 +static const char *dwarf2_physname (char *name, struct die_info *die,
61 + struct dwarf2_cu *cu);
65 /* Convert VALUE between big- and little-endian. */
66 @@ -4103,6 +4132,58 @@ load_full_comp_unit (struct dwarf2_per_c
67 discard_cleanups (free_cu_cleanup);
70 +/* Add a DIE to the delayed physname list. */
72 +add_to_method_list (struct type *type, int fnfield_index, int index,
73 + const char *name, struct die_info *die,
74 + struct dwarf2_cu *cu)
76 + struct delayed_method_info *mi;
78 + mi = xmalloc (sizeof (*mi));
79 + mi->next = cu->method_list;
80 + cu->method_list = mi;
82 + mi->fnfield_index = fnfield_index;
88 +/* Compute the physnames of any methods on the CU's method list.
90 + The computation of method physnames is delayed in order to avoid the
91 + (bad) condition that one of the method's formal parameters is of an as yet
94 +compute_delayed_physnames (struct dwarf2_cu *cu)
96 + struct delayed_method_info *mi;
98 + for (mi = cu->method_list; mi; mi = mi->next)
101 + struct fn_fieldlist *fn_flp
102 + = &TYPE_FN_FIELDLIST (mi->type, mi->fnfield_index);
103 + physname = (char *) dwarf2_physname ((char *) mi->name, mi->die, cu);
104 + fn_flp->fn_fields[mi->index].physname = physname ? physname : "";
109 +method_list_cleanup (void *arg)
111 + struct delayed_method_info **method_list_pointer = arg;
113 + while (*method_list_pointer)
115 + struct delayed_method_info *mi = *method_list_pointer;
117 + *method_list_pointer = mi->next;
122 /* Generate full symbol information for PST and CU, whose DIEs have
123 already been loaded into memory. */
125 @@ -4113,7 +4194,7 @@ process_full_comp_unit (struct dwarf2_pe
126 struct objfile *objfile = per_cu->objfile;
127 CORE_ADDR lowpc, highpc;
128 struct symtab *symtab;
129 - struct cleanup *back_to;
130 + struct cleanup *back_to, *delayed_list_cleanup;
133 baseaddr = ANOFFSET (objfile->section_offsets, SECT_OFF_TEXT (objfile));
134 @@ -4123,11 +4204,22 @@ process_full_comp_unit (struct dwarf2_pe
136 cu->list_in_scope = &file_symbols;
138 + /* If methods were found in the partial symbol table, we allocate one
139 + big buffer to hold the entire delayed list for the CU. */
140 + delayed_list_cleanup = make_cleanup (method_list_cleanup,
143 dwarf2_find_base_address (cu->dies, cu);
145 /* Do line number decoding in read_file_scope () */
146 process_die (cu->dies, cu);
148 + /* Now that we have processed all the DIEs in the CU, all the types
149 + should be complete, and it should now be safe to compute all of the
151 + compute_delayed_physnames (cu);
152 + do_cleanups (delayed_list_cleanup);
154 /* Some compilers don't define a DW_AT_high_pc attribute for the
155 compilation unit. If the DW_AT_high_pc is missing, synthesize
156 it, by scanning the DIE's below the compilation unit. */
157 @@ -5838,7 +5930,6 @@ dwarf2_add_member_fn (struct field_info
159 struct fn_field *fnp;
162 struct nextfnfield *new_fnfield;
163 struct type *this_type;
165 @@ -5850,9 +5941,6 @@ dwarf2_add_member_fn (struct field_info
166 if (fieldname == NULL)
169 - /* Get the mangled name. */
170 - physname = (char *) dwarf2_physname (fieldname, die, cu);
172 /* Look up member function name in fieldlist. */
173 for (i = 0; i < fip->nfnfields; i++)
175 @@ -5878,7 +5966,7 @@ dwarf2_add_member_fn (struct field_info
176 flp->name = fieldname;
180 + i = fip->nfnfields++;
183 /* Create a new member function field and chain it to the field list
184 @@ -5892,9 +5980,19 @@ dwarf2_add_member_fn (struct field_info
186 /* Fill in the member function field info. */
187 fnp = &new_fnfield->fnfield;
188 - /* The name is already allocated along with this objfile, so we don't
189 - need to duplicate it for the type. */
190 - fnp->physname = physname ? physname : "";
192 + /* Delay processing of the physname until later. */
193 + if (cu->language == language_cplus || cu->language == language_java)
195 + add_to_method_list (type, i, flp->length - 1, fieldname,
200 + char *physname = (char *) dwarf2_physname (fieldname, die, cu);
201 + fnp->physname = physname ? physname : "";
204 fnp->type = alloc_type (objfile);
205 this_type = read_type_die (die, cu);
206 if (this_type && TYPE_CODE (this_type) == TYPE_CODE_FUNC)
207 @@ -5920,7 +6018,7 @@ dwarf2_add_member_fn (struct field_info
210 complaint (&symfile_complaints, _("member function type missing for '%s'"),
212 + dwarf2_full_name (fieldname, die, cu));
214 /* Get fcontext from DW_AT_containing_type if present. */
215 if (dwarf2_attr (die, DW_AT_containing_type, cu) != NULL)
216 @@ -8299,7 +8397,9 @@ load_partial_dies (bfd *abfd, gdb_byte *
217 || last_die->tag == DW_TAG_interface_type
218 || last_die->tag == DW_TAG_structure_type
219 || last_die->tag == DW_TAG_union_type))
220 - || (cu->language == language_ada
221 + || ((cu->language == language_ada
222 + || cu->language == language_cplus
223 + || cu->language == language_java)
224 && (last_die->tag == DW_TAG_subprogram
225 || last_die->tag == DW_TAG_lexical_block))))
227 Index: gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.S
228 ===================================================================
229 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
230 +++ gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.S 2010-07-22 11:59:29.000000000 +0200
232 +/* Copyright 2010 Free Software Foundation, Inc.
234 + This program is free software; you can redistribute it and/or modify
235 + it under the terms of the GNU General Public License as published by
236 + the Free Software Foundation; either version 3 of the License, or
237 + (at your option) any later version.
239 + This program is distributed in the hope that it will be useful,
240 + but WITHOUT ANY WARRANTY; without even the implied warranty of
241 + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
242 + GNU General Public License for more details.
244 + You should have received a copy of the GNU General Public License
245 + along with this program. If not, see <http://www.gnu.org/licenses/>. */
254 + typedef void (*t) (C);
271 + .section .debug_info
273 + .long .Ldebug_info_end - 1f /* Length of CU info */
275 + .2byte 0x2 /* DWARF version number */
276 + .long .Ldebug_abbrev0 /* Abbrev offset */
277 + .byte 0x4 /* Pointer size */
278 +dieb: .uleb128 0x1 /* DW_TAG_compile_unit */
279 + .long .LASF4 /* DW_AT_producer */
280 + .byte 0x4 /* DW_AT_language */
281 + .long .LASF5 /* DW_AT_name */
282 + .long .LASF6 /* DW_AT_comp_dir */
283 + .long 0x0 /* DW_AT_low_pc */
284 + .long 0x0 /* DW_AT_high_pc */
285 + .long 0x0 /* DW_AT_entry_pc */
286 +die29: .uleb128 0x2 /* DW_TAG_namespace */
287 + .string "N" /* DW_AT_name */
288 +die32: .uleb128 0x3 /* DW_TAG_class_type */
289 + .string "C" /* DW_AT_name */
290 + .byte 0x1 /* DW_AT_declaration */
291 +die36: .uleb128 0x4 /* DW_TAG_typedef */
292 + .string "u" /* DW_AT_name */
293 + .long die7e-d /* DW_AT_type */
294 +die3f: .uleb128 0x5 /* DW_TAG_variable */
295 + .string "f" /* DW_AT_name */
296 + .long .LASF0 /* DW_AT_MIPS_linkage_name */
297 + .long die36-d /* DW_AT_type */
298 + .byte 0x1 /* DW_AT_external */
299 + .byte 0x1 /* DW_AT_declaration */
300 +die4e: .uleb128 0x5 /* DW_TAG_variable */
301 + .string "c" /* DW_AT_name */
302 + .long .LASF1 /* DW_AT_MIPS_linkage_name */
303 + .long die5e-d /* DW_AT_type */
304 + .byte 0x1 /* DW_AT_external */
305 + .byte 0x1 /* DW_AT_declaration */
307 +die5e: .uleb128 0x6 /* DW_TAG_class_type */
308 + .long die32-d /* DW_AT_specification */
309 + .byte 0x1 /* DW_AT_byte_size */
310 +die6a: .uleb128 0x7 /* DW_TAG_subprogram */
311 + .byte 0x1 /* DW_AT_external */
312 + .string "C" /* DW_AT_name */
313 + .byte 0x1 /* DW_AT_declaration */
314 +die71: .uleb128 0x8 /* DW_TAG_formal_parameter */
315 + .long die8f-d /* DW_AT_type */
316 + .byte 0x1 /* DW_AT_artificial */
317 +die77: .uleb128 0x9 /* DW_TAG_formal_parameter */
318 + .long die7e-d /* DW_AT_type */
321 +die7e: .uleb128 0xa /* DW_TAG_pointer_type */
322 + .byte 0x4 /* DW_AT_byte_size */
323 + .long die84-d /* DW_AT_type */
324 +die84: .uleb128 0xb /* DW_TAG_subroutine_type */
325 +die89: .uleb128 0x9 /* DW_TAG_formal_parameter */
326 + .long die5e-d /* DW_AT_type */
328 +die8f: .uleb128 0xa /* DW_TAG_pointer_type */
329 + .byte 0x4 /* DW_AT_byte_size */
330 + .long die5e-d /* DW_AT_type */
331 +die95: .uleb128 0xc /* DW_TAG_subprogram */
332 + .long die6a-d /* DW_AT_specification */
333 + .byte 0x2 /* DW_AT_inline */
334 +die9f: .uleb128 0xd /* DW_TAG_formal_parameter */
335 + .long .LASF7 /* DW_AT_name */
336 + .long dieaf-d /* DW_AT_type */
337 + .byte 0x1 /* DW_AT_artificial */
338 +diea9: .uleb128 0x9 /* DW_TAG_formal_parameter */
339 + .long die7e-d /* DW_AT_type */
341 +dieaf: .uleb128 0xe /* DW_TAG_const_type */
342 + .long die8f-d /* DW_AT_type */
343 +dieb4: .uleb128 0xf /* DW_TAG_subprogram */
344 + .long die95-d /* DW_AT_abstract_origin */
345 + .long _ZN1N1cE /* DW_AT_low_pc */
346 + .long _ZN1N1cE /* DW_AT_high_pc */
347 +diec9: .uleb128 0x10 /* DW_TAG_subprogram */
348 + .long die9f-d /* DW_AT_abstract_origin */
349 + .byte 2f-1f /* DW_AT_location */
351 + .byte 0x50 /* DW_OP_reg0 */
353 +died1: .uleb128 0x10 /* DW_TAG_formal_parameter */
354 + .long diea9-d /* DW_AT_abstract_origin */
355 + .byte 2f-1f /* DW_AT_location */
357 + .byte 0x51 /* DW_OP_reg1 */
360 +dieda: .uleb128 0x11 /* DW_TAG_subprogram */
361 + .byte 0x1 /* DW_AT_external */
362 + .long .LASF8 /* DW_AT_name */
363 + .long dief2-d /* DW_AT_type */
364 + .long _ZN1N1cE /* DW_AT_low_pc */
365 + .long _ZN1N1cE /* DW_AT_high_pc */
366 +dief2: .uleb128 0x12 /* DW_TAG_base_type */
367 + .byte 0x4 /* DW_AT_byte_size */
368 + .byte 0x5 /* DW_AT_encoding */
369 + .string "int" /* DW_AT_name */
370 +die149: .uleb128 0x16 /* DW_TAG_variable */
371 + .long die4e-d /* DW_AT_specification */
372 + .byte 0x5 /* DW_AT_location */
377 + .section .debug_abbrev
379 + .uleb128 0x1 /* abbrev code*/
380 + .uleb128 0x11 /* DW_TAG_compile_unit */
381 + .byte 0x1 /* DW_children_yes */
382 + .uleb128 0x25 /* DW_AT_producer*/
383 + .uleb128 0xe /* DW_FORM_strp */
384 + .uleb128 0x13 /* DW_AT_language */
385 + .uleb128 0xb /* DW_FORM_data1 */
386 + .uleb128 0x3 /* DW_AT_name */
387 + .uleb128 0xe /* DW_FORM_strp */
388 + .uleb128 0x1b /* DW_AT_comp_dir */
389 + .uleb128 0xe /* DW_FORM_strp */
390 + .uleb128 0x11 /* DW_AT_low_pc */
391 + .uleb128 0x1 /* DW_FORM_addr */
392 + .uleb128 0x12 /* DW_AT_high_pc */
393 + .uleb128 0x1 /* DW_FORM_addr */
394 + .uleb128 0x52 /* DW_AT_entry_pc */
395 + .uleb128 0x1 /* DW_FORM_addr */
398 + .uleb128 0x2 /* abbrev code */
399 + .uleb128 0x39 /* DW_TAG_namespace */
400 + .byte 0x1 /* DW_children_yes */
401 + .uleb128 0x3 /* DW_AT_name */
402 + .uleb128 0x8 /* DW_FORM_string */
405 + .uleb128 0x3 /* abbrev code */
406 + .uleb128 0x2 /* DW_TAG_class_type */
407 + .byte 0x0 /* DW_has_children_no */
408 + .uleb128 0x3 /* DW_AT_name */
409 + .uleb128 0x8 /* DW_FORM_string */
410 + .uleb128 0x3c /* DW_AT_declaration */
411 + .uleb128 0xc /* DW_FORM_flag */
414 + .uleb128 0x4 /* abbrev code */
415 + .uleb128 0x16 /* DW_TAG_typedef */
416 + .byte 0x0 /* DW_has_children_no */
417 + .uleb128 0x3 /* DW_AT_name */
418 + .uleb128 0x8 /* DW_FORM_string */
419 + .uleb128 0x49 /* DW_AT_type */
420 + .uleb128 0x13 /* DW_FORM_ref4 */
423 + .uleb128 0x5 /* abbrev code */
424 + .uleb128 0x34 /* DW_TAG_variable */
425 + .byte 0x0 /* DW_has_children_no */
426 + .uleb128 0x3 /* DW_AT_name */
427 + .uleb128 0x8 /* DW_FORM_string */
428 + .uleb128 0x2007 /* DW_AT_MIPS_linkage_name */
429 + .uleb128 0xe /* DW_FORM_strp */
430 + .uleb128 0x49 /* DW_AT_TYPE */
431 + .uleb128 0x13 /* DW_FORM_ref4 */
432 + .uleb128 0x3f /* DW_AT_external */
433 + .uleb128 0xc /* DW_FORM_flag */
434 + .uleb128 0x3c /* DW_AT_declaration */
435 + .uleb128 0xc /* DW_FORM_flag */
438 + .uleb128 0x6 /* abbrev code */
439 + .uleb128 0x2 /* DW_TAG_class_type */
440 + .byte 0x1 /* DW_has_children_yes */
441 + .uleb128 0x47 /* DW_AT_specification */
442 + .uleb128 0x13 /* DW_FORM_ref4 */
443 + .uleb128 0xb /* DW_AT_byte_size */
444 + .uleb128 0xb /* DW_FORM_data1 */
447 + .uleb128 0x7 /* abbrev code */
448 + .uleb128 0x2e /* DW_TAG_subprogra */
449 + .byte 0x1 /* DW_has_children_yes */
450 + .uleb128 0x3f /* DW_AT_external */
451 + .uleb128 0xc /* DW_FORM_flag */
452 + .uleb128 0x3 /* DW_AT_name */
453 + .uleb128 0x8 /* DW_FORM_string */
454 + .uleb128 0x3c /* DW_AT_declaration */
455 + .uleb128 0xc /* DW_FORM_flag */
458 + .uleb128 0x8 /* abbrev code */
459 + .uleb128 0x5 /* DW_TAG_formal_parameter */
460 + .byte 0x0 /* DW_has_children_no */
461 + .uleb128 0x49 /* DW_AT_type */
462 + .uleb128 0x13 /* DW_FORM_ref4 */
463 + .uleb128 0x34 /* DW_AT_artificial */
464 + .uleb128 0xc /* DW_FORM_flag */
467 + .uleb128 0x9 /* abbrev code */
468 + .uleb128 0x5 /* DW_TAG_formal_parameter */
469 + .byte 0x0 /* DW_has_children_no */
470 + .uleb128 0x49 /* DW_AT_type */
471 + .uleb128 0x13 /* DW_FORM_ref4 */
474 + .uleb128 0xa /* abbrev code */
475 + .uleb128 0xf /* DW_TAG_pointer_type */
476 + .byte 0x0 /* DW_has_children_no */
477 + .uleb128 0xb /* DW_AT_byte_size */
478 + .uleb128 0xb /* DW_FORM_data1 */
479 + .uleb128 0x49 /* DW_AT_type */
480 + .uleb128 0x13 /* DW_FORM_ref4 */
483 + .uleb128 0xb /* abbrev code */
484 + .uleb128 0x15 /* DW_TAG_subroutine_type */
485 + .byte 0x1 /* DW_has_children_yes */
488 + .uleb128 0xc /* abbrev code */
489 + .uleb128 0x2e /* DW_TAG_subprogram */
490 + .byte 0x1 /* DW_has_children_yes */
491 + .uleb128 0x47 /* DW_AT_specification */
492 + .uleb128 0x13 /* DW_FORM_ref4 */
493 + .uleb128 0x20 /* DW_AT_inline */
494 + .uleb128 0xb /* DW_FORM_data1 */
497 + .uleb128 0xd /* abbrev code */
498 + .uleb128 0x5 /* DW_TAG_formal_parameter */
499 + .byte 0x0 /* DW_has_children_no */
500 + .uleb128 0x3 /* DW_AT_name */
501 + .uleb128 0xe /* DW_FORM_strp */
502 + .uleb128 0x49 /* DW_AT_type */
503 + .uleb128 0x13 /* DW_FORM_ref4 */
504 + .uleb128 0x34 /* DW_AT_artificial */
505 + .uleb128 0xc /* DW_FORM_flag */
508 + .uleb128 0xe /* abbrev code */
509 + .uleb128 0x26 /* DW_TAG_const_type */
510 + .byte 0x0 /* DW_has_children_no */
511 + .uleb128 0x49 /* DW_AT_type */
512 + .uleb128 0x13 /* DW_FORM_ref4 */
515 + .uleb128 0xf /* abbrev code */
516 + .uleb128 0x2e /* DW_TAG_subprogram */
517 + .byte 0x1 /* DW_has_children_yes */
518 + .uleb128 0x31 /* DW_AT_abstract_origin */
519 + .uleb128 0x13 /* DW_FORM_ref4 */
520 + .uleb128 0x11 /* DW_AT_low_pc */
521 + .uleb128 0x1 /* DW_FORM_addr */
522 + .uleb128 0x12 /* DW_AT_high_pc */
523 + .uleb128 0x1 /* DW_FORM_addr */
526 + .uleb128 0x10 /* abbrev code */
527 + .uleb128 0x5 /* DW_TAG_formal_parameter */
528 + .byte 0x0 /* DW_has_children_no */
529 + .uleb128 0x31 /* DW_AT_abstract_origin */
530 + .uleb128 0x13 /* DW_FORM_ref4 */
531 + .uleb128 0x2 /* DW_AT_location */
532 + .uleb128 0xa /* DW_FORM_block1 */
535 + .uleb128 0x11 /* abbrev code */
536 + .uleb128 0x2e /* DW_TAG_subprogram */
537 + .byte 0x0 /* DW_has_children_no */
538 + .uleb128 0x3f /* DW_AT_external */
539 + .uleb128 0xc /* DW_FORM_flag */
540 + .uleb128 0x3 /* DW_AT_name */
541 + .uleb128 0xe /* DW_FORM_strp */
542 + .uleb128 0x49 /* DW_AT_type */
543 + .uleb128 0x13 /* DW_FORM_ref4 */
544 + .uleb128 0x11 /* DW_AT_low_pc */
545 + .uleb128 0x1 /* DW_FORM_addr */
546 + .uleb128 0x12 /* DW_AT_high_pc */
547 + .uleb128 0x1 /* DW_FORM_addr */
550 + .uleb128 0x12 /* abbrev code */
551 + .uleb128 0x24 /* DW_TAG_base_type */
552 + .byte 0x0 /* DW_has_children_no */
553 + .uleb128 0xb /* DW_AT_byte_size */
554 + .uleb128 0xb /* DW_FORM_data1 */
555 + .uleb128 0x3e /* DW_AT_encoding */
556 + .uleb128 0xb /* DW_FORM_data1 */
557 + .uleb128 0x3 /* DW_AT_name */
558 + .uleb128 0x8 /* DW_FORM_string */
561 + .uleb128 0x16 /* abbrev code */
562 + .uleb128 0x34 /* DW_TAG_variable */
563 + .byte 0x0 /* DW_has_children_no */
564 + .uleb128 0x47 /* DW_AT_specification */
565 + .uleb128 0x13 /* DW_FORM_ref4 */
566 + .uleb128 0x2 /* DW_AT_location */
567 + .uleb128 0xa /* DW_FORM_block1 */
571 + .section .debug_str
583 + .string "pr11465.cc"
585 + .string "GNU C++ 4.4.2"
586 + .ident "GCC: (GNU) 4.4.2"
587 Index: gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.exp
588 ===================================================================
589 --- /dev/null 1970-01-01 00:00:00.000000000 +0000
590 +++ gdb-7.1.90.20100721/gdb/testsuite/gdb.dwarf2/pr11465.exp 2010-07-22 11:59:29.000000000 +0200
592 +# Copyright 2010 Free Software Foundation, Inc.
594 +# This program is free software; you can redistribute it and/or modify
595 +# it under the terms of the GNU General Public License as published by
596 +# the Free Software Foundation; either version 3 of the License, or
597 +# (at your option) any later version.
599 +# This program is distributed in the hope that it will be useful,
600 +# but WITHOUT ANY WARRANTY; without even the implied warranty of
601 +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
602 +# GNU General Public License for more details.
604 +# You should have received a copy of the GNU General Public License
605 +# along with this program. If not, see <http://www.gnu.org/licenses/>.
607 +# This test can only be run on targets which support DWARF-2 and use gas.
608 +# For now pick a sampling of likely targets.
609 +if {![istarget *-*-linux*]
610 + && ![istarget *-*-gnu*]
611 + && ![istarget *-*-elf*]
612 + && ![istarget *-*-openbsd*]
613 + && ![istarget arm-*-eabi*]
614 + && ![istarget powerpc-*-eabi*]} {
618 +set testfile "pr11465"
619 +set srcfile ${testfile}.S
620 +set executable ${testfile}.x
621 +set binfile ${objdir}/${subdir}/${executable}
623 +if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {}] != "" } {
627 +clean_restart $executable
629 +# Test delayed physname computations
630 +gdb_test "p N::c.C" { = {void \(N::C \*, void \(\*\)\(N::C\)\)}.*}