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.
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));
/*
+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
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;