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:
Fred Fish 1992-02-17 23:26:54 +00:00
parent 1584d0697d
commit 9e4c1921e5
2 changed files with 54 additions and 0 deletions

View File

@ -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.

View File

@ -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;