From 50055e94a1d558f9f8edce1c07e90560d7161b76 Mon Sep 17 00:00:00 2001 From: Fred Fish Date: Sun, 9 Aug 1992 06:14:59 +0000 Subject: [PATCH] * 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. --- gdb/ChangeLog | 18 ++++++++++++++++++ gdb/dwarfread.c | 29 ++++++++++++++++++++++++----- gdb/i386-pinsn.c | 2 +- gdb/xcoffread.c | 2 +- 4 files changed, 44 insertions(+), 7 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 331ae339aec..9b49a9c6dbf 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -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) * xm-go32.h: Define LSEEK_NOT_LINEAR diff --git a/gdb/dwarfread.c b/gdb/dwarfread.c index fde32e64527..82ee4167cc1 100644 --- a/gdb/dwarfread.c +++ b/gdb/dwarfread.c @@ -204,6 +204,7 @@ struct dieinfo { char * at_prototyped; unsigned int has_at_low_pc:1; unsigned int has_at_stmt_list:1; + unsigned int has_at_byte_size:1; unsigned int short_element_list:1; }; @@ -807,6 +808,7 @@ struct_type (dip, thisdie, enddie, objfile) char *tpart1; struct dieinfo mbr; char *nextdie; + int anonymous_size; 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, tpart1, " ", dip -> at_name); } - if (dip -> at_byte_size != 0) - { - TYPE_LENGTH (type) = dip -> at_byte_size; - } + /* 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 + 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; 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. */ 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 += - 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 nfields++; @@ -3224,6 +3242,7 @@ completedieinfo (dip, objfile) case AT_byte_size: dip -> at_byte_size = target_to_host (diep, nbytes, GET_UNSIGNED, objfile); + dip -> has_at_byte_size = 1; break; case AT_bit_size: dip -> at_bit_size = target_to_host (diep, nbytes, GET_UNSIGNED, diff --git a/gdb/i386-pinsn.c b/gdb/i386-pinsn.c index c6ecaa6ecf1..bbc622f281d 100644 --- a/gdb/i386-pinsn.c +++ b/gdb/i386-pinsn.c @@ -1890,7 +1890,7 @@ print_insn (memaddr, stream) { unsigned char buffer[MAXLEN]; - read_memory (memaddr, buffer, MAXLEN); + read_memory (memaddr, (char *) buffer, MAXLEN); return (i386dis ((int)memaddr, buffer, stream)); } diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index fb1ccac9fe2..77197855e75 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -2383,6 +2383,6 @@ struct type * builtin_type (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 */ -- 2.30.2