diff options
-rw-r--r-- | gdb/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/dwarfread.c | 32 |
2 files changed, 24 insertions, 14 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d0de7a8..7541ac3 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +Thu Nov 21 18:26:11 1991 Fred Fish (fnf at cygnus.com) + + * dwarfread.c (struct_type): Must initialize the c++ specific + portion of union types as well as struct types, since gdb attempts + to reference the c++ specific info for both types. + Thu Nov 21 10:23:52 1991 John Gilmore (gnu at cygnus.com) * defs.h: Incorporate param.h. All users changed. diff --git a/gdb/dwarfread.c b/gdb/dwarfread.c index 44e8ccf..fcc2f35 100644 --- a/gdb/dwarfread.c +++ b/gdb/dwarfread.c @@ -901,24 +901,28 @@ DEFUN(struct_type, (dip, thisdie, enddie), { type = alloc_utype (dip -> dieref, NULL); } - switch (dip -> dietag) + if (dip -> dietag == TAG_structure_type || dip -> dietag == TAG_union_type) + { + TYPE_CPLUS_SPECIFIC (type) = (struct cplus_struct_type *) + obstack_alloc (symbol_obstack, sizeof (struct cplus_struct_type)); + (void) memset (TYPE_CPLUS_SPECIFIC (type), 0, + sizeof (struct cplus_struct_type)); + if (dip -> dietag == TAG_structure_type) + { + TYPE_CODE (type) = TYPE_CODE_STRUCT; + tpart1 = "struct "; + } + else + { + TYPE_CODE (type) = TYPE_CODE_UNION; + tpart1 = "union "; + } + } + else { - case TAG_structure_type: - TYPE_CODE (type) = TYPE_CODE_STRUCT; - TYPE_CPLUS_SPECIFIC (type) - = (struct cplus_struct_type *) obstack_alloc (symbol_obstack, sizeof (struct cplus_struct_type)); - bzero (TYPE_CPLUS_SPECIFIC (type), sizeof (struct cplus_struct_type)); - tpart1 = "struct "; - break; - case TAG_union_type: - TYPE_CODE (type) = TYPE_CODE_UNION; - tpart1 = "union "; - break; - default: tpart1 = ""; SQUAWK (("missing structure or union tag")); TYPE_CODE (type) = TYPE_CODE_UNDEF; - break; } /* Some compilers try to be helpful by inventing "fake" names for anonymous enums, structures, and unions, like "~0fake". Thanks, but no thanks. */ |