Index: gdb-6.8.50.20090210/gdb/dwarf2read.c =================================================================== --- gdb-6.8.50.20090210.orig/gdb/dwarf2read.c 2009-02-11 01:25:45.000000000 +0100 +++ gdb-6.8.50.20090210/gdb/dwarf2read.c 2009-02-11 01:26:25.000000000 +0100 @@ -1845,6 +1845,7 @@ scan_partial_symbols (struct partial_die add_partial_subprogram (pdi, lowpc, highpc, need_pc, cu); break; case DW_TAG_variable: + case DW_TAG_constant: case DW_TAG_typedef: case DW_TAG_union_type: if (!pdi->is_declaration) @@ -2030,6 +2031,7 @@ add_partial_symbol (struct partial_die_i } break; case DW_TAG_variable: + case DW_TAG_constant: if (pdi->is_external) { /* Global Variable. @@ -2895,6 +2897,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; @@ -3735,7 +3738,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. */ @@ -4213,7 +4217,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 @@ -4332,6 +4337,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. */ @@ -5862,6 +5868,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) { @@ -5969,6 +5976,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) { @@ -7759,6 +7767,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