2002-02-01 Daniel Jacobowitz <drow@mvista.com>
PR gdb/280 * gdbtypes.c (replace_type): New function. * gdbtypes.h (replace_type): Add prototype. * stabsread.c (read_type): Use replace_type.
This commit is contained in:
parent
88fe217c0b
commit
dd6bda650a
4 changed files with 42 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
|||
2002-02-03 Daniel Jacobowitz <drow@mvista.com>
|
||||
|
||||
PR gdb/280
|
||||
* gdbtypes.c (replace_type): New function.
|
||||
* gdbtypes.h (replace_type): Add prototype.
|
||||
* stabsread.c (read_type): Use replace_type.
|
||||
|
||||
2002-02-03 Richard Earnshaw <rearnsha@arm.com>
|
||||
|
||||
* Makefile.in (memattr.o): Add missing dependencies rule.
|
||||
|
|
|
@ -519,6 +519,32 @@ finish_cv_type (struct type *type)
|
|||
}
|
||||
}
|
||||
|
||||
/* Replace the contents of ntype with the type *type.
|
||||
|
||||
This function should not be necessary, but is due to quirks in the stabs
|
||||
reader. This should go away. It does not handle the replacement type
|
||||
being cv-qualified; it could be easily fixed to, but it should go away,
|
||||
remember? */
|
||||
void
|
||||
replace_type (struct type *ntype, struct type *type)
|
||||
{
|
||||
struct type *cv_chain, *as_chain, *ptr, *ref;
|
||||
|
||||
cv_chain = TYPE_CV_TYPE (ntype);
|
||||
as_chain = TYPE_AS_TYPE (ntype);
|
||||
ptr = TYPE_POINTER_TYPE (ntype);
|
||||
ref = TYPE_REFERENCE_TYPE (ntype);
|
||||
|
||||
*ntype = *type;
|
||||
|
||||
TYPE_POINTER_TYPE (ntype) = ptr;
|
||||
TYPE_REFERENCE_TYPE (ntype) = ref;
|
||||
TYPE_CV_TYPE (ntype) = cv_chain;
|
||||
TYPE_AS_TYPE (ntype) = as_chain;
|
||||
|
||||
finish_cv_type (ntype);
|
||||
}
|
||||
|
||||
/* Implement direct support for MEMBER_TYPE in GNU C++.
|
||||
May need to construct such a type if this is the first use.
|
||||
The TYPE is the type of the member. The DOMAIN is the type
|
||||
|
|
|
@ -1062,6 +1062,8 @@ extern struct type *make_cv_type (int, int, struct type *, struct type **);
|
|||
|
||||
extern void finish_cv_type (struct type *);
|
||||
|
||||
extern void replace_type (struct type *, struct type *);
|
||||
|
||||
extern int address_space_name_to_int (char *);
|
||||
|
||||
extern char *address_space_int_to_name (int);
|
||||
|
|
|
@ -2531,7 +2531,13 @@ again:
|
|||
}
|
||||
else if (type_size >= 0 || is_string)
|
||||
{
|
||||
*type = *xtype;
|
||||
/* This is the absolute wrong way to construct types. Every
|
||||
other debug format has found a way around this problem and
|
||||
the related problems with unnecessarily stubbed types;
|
||||
someone motivated should attempt to clean up the issue
|
||||
here as well. Once a type pointed to has been created it
|
||||
should not be modified. */
|
||||
replace_type (type, xtype);
|
||||
TYPE_NAME (type) = NULL;
|
||||
TYPE_TAG_NAME (type) = NULL;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue