* ch-lang.c (chill_create_fundamental_type): Track compiler
authorFred Fish <fnf@specifix.com>
Tue, 23 Feb 1993 19:30:22 +0000 (19:30 +0000)
committerFred Fish <fnf@specifix.com>
Tue, 23 Feb 1993 19:30:22 +0000 (19:30 +0000)
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.

gdb/ChangeLog
gdb/ch-lang.c
gdb/dwarfread.c

index 3cb822a6f584c3600d44a63afcac26c208110b6e..734394bb8f088583c9290bf2e70313843dd623b6 100644 (file)
@@ -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
index 78a20672b3dcff2338cbeda703678d0a0f4f7e90..6467647b04b188adc3b6c1be6c5a7743ce710985 100644 (file)
@@ -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:
index 688976a35d71b1935ea9d7f9c1e0902dee21a383..c5168007701a6b66b4d615d130238b6a28c84335 100644 (file)
@@ -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);
 }
 
 /*