* dwarf2read.c (partial_die_info): Add field has_byte_size.

(add_partial_symbol): Correct identification of external references.
        (process_structure_scope): Likewise.
        (read_partial_die): Handle DW_AT_byte_size attribute.
This commit is contained in:
Joel Brobecker 2007-01-05 05:49:56 +00:00
parent 20414cabef
commit fa4028e955
2 changed files with 28 additions and 7 deletions

View file

@ -1,4 +1,11 @@
2007-01-04 Daniel Jacobowitz <dan@codesourcery.com> 2006-02-05 Joel Brobecker <brobecker@adacore.com>
* dwarf2read.c (partial_die_info): Add field has_byte_size.
(add_partial_symbol): Correct identification of external references.
(process_structure_scope): Likewise.
(read_partial_die): Handle DW_AT_byte_size attribute.
2007-01-05 Daniel Jacobowitz <dan@codesourcery.com>
* xml-support.c (gdb_xml_end_element): Remove wrong backslashes. * xml-support.c (gdb_xml_end_element): Remove wrong backslashes.

View file

@ -1,7 +1,7 @@
/* DWARF 2 debugging format support for GDB. /* DWARF 2 debugging format support for GDB.
Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
2002, 2003, 2004, 2005, 2006 2002, 2003, 2004, 2005, 2006, 2007
Free Software Foundation, Inc. Free Software Foundation, Inc.
Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology, Adapted by Gary Funck (gary@intrepid.com), Intrepid Technology,
@ -467,6 +467,9 @@ struct partial_die_info
computed. */ computed. */
unsigned int scope_set : 1; unsigned int scope_set : 1;
/* Flag set if the DIE has a byte_size attribute. */
unsigned int has_byte_size : 1;
/* The name of this DIE. Normally the value of DW_AT_name, but /* The name of this DIE. Normally the value of DW_AT_name, but
sometimes DW_TAG_MIPS_linkage_name or a string computed in some sometimes DW_TAG_MIPS_linkage_name or a string computed in some
other fashion. */ other fashion. */
@ -1979,12 +1982,16 @@ add_partial_symbol (struct partial_die_info *pdi, struct dwarf2_cu *cu)
case DW_TAG_structure_type: case DW_TAG_structure_type:
case DW_TAG_union_type: case DW_TAG_union_type:
case DW_TAG_enumeration_type: case DW_TAG_enumeration_type:
/* Skip aggregate types without children, these are external /* Skip external references. The DWARF standard says in the section
references. */ about "Structure, Union, and Class Type Entries": "An incomplete
structure, union or class type is represented by a structure,
union or class entry that does not have a byte size attribute
and that has a DW_AT_declaration attribute." */
if (!pdi->has_byte_size && pdi->is_declaration)
return;
/* NOTE: carlton/2003-10-07: See comment in new_symbol about /* NOTE: carlton/2003-10-07: See comment in new_symbol about
static vs. global. */ static vs. global. */
if (pdi->has_children == 0)
return;
add_psymbol_to_list (actual_name, strlen (actual_name), add_psymbol_to_list (actual_name, strlen (actual_name),
STRUCT_DOMAIN, LOC_TYPEDEF, STRUCT_DOMAIN, LOC_TYPEDEF,
(cu->language == language_cplus (cu->language == language_cplus
@ -4010,7 +4017,11 @@ process_structure_scope (struct die_info *die, struct dwarf2_cu *cu)
child_die = sibling_die (child_die); child_die = sibling_die (child_die);
} }
if (die->child != NULL && ! die_is_declaration (die, cu)) /* Do not consider external references. According to the DWARF standard,
these DIEs are identified by the fact that they have no byte_size
attribute, and a declaration attribute. */
if (dwarf2_attr (die, DW_AT_byte_size, cu) != NULL
|| !die_is_declaration (die, cu))
new_symbol (die, die->type, cu); new_symbol (die, die->type, cu);
processing_current_prefix = previous_prefix; processing_current_prefix = previous_prefix;
@ -5575,6 +5586,9 @@ read_partial_die (struct partial_die_info *part_die,
part_die->has_stmt_list = 1; part_die->has_stmt_list = 1;
part_die->line_offset = DW_UNSND (&attr); part_die->line_offset = DW_UNSND (&attr);
break; break;
case DW_AT_byte_size:
part_die->has_byte_size = 1;
break;
default: default:
break; break;
} }