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;