From: Ian Lance Taylor Date: Wed, 24 Jan 1996 21:10:55 +0000 (+0000) Subject: * ieee.c (ieee_define_named_type): When creating a tag for an X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=76e45938c3dbf2a25eb273bfcd3aa4961585dd5e;p=deliverable%2Fbinutils-gdb.git * 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. --- diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 286485978a..752964946a 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,5 +1,12 @@ Wed Jan 24 12:06:05 1996 Ian Lance Taylor + * 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. diff --git a/binutils/debug.c b/binutils/debug.c index 845658f017..76bccc46df 100644 --- a/binutils/debug.c +++ b/binutils/debug.c @@ -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) diff --git a/binutils/ieee.c b/binutils/ieee.c index 6b409852fa..953932029f 100644 --- a/binutils/ieee.c +++ b/binutils/ieee.c @@ -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;