From: Jim Kingdon Date: Mon, 2 Aug 1993 19:21:04 +0000 (+0000) Subject: * gdbtypes.c (fill_in_vptr_fieldno): Call check_stub_type. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=ac88287fa27d888ae298e08d2572bc966887d8e0;p=binutils-gdb.git * gdbtypes.c (fill_in_vptr_fieldno): Call check_stub_type. * gdbtypes.{c,h}: Improve comments on vptr_fieldno. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 73cafffa336..bf86119d397 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +Mon Aug 2 12:06:00 1993 Jim Kingdon (kingdon@lioth.cygnus.com) + + * gdbtypes.c (fill_in_vptr_fieldno): Call check_stub_type. + * gdbtypes.{c,h}: Improve comments on vptr_fieldno. + Mon Aug 2 11:58:52 1993 Fred Fish (fnf@deneb.cygnus.com) * README: Elaborate on gdb C++ support and cfront support. diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c index 3710f39fd42..bc7e2576ac5 100644 --- a/gdb/gdbtypes.c +++ b/gdb/gdbtypes.c @@ -749,13 +749,19 @@ lookup_struct_elt_type (type, name, noerr) return (struct type *)-1; /* For lint */ } -/* This function is really horrible, but to avoid it, there would need - to be more filling in of forward references. */ +/* If possible, make the vptr_fieldno and vptr_basetype fields of TYPE + valid. Callers should be aware that in some cases (for example, + the type or one of its baseclasses is a stub type and we are + debugging a .o file), this function will not be able to find the virtual + function table pointer, and vptr_fieldno will remain -1 and vptr_basetype + will remain NULL. */ void fill_in_vptr_fieldno (type) struct type *type; { + check_stub_type (type); + if (TYPE_VPTR_FIELDNO (type) < 0) { int i; diff --git a/gdb/gdbtypes.h b/gdb/gdbtypes.h index 679d5696983..8ccf37af99d 100644 --- a/gdb/gdbtypes.h +++ b/gdb/gdbtypes.h @@ -255,8 +255,7 @@ struct type } *fields; /* For types with virtual functions, VPTR_BASETYPE is the base class which - defined the virtual function table pointer. VPTR_FIELDNO is - the field number of that pointer in the structure. + defined the virtual function table pointer. For types that are pointer to member types, VPTR_BASETYPE is the type that this pointer is a member of. @@ -265,6 +264,13 @@ struct type struct type *vptr_basetype; + /* Field number of the virtual function table pointer in + VPTR_BASETYPE. If -1, we were unable to find the virtual + function table pointer in initial symbol reading, and + fill_in_vptr_fieldno should be called to find it if possible. + + Unused if this type does not have virtual functions. */ + int vptr_fieldno; /* Slot to point to additional language-specific fields of this type. */