static void
EXFUN(read_structure_scope,
- (struct dieinfo *dip AND char *thisdie AND char *enddie));
+ (struct dieinfo *dip AND char *thisdie AND char *enddie AND
+ struct objfile *objfile));
static struct type *
EXFUN(decode_array_element_type, (char *scan AND char *end));
static struct type *
EXFUN(struct_type,
- (struct dieinfo *dip AND char *thisdie AND char *enddie));
+ (struct dieinfo *dip AND char *thisdie AND char *enddie AND
+ struct objfile *objfile));
static struct type *
EXFUN(enum_type, (struct dieinfo *dip));
SYNOPSIS
static struct type *struct_type (struct dieinfo *dip, char *thisdie,
- char *enddie)
+ char *enddie, struct objfile *objfile)
DESCRIPTION
*/
static struct type *
-DEFUN(struct_type, (dip, thisdie, enddie),
+DEFUN(struct_type, (dip, thisdie, enddie, objfile),
struct dieinfo *dip AND
char *thisdie AND
- char *enddie)
+ char *enddie AND
+ struct objfile *objfile)
{
struct type *type;
struct nextfield {
char *tpart2;
char *tpart3;
struct dieinfo mbr;
+ char *nextdie;
if ((type = lookup_utype (dip -> dieref)) == NULL)
{
{
break;
}
+ else if (mbr.at_sibling != 0)
+ {
+ nextdie = dbbase + mbr.at_sibling - dbroff;
+ }
+ else
+ {
+ nextdie = thisdie + mbr.dielength;
+ }
switch (mbr.dietag)
{
case TAG_member:
nfields++;
break;
default:
- SQUAWK (("bad member of '%s'", TYPE_NAME (type)));
+ process_dies (thisdie, nextdie, objfile);
break;
}
- thisdie += mbr.dielength;
+ thisdie = nextdie;
}
/* Now create the vector of fields, and record how big it is. */
TYPE_NFIELDS (type) = nfields;
SYNOPSIS
static void read_structure_scope (struct dieinfo *dip,
- char *thisdie, char *enddie)
+ char *thisdie, char *enddie, struct objfile *objfile)
DESCRIPTION
*/
static void
-DEFUN(read_structure_scope, (dip, thisdie, enddie),
+DEFUN(read_structure_scope, (dip, thisdie, enddie, objfile),
struct dieinfo *dip AND
char *thisdie AND
- char *enddie)
+ char *enddie AND
+ struct objfile *objfile)
{
struct type *type;
struct symbol *sym;
- type = struct_type (dip, thisdie, enddie);
+ type = struct_type (dip, thisdie, enddie, objfile);
if ((sym = new_symbol (dip)) != NULL)
{
SYMBOL_TYPE (sym) = type;
SYNOPSIS
- static void process_dies (char *thisdie, char *enddie)
+ static void process_dies (char *thisdie, char *enddie,
+ struct objfile *objfile)
DESCRIPTION
break;
case TAG_structure_type:
case TAG_union_type:
- read_structure_scope (&di, thisdie, nextdie);
+ read_structure_scope (&di, thisdie, nextdie, objfile);
break;
case TAG_enumeration_type:
read_enumeration (&di, thisdie, nextdie);