diff options
author | Per Bothner <per@bothner.com> | 1992-09-04 07:37:18 +0000 |
---|---|---|
committer | Per Bothner <per@bothner.com> | 1992-09-04 07:37:18 +0000 |
commit | 35fcebce93a949c589d0569e2b1111c1eb26bc2f (patch) | |
tree | 4bf217c00c7022660422bac10180344a14020b9d /gdb/ChangeLog | |
parent | d73812a1d62890a28f3be4054614e16690a1b029 (diff) | |
download | fsf-binutils-gdb-35fcebce93a949c589d0569e2b1111c1eb26bc2f.zip fsf-binutils-gdb-35fcebce93a949c589d0569e2b1111c1eb26bc2f.tar.gz fsf-binutils-gdb-35fcebce93a949c589d0569e2b1111c1eb26bc2f.tar.bz2 |
A ton of changes to improve C++ debugging. See ChangeLog.
Diffstat (limited to 'gdb/ChangeLog')
-rw-r--r-- | gdb/ChangeLog | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9c0446f..d903e3d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,86 @@ +Fri Sep 4 00:34:30 1992 Per Bothner (bothner@rtl.cygnus.com) + + A bunch of changes mostly to improve debugging of C++ programs. + Specifically, nested types are supported, and the calling + of inferiors methods is improved. + + * expression.h, c-exp.y: STRUCTOP_PTR and STRUCTOP_STRUCT + expression types now take an extra parameter that is used + for an (optional) type qualifier, as in: EXP.TYPE::NAME. + If there is no qualifier (as in EXP.NAME), the TYPE is NULL. + (Before, there was a cute but not-quote-valid re-write to + EXP.*(&TYPE::NAME .) + * parse.c (length_of_subexp, prefixify_subexp), expprint.c + (print_subexp), eval.c (evaluate_subexp): Handle the extra + operand of STRUCTOP_STRUCT and STRUCTOP_PTR. + + * value.h: New macros METHOD_PTR_IS_VIRTUAL, + METHOD_PTR_FROM_VOFFSET, METHOD_PTR_TO_VOFFSET to partially + hide the implementation details of pointer-to-method objects. + How to tell if the pointer points to a virtual method is + still very dependent on the particular compiler, but this + should make it easier to find the places to change. + * eval.c (evaluate_subexp [case OP_FUNCALL]), valprint.c + (val_print [case TYPE_CODE_PTR]): Use the new METHOD_PTR_* + macros, instead of a hard-wired-in code that incorrectly + assumed a no-longerused representation of pointer-to-method + values. And otherwise fix the relevant bit-rotted code. + + * valprint.c (type_print_base [case TYPE_CODE_STRUCT]): + If there are both fields and methods, put a space between. + + * gdbtypes.h: New macro TYPE_FIELD_NESTED. + * symtab.C, syntab.h: New function find_nested_type() + searches a class recursively for a nested type. + * c-exp.y: Support nested type syntax: TYPE1::TYPE2. + This required some nasty interactions between the lexer + and the parser (surprise, surprise), using the current_type + global variable (see comment above its declaration), + and the new function find_nested_type(). + * expprint.c (print_subexp), valprint.c (val_print_fields, + type_print_base [case TYPE_CODE_STRUCT]): Support nested types. + * stabsread.c (read_struct_type): Recognize types fields + nested in classes. + + * gdbtypes.c, symtab.h: New functions check_struct, + check_union, and check_enum (factored out from lookup_struct, + lookup_union, lookup_enum). + * c-exp.y: Support 'enum Foo::Bar' syntax as just the same + as 'Foo::Bar' followed by a call to check_enum. Similarly + for struct and union. + + * stabsread.c (read_struct_type): Fix bug in handling of + GNU C++ anonymous type (indicated by CPLUS_MARKER followed + by '_'). (It used to prematurely exit the loop reading in + the fields, so it would think it should start reading + methods while still in the fields. This could crash gdb + given a gcc that can emit nested type information.) + + * valops.c (search_struct_method): Pass 'this' value by + reference instead of by value. This provides a more + consistent interface through a recursive search where the + "bottom" functions may need to adjust offsets (due to multiple + inheritance). + * valops.c, value.h, values.c: Pass extra parameters to + value_fn_field and value_virtual_fn_field so we can + correctly adjust offset for multiple inheritance. + * eval.c (evaluate_subexp [case OP_FUNCALL]): Simplify + virtual function calls by using value_virtual_fn_field(). + * values.c: New function baseclass_offset, derived from + baseclass_addr (which perhaps can be made obsolete?). + It returns an offset rather than an address. This is a + cleaner interface since it doesn't mess around allocating + new values. + * valops.c (search_struct_method): Use baseclass_offset + rather than baseclass_addr. + + * symfile.h: Declaration of set_demangling_style() moved + here from demangle.h (which is now in ../include). + * i386-xdep.c: Update comment. + * utils.c (strcmp_iw): Add a hack to allow "FOO(ARGS)" to + match "FOO". This allows 'break Foo' to work when Foo is + a mangled C++ function. (See comment before function.) + Thu Sep 3 09:17:05 1992 Stu Grossman (grossman at cygnus.com) * a68v-xdep.c (store_inferior_registers): Define as type void. |