Index: gdb-6.8.50.20081128/gdb/dwarf2read.c =================================================================== --- gdb-6.8.50.20081128.orig/gdb/dwarf2read.c 2008-12-06 14:06:17.000000000 +0100 +++ gdb-6.8.50.20081128/gdb/dwarf2read.c 2008-12-06 21:53:09.000000000 +0100 @@ -1825,6 +1825,7 @@ scan_partial_symbols (struct partial_die add_partial_subprogram (pdi, lowpc, highpc, cu); break; case DW_TAG_variable: + case DW_TAG_constant: case DW_TAG_typedef: case DW_TAG_union_type: if (!pdi->is_declaration) @@ -2010,6 +2011,7 @@ add_partial_symbol (struct partial_die_i } break; case DW_TAG_variable: + case DW_TAG_constant: if (pdi->is_external) { /* Global Variable. @@ -2864,6 +2866,7 @@ dwarf2_full_name (struct die_info *die, if (!pdi_needs_namespace (die->tag) && die->tag != DW_TAG_subprogram && die->tag != DW_TAG_variable + && die->tag != DW_TAG_constant && die->tag != DW_TAG_member) return name; @@ -3704,7 +3707,8 @@ dwarf2_add_field (struct field_info *fip fip->non_public_fields = 1; } } - else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable) + else if (die->tag == DW_TAG_member || die->tag == DW_TAG_variable + || die->tag == DW_TAG_constant) { /* C++ static member. */ @@ -4182,7 +4186,8 @@ read_structure_type (struct die_info *di while (child_die && child_die->tag) { if (child_die->tag == DW_TAG_member - || child_die->tag == DW_TAG_variable) + || child_die->tag == DW_TAG_variable + || child_die->tag == DW_TAG_constant) { /* NOTE: carlton/2002-11-05: A C++ static data member should be a DW_TAG_member that is a declaration, but @@ -4301,6 +4306,7 @@ process_structure_scope (struct die_info { if (child_die->tag == DW_TAG_member || child_die->tag == DW_TAG_variable + || child_die->tag == DW_TAG_constant || child_die->tag == DW_TAG_inheritance) { /* Do nothing. */ @@ -5700,6 +5706,7 @@ load_partial_dies (bfd *abfd, gdb_byte * && abbrev->tag != DW_TAG_subprogram && abbrev->tag != DW_TAG_lexical_block && abbrev->tag != DW_TAG_variable + && abbrev->tag != DW_TAG_constant && abbrev->tag != DW_TAG_namespace && abbrev->tag != DW_TAG_member) { @@ -5807,6 +5814,7 @@ load_partial_dies (bfd *abfd, gdb_byte * if (load_all || abbrev->tag == DW_TAG_subprogram || abbrev->tag == DW_TAG_variable + || abbrev->tag == DW_TAG_constant || abbrev->tag == DW_TAG_namespace || part_die->is_declaration) { @@ -7593,6 +7601,11 @@ new_symbol (struct die_info *die, struct /* Do not add the symbol to any lists. It will be found via BLOCK_FUNCTION from the blockvector. */ break; + case DW_TAG_constant: + SYMBOL_TYPE (sym) = make_cv_type (1, + TYPE_VOLATILE (SYMBOL_TYPE (sym)), + SYMBOL_TYPE (sym), NULL); + /* PASSTHRU */ case DW_TAG_variable: /* Compilation with minimal debug info may result in variables with missing type entries. Change the misleading `void' type