#ifndef CP_ABI_H_
#define CP_ABI_H_ 1
+struct value;
+
/* The functions here that attempt to determine what sort of thing a
mangled name refers to may well be revised in the future. It would
certainly be cleaner to carry this information explicitly in GDB's
TYPE is the base type of *VALUEP whose method we're invoking ---
this is the type containing F. OFFSET is the offset of that base
type within *VALUEP. */
-extern value_ptr value_virtual_fn_field (value_ptr *valuep,
- struct fn_field *f, int j,
- struct type *type, int offset);
+extern struct value *value_virtual_fn_field (struct value **valuep,
+ struct fn_field *f, int j,
+ struct type *type, int offset);
/* Try to find the run-time type of VALUE, using C++ run-time type
extern struct type *value_rtti_type (struct value *value,
int *full, int *top, int *using_enc);
+/* Compute the offset of the baseclass which is
+ the INDEXth baseclass of class TYPE,
+ for value at VALADDR (in host) at ADDRESS (in target).
+ The result is the offset of the baseclass value relative
+ to (the address of)(ARG) + OFFSET.
+
+ -1 is returned on error. */
+extern int baseclass_offset (struct type *type, int index, char *valaddr,
+ CORE_ADDR address);
+
struct cp_abi_ops
{
const char *shortname;
enum dtor_kinds (*is_destructor_name) (const char *name);
int (*is_vtable_name) (const char *name);
int (*is_operator_name) (const char *name);
- value_ptr (*virtual_fn_field) (value_ptr * arg1p, struct fn_field * f,
- int j, struct type * type, int offset);
- struct type *(*rtti_type) (value_ptr v, int *full, int *top,
+ struct value *(*virtual_fn_field) (struct value **arg1p, struct fn_field * f,
+ int j, struct type * type, int offset);
+ struct type *(*rtti_type) (struct value *v, int *full, int *top,
int *using_enc);
+ int (*baseclass_offset) (struct type *type, int index, char *valaddr,
+ CORE_ADDR address);
};