From: Fred Fish Date: Tue, 23 Feb 1993 19:30:22 +0000 (+0000) Subject: * ch-lang.c (chill_create_fundamental_type): Track compiler X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b6236d6ec4f9d7f02e363da16f24c4f1e5a58fea;p=binutils-gdb.git * ch-lang.c (chill_create_fundamental_type): Track compiler change that now emits debugging info with the type long for Chill longs. * dwarfread.c (read_tag_string_type): Rewrite to allow forward references of TAG_string_type DIEs in user defined types. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3cb822a6f58..734394bb8f0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +Tue Feb 23 11:21:33 1993 Fred Fish (fnf@cygnus.com) + + * ch-lang.c (chill_create_fundamental_type): Track compiler + change that now emits debugging info with the type long for Chill + longs. + * dwarfread.c (read_tag_string_type): Rewrite to allow forward + references of TAG_string_type DIEs in user defined types. + Mon Feb 22 15:21:54 1993 Ian Lance Taylor (ian@cygnus.com) * remote-mips.c: New file; implements MIPS remote debugging diff --git a/gdb/ch-lang.c b/gdb/ch-lang.c index 78a20672b3d..6467647b04b 100644 --- a/gdb/ch-lang.c +++ b/gdb/ch-lang.c @@ -223,10 +223,14 @@ chill_create_fundamental_type (objfile, typeid) case FT_UNSIGNED_SHORT: /* Chill ints are 2 bytes */ type = init_type (TYPE_CODE_INT, 2, TYPE_FLAG_UNSIGNED, "UINT", objfile); break; - case FT_INTEGER: /* Chill longs are 4 bytes */ + case FT_INTEGER: /* FIXME? */ + case FT_SIGNED_INTEGER: /* FIXME? */ + case FT_LONG: /* Chill longs are 4 bytes */ + case FT_SIGNED_LONG: /* Chill longs are 4 bytes */ type = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_SIGNED, "LONG", objfile); break; - case FT_UNSIGNED_INTEGER: /* Chill longs are 4 bytes */ + case FT_UNSIGNED_INTEGER: /* FIXME? */ + case FT_UNSIGNED_LONG: /* Chill longs are 4 bytes */ type = init_type (TYPE_CODE_INT, 4, TYPE_FLAG_UNSIGNED, "ULONG", objfile); break; case FT_FLOAT: diff --git a/gdb/dwarfread.c b/gdb/dwarfread.c index 688976a35d7..c5168007701 100644 --- a/gdb/dwarfread.c +++ b/gdb/dwarfread.c @@ -1553,30 +1553,39 @@ read_tag_string_type (dip) unsigned long lowbound = 0; unsigned long highbound; - if ((utype = lookup_utype (dip -> die_ref)) != NULL) + if (dip -> has_at_byte_size) { - /* Ack, someone has stuck a type in the slot we want. Complain - about it. */ - complain (&dup_user_type_definition, DIE_ID, DIE_NAME); + /* A fixed bounds string */ + highbound = dip -> at_byte_size - 1; } else { - if (dip -> has_at_byte_size) - { - /* A fixed bounds string */ - highbound = dip -> at_byte_size - 1; - } - else + /* A varying length string. Stub for now. (FIXME) */ + highbound = 1; + } + indextype = dwarf_fundamental_type (current_objfile, FT_INTEGER); + rangetype = create_range_type ((struct type *) NULL, indextype, lowbound, + highbound); + + utype = lookup_utype (dip -> die_ref); + if (utype == NULL) + { + /* No type defined, go ahead and create a blank one to use. */ + utype = alloc_utype (dip -> die_ref, (struct type *) NULL); + } + else + { + /* Already a type in our slot due to a forward reference. Make sure it + is a blank one. If not, complain and leave it alone. */ + if (TYPE_CODE (utype) != TYPE_CODE_UNDEF) { - /* A varying length string. Stub for now. (FIXME) */ - highbound = 1; + complain (&dup_user_type_definition, DIE_ID, DIE_NAME); + return; } - indextype = dwarf_fundamental_type (current_objfile, FT_INTEGER); - rangetype = create_range_type ((struct type *) NULL, indextype, - lowbound, highbound); - utype = create_string_type ((struct type *) NULL, rangetype); - alloc_utype (dip -> die_ref, utype); } + + /* Create the string type using the blank type we either found or created. */ + utype = create_string_type (utype, rangetype); } /*