* ieee.c (ieee_define_named_type): When creating a tag for an
authorIan Lance Taylor <ian@airs.com>
Wed, 24 Jan 1996 21:10:55 +0000 (21:10 +0000)
committerIan Lance Taylor <ian@airs.com>
Wed, 24 Jan 1996 21:10:55 +0000 (21:10 +0000)
anonymous struct, copy the name into memory.
(ieee_tag_type): Likewise.
* debug.c (debug_write_type): Only check and set id field for an
unnamed object.
(debug_write_class_type): Likewise.

binutils/ChangeLog
binutils/debug.c
binutils/ieee.c

index 286485978ab0ec607067f13ecf01238168013725..752964946a8817bab3075af88bd3af6ab39bc3d0 100644 (file)
@@ -1,5 +1,12 @@
 Wed Jan 24 12:06:05 1996  Ian Lance Taylor  <ian@cygnus.com>
 
+       * ieee.c (ieee_define_named_type): When creating a tag for an
+       anonymous struct, copy the name into memory.
+       (ieee_tag_type): Likewise.
+       * debug.c (debug_write_type): Only check and set id field for an
+       unnamed object.
+       (debug_write_class_type): Likewise.
+
        * ieee.c: Various changes to write out types for functions and
        references, and to not write out unnecessary function types.
 
index 845658f017c2a738a70871564fa279b38ede17b4..76bccc46df42c947d01edb0731d88d4c0ecdc63e 100644 (file)
@@ -2576,7 +2576,7 @@ debug_write_type (info, fns, fhandle, type, name)
       if (type->u.kclass != NULL)
        {
          if (info->class_mark == type->u.kclass->mark
-             || type->u.kclass->id > info->base_id)
+             || (tag == NULL && type->u.kclass->id > info->base_id))
            {
              /* We are currently outputting this struct, or we have
                 already output it.  I don't know if this can happen,
@@ -2586,8 +2586,11 @@ debug_write_type (info, fns, fhandle, type, name)
                                       type->kind);
            }
          type->u.kclass->mark = info->class_mark;
-         ++info->class_id;
-         type->u.kclass->id = info->class_id;
+         if (tag == NULL)
+           {
+             ++info->class_id;
+             type->u.kclass->id = info->class_id;
+           }
        }
 
       if (! (*fns->start_struct_type) (fhandle, tag,
@@ -2748,7 +2751,7 @@ debug_write_class_type (info, fns, fhandle, type, tag)
   else
     {
       if (info->class_mark == type->u.kclass->mark
-         || type->u.kclass->id > info->base_id)
+         || (tag == NULL && type->u.kclass->id > info->base_id))
        {
          /* We are currently outputting this class, or we have
             already output it.  This can happen when there are
@@ -2758,9 +2761,12 @@ debug_write_class_type (info, fns, fhandle, type, tag)
                                   type->kind);
        }
       type->u.kclass->mark = info->class_mark;
-      ++info->class_id;
-      id = info->class_id;
-      type->u.kclass->id = id;
+      if (tag == NULL)
+       {
+         ++info->class_id;
+         type->u.kclass->id = info->class_id;
+       }
+      id = type->u.kclass->id;
 
       vptrbase = type->u.kclass->vptrbase;
       if (vptrbase != NULL && vptrbase != type)
index 6b409852fa372facf2b28a62e9099bd3628d9b60..953932029fcb894a1bfb05466af08bda7c677db8 100644 (file)
@@ -4190,6 +4190,8 @@ ieee_define_named_type (info, name, tagp, id, size, unsignedp, ppbuf)
        {
          nt = (struct ieee_name_type *) xmalloc (sizeof *nt);
          memset (nt, 0, sizeof *nt);
+         if (tag != name)
+           tag = xstrdup (ab);
          nt->name = tag;
          nt->next = info->tags;
          info->tags = nt;
@@ -5701,6 +5703,8 @@ ieee_tag_type (p, name, id, kind)
   nt = (struct ieee_name_type *) xmalloc (sizeof *nt);
   memset (nt, 0, sizeof *nt);
 
+  if (name == ab)
+    name = xstrdup (ab);
   nt->name = name;
   nt->type.indx = info->type_indx;
   ++info->type_indx;