Index: gdb-6.8.50.20090811/gdb/dwarf2read.c =================================================================== --- gdb-6.8.50.20090811.orig/gdb/dwarf2read.c 2009-08-13 10:14:45.000000000 +0200 +++ gdb-6.8.50.20090811/gdb/dwarf2read.c 2009-08-13 10:22:36.000000000 +0200 @@ -2480,6 +2480,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) @@ -2675,6 +2676,7 @@ add_partial_symbol (struct partial_die_i } break; case DW_TAG_variable: + case DW_TAG_constant: if (pdi->is_external) { /* Global Variable. @@ -2805,6 +2807,7 @@ die_needs_namespace (struct die_info *di return 1; case DW_TAG_variable: + case DW_TAG_constant: { struct attribute *attr; attr = dwarf2_attr (die, DW_AT_specification, cu); @@ -4741,7 +4744,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. */ @@ -5233,7 +5237,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 @@ -5352,6 +5357,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. */ @@ -6980,6 +6986,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_module && abbrev->tag != DW_TAG_member) @@ -7088,6 +7095,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) { @@ -8901,6 +8909,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