diff options
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/mdebugread.c | 13 |
2 files changed, 21 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 3974196..420efb0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +Fri Jan 7 12:42:45 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de) + + * config/i386/tm-i386v.h, config/m68k/tm-m68k.h, config/mips/tm-mips.h, + config/vax/tm-vax.h (CALL_DUMMY_BREAKPOINT_OFFSET): Define. + * mdebugread.c (parse_symbol): Handle enum sh.type produced by + DEC c89. + * mdebugread.c (add_line): Handle zero linenos produced by DEC c89. + Fri Jan 7 12:55:25 1994 Jim Kingdon (kingdon@lioth.cygnus.com) * utils.c (print_sys_errmsg): Call gdb_flush (gdb_stdout) before diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index bbeb66d..c23dac0 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -1010,6 +1010,15 @@ parse_symbol (sh, ax, ext_sh, bigend) if (type_code == TYPE_CODE_ENUM) { /* This is a non-empty enum. */ + + /* c89 has the number of enumerators in the sh.value field, + not the type length, so we have to compensate for that + incompatibility quirk. + This might do the wrong thing for an enum with one or two + enumerators and gcc -gcoff -fshort-enums, but these cases + are hopefully rare enough. */ + if (TYPE_LENGTH (t) == TYPE_NFIELDS (t)) + TYPE_LENGTH (t) = TARGET_INT_BIT / HOST_CHAR_BIT; for (ext_tsym = ext_sh + external_sym_size; ; ext_tsym += external_sym_size) @@ -3222,6 +3231,10 @@ add_line (lt, lineno, adr, last) CORE_ADDR adr; int last; { + /* DEC c89 sometimes produces zero linenos which confuse gdb. + Change them to something sensible. */ + if (lineno == 0) + lineno = 1; if (last == 0) last = -2; /* make sure we record first line */ |