* dwarfread.c (struct dieinfo): Add has_at_byte_size.

* dwarfread.c (struct_type):  In absence of AT_byte_size for
	bitfield, use size of object of member's type for the size of
	the anonymous object containing the bit field.
	* dwarfread.c (completedieinfo):  Set has_at_byte_size when
	an AT_byte_size attribute is seen.
	* mipsread.c (psymtab_to_symtab_1):  Fix misspelled cast to
	union aux_ext (was aux_ent).
	* i386-pinsn.c (print_insn):  Cast 2'nd arg to read_memory from
	unsigned char* to char*, for Lucid compiler.
	* i386-tdep.c (codestream_fill):  Fix cast of 2'nd arg to read_memory
	to be correct type (from unsigned char* to char*).
	* valprint.c (type_print_derivation_info):  Minor tweak to placement
	of commas in derived class printing.
	* xcoffread.c (builtin_type):  Fix misspelling in fatal message.
This commit is contained in:
Fred Fish 1992-08-09 06:14:59 +00:00
parent 1815e42cc3
commit 50055e94a1
4 changed files with 44 additions and 7 deletions

View File

@ -1,3 +1,21 @@
Sat Aug 8 23:12:22 1992 Fred Fish (fnf@cygnus.com)
* dwarfread.c (struct dieinfo): Add has_at_byte_size.
* dwarfread.c (struct_type): In absence of AT_byte_size for
bitfield, use size of object of member's type for the size of
the anonymous object containing the bit field.
* dwarfread.c (completedieinfo): Set has_at_byte_size when
an AT_byte_size attribute is seen.
* mipsread.c (psymtab_to_symtab_1): Fix misspelled cast to
union aux_ext (was aux_ent).
* i386-pinsn.c (print_insn): Cast 2'nd arg to read_memory from
unsigned char* to char*, for Lucid compiler.
* i386-tdep.c (codestream_fill): Fix cast of 2'nd arg to read_memory
to be correct type (from unsigned char* to char*).
* valprint.c (type_print_derivation_info): Minor tweak to placement
of commas in derived class printing.
* xcoffread.c (builtin_type): Fix misspelling in fatal message.
Fri Aug 7 11:18:23 1992 Steve Chamberlain (sac@thepub.cygnus.com) Fri Aug 7 11:18:23 1992 Steve Chamberlain (sac@thepub.cygnus.com)
* xm-go32.h: Define LSEEK_NOT_LINEAR * xm-go32.h: Define LSEEK_NOT_LINEAR

View File

@ -204,6 +204,7 @@ struct dieinfo {
char * at_prototyped; char * at_prototyped;
unsigned int has_at_low_pc:1; unsigned int has_at_low_pc:1;
unsigned int has_at_stmt_list:1; unsigned int has_at_stmt_list:1;
unsigned int has_at_byte_size:1;
unsigned int short_element_list:1; unsigned int short_element_list:1;
}; };
@ -807,6 +808,7 @@ struct_type (dip, thisdie, enddie, objfile)
char *tpart1; char *tpart1;
struct dieinfo mbr; struct dieinfo mbr;
char *nextdie; char *nextdie;
int anonymous_size;
if ((type = lookup_utype (dip -> die_ref)) == NULL) if ((type = lookup_utype (dip -> die_ref)) == NULL)
{ {
@ -841,10 +843,12 @@ struct_type (dip, thisdie, enddie, objfile)
TYPE_NAME (type) = obconcat (&objfile -> type_obstack, TYPE_NAME (type) = obconcat (&objfile -> type_obstack,
tpart1, " ", dip -> at_name); tpart1, " ", dip -> at_name);
} }
if (dip -> at_byte_size != 0) /* Use whatever size is known. Zero is a valid size. We might however
{ wish to check has_at_byte_size to make sure that some byte size was
TYPE_LENGTH (type) = dip -> at_byte_size; given explicitly, but DWARF doesn't specify that explicit sizes of
} zero have to present, so complaining about missing sizes should
probably not be the default. */
TYPE_LENGTH (type) = dip -> at_byte_size;
thisdie += dip -> die_length; thisdie += dip -> die_length;
while (thisdie < enddie) while (thisdie < enddie)
{ {
@ -892,8 +896,22 @@ struct_type (dip, thisdie, enddie, objfile)
itself. The result is the bit offset of the LSB of the field. */ itself. The result is the bit offset of the LSB of the field. */
if (mbr.at_bit_size > 0) if (mbr.at_bit_size > 0)
{ {
if (mbr.has_at_byte_size)
{
/* The size of the anonymous object containing the bit field
is explicit, so use the indicated size (in bytes). */
anonymous_size = mbr.at_byte_size;
}
else
{
/* The size of the anonymous object containing the bit field
matches the size of an object of the bit field's type.
DWARF allows at_byte_size to be left out in such cases,
as a debug information size optimization. */
anonymous_size = TYPE_LENGTH (list -> field.type);
}
list -> field.bitpos += list -> field.bitpos +=
mbr.at_byte_size * 8 - mbr.at_bit_offset - mbr.at_bit_size; anonymous_size * 8 - mbr.at_bit_offset - mbr.at_bit_size;
} }
#endif #endif
nfields++; nfields++;
@ -3224,6 +3242,7 @@ completedieinfo (dip, objfile)
case AT_byte_size: case AT_byte_size:
dip -> at_byte_size = target_to_host (diep, nbytes, GET_UNSIGNED, dip -> at_byte_size = target_to_host (diep, nbytes, GET_UNSIGNED,
objfile); objfile);
dip -> has_at_byte_size = 1;
break; break;
case AT_bit_size: case AT_bit_size:
dip -> at_bit_size = target_to_host (diep, nbytes, GET_UNSIGNED, dip -> at_bit_size = target_to_host (diep, nbytes, GET_UNSIGNED,

View File

@ -1890,7 +1890,7 @@ print_insn (memaddr, stream)
{ {
unsigned char buffer[MAXLEN]; unsigned char buffer[MAXLEN];
read_memory (memaddr, buffer, MAXLEN); read_memory (memaddr, (char *) buffer, MAXLEN);
return (i386dis ((int)memaddr, buffer, stream)); return (i386dis ((int)memaddr, buffer, stream));
} }

View File

@ -2383,6 +2383,6 @@ struct type *
builtin_type (ignore) builtin_type (ignore)
char **ignore; char **ignore;
{ {
fatal ("GDB internal eror: builtin_type called on non-RS/6000!"); fatal ("GDB internal error: builtin_type called on non-RS/6000!");
} }
#endif /* IBM6000_HOST */ #endif /* IBM6000_HOST */