I installed gdb 6.4 on my Debian x86 box and made the patch for gpc in it. To who may be interested, here it is :-)
--- gdb-6.4/gdb/dwarf2read.c 2005-11-03 21:58:31.000000000 -0500 +++ gdb-6.4.new/gdb/dwarf2read.c 2006-03-31 14:15:52.000000000 -0500 @@ -911,6 +911,8 @@
static void read_enumeration_type (struct die_info *, struct dwarf2_cu *);
+static void read_set_type (struct die_info *, struct dwarf2_cu *); + static void process_enumeration_scope (struct die_info *, struct dwarf2_cu *);
static struct type *dwarf_base_type (int, int, struct dwarf2_cu *); @@ -2648,6 +2650,9 @@ read_enumeration_type (die, cu); process_enumeration_scope (die, cu); break; + case DW_TAG_set_type: + read_set_type (die, cu); + break;
/* FIXME drow/2004-03-14: These initialize die->type, but do not create a symbol or process any children. Therefore it doesn't do anything @@ -4031,6 +4036,24 @@ return new_prefix; }
+static void +read_set_type (struct die_info * die, struct dwarf2_cu *cu) +{ + struct type *domain_type; + + /* Return if we've already decoded this type. */ + if (die->type) + { + return; + } + + domain_type = die_type (die, cu); + + die->type = create_set_type (NULL, domain_type); + +} + + /* Given a pointer to a die which begins an enumeration, process all the dies that define the members of the enumeration, and create the symbol for the enumeration type. @@ -6113,9 +6136,11 @@ case DW_LANG_Ada95: cu->language = language_ada; break; + case DW_LANG_Pascal83: + cu->language = language_pascal; + break; case DW_LANG_Cobol74: case DW_LANG_Cobol85: - case DW_LANG_Pascal83: case DW_LANG_Modula2: default: cu->language = language_minimal; @@ -6904,6 +6929,7 @@ case DW_TAG_structure_type: case DW_TAG_union_type: case DW_TAG_enumeration_type: + case DW_TAG_set_type: SYMBOL_CLASS (sym) = LOC_TYPEDEF; SYMBOL_DOMAIN (sym) = STRUCT_DOMAIN;
@@ -7225,6 +7251,9 @@ case DW_TAG_enumeration_type: read_enumeration_type (die, cu); break; + case DW_TAG_set_type: + read_set_type (die, cu); + break; case DW_TAG_subprogram: case DW_TAG_subroutine_type: read_subroutine_type (die, cu); @@ -7282,7 +7311,8 @@ struct die_info *parent;
if (cu->language != language_cplus - && cu->language != language_java) + && cu->language != language_java + && cu->language != language_pascal) return NULL;
parent = die->parent;