Add code to handle TAG_pointer_type DIE's (DWARF Information Entries)
that are produced by the i486/SVR4 MetaWare compiler, but not by the AT&T or GCC compilers.
This commit is contained in:
parent
1584d0697d
commit
9e4c1921e5
@ -1,5 +1,8 @@
|
||||
Mon Feb 17 07:13:27 1992 Fred Fish (fnf at cygnus.com)
|
||||
|
||||
* dwarfread.c (process_dies): Add case to handle TAG_pointer_type
|
||||
DIE's. Add new function read_tag_pointer_type() to read them.
|
||||
|
||||
* dwarfread.c (dwarf_read_array_type, read_subroutine_type):
|
||||
When creating a new user defined type, check to see if a partial
|
||||
type already exists, and if so, bash it to fit.
|
||||
|
@ -330,6 +330,9 @@ EXFUN(decode_subscr_data, (char *scan AND char *end));
|
||||
static void
|
||||
EXFUN(dwarf_read_array_type, (struct dieinfo *dip));
|
||||
|
||||
static void
|
||||
EXFUN(read_tag_pointer_type, (struct dieinfo *dip));
|
||||
|
||||
static void
|
||||
EXFUN(read_subroutine_type,
|
||||
(struct dieinfo *dip AND char *thisdie AND char *enddie));
|
||||
@ -1207,6 +1210,51 @@ DEFUN(dwarf_read_array_type, (dip), struct dieinfo *dip)
|
||||
|
||||
/*
|
||||
|
||||
LOCAL FUNCTION
|
||||
|
||||
read_tag_pointer_type -- read TAG_pointer_type DIE
|
||||
|
||||
SYNOPSIS
|
||||
|
||||
static void read_tag_pointer_type (struct dieinfo *dip)
|
||||
|
||||
DESCRIPTION
|
||||
|
||||
Extract all information from a TAG_pointer_type DIE and add to
|
||||
the user defined type vector.
|
||||
*/
|
||||
|
||||
static void
|
||||
DEFUN(read_tag_pointer_type, (dip), struct dieinfo *dip)
|
||||
{
|
||||
struct type *type;
|
||||
struct type *utype;
|
||||
char *sub;
|
||||
char *subend;
|
||||
short temp;
|
||||
|
||||
type = decode_die_type (dip);
|
||||
if ((utype = lookup_utype (dip -> dieref)) == NULL)
|
||||
{
|
||||
utype = lookup_pointer_type (type);
|
||||
(void) alloc_utype (dip -> dieref, utype);
|
||||
}
|
||||
else
|
||||
{
|
||||
TYPE_TARGET_TYPE (utype) = type;
|
||||
TYPE_POINTER_TYPE (type) = utype;
|
||||
|
||||
/* We assume the machine has only one representation for pointers! */
|
||||
/* FIXME: This confuses host<->target data representations, and is a
|
||||
poor assumption besides. */
|
||||
|
||||
TYPE_LENGTH (utype) = sizeof (char *);
|
||||
TYPE_CODE (utype) = TYPE_CODE_PTR;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
LOCAL FUNCTION
|
||||
|
||||
read_subroutine_type -- process TAG_subroutine_type dies
|
||||
@ -1623,6 +1671,9 @@ DEFUN(process_dies, (thisdie, enddie, objfile),
|
||||
case TAG_array_type:
|
||||
dwarf_read_array_type (&di);
|
||||
break;
|
||||
case TAG_pointer_type:
|
||||
read_tag_pointer_type (&di);
|
||||
break;
|
||||
default:
|
||||
(void) new_symbol (&di);
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user