diff options
Diffstat (limited to 'gdb/cp-abi.h')
-rw-r--r-- | gdb/cp-abi.h | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/gdb/cp-abi.h b/gdb/cp-abi.h index 6c77824..1e22dbb 100644 --- a/gdb/cp-abi.h +++ b/gdb/cp-abi.h @@ -3,7 +3,7 @@ Contributed by Daniel Berlin <dberlin@redhat.com> - Copyright (C) 2001, 2005 Free Software Foundation, Inc. + Copyright (C) 2001, 2005, 2006 Free Software Foundation, Inc. This file is part of GDB. @@ -30,6 +30,7 @@ struct fn_field; struct type; struct value; +struct ui_file; /* 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 @@ -147,6 +148,28 @@ extern struct type *value_rtti_type (struct value *value, extern int baseclass_offset (struct type *type, int index, const bfd_byte *valaddr, CORE_ADDR address); +/* Describe the target of a pointer to method. CONTENTS is the byte + pattern representing the pointer to method. TYPE is the pointer to + method type. STREAM is the stream to print it to. */ +void cplus_print_method_ptr (const gdb_byte *contents, struct type *type, + struct ui_file *stream); + +/* Return the size of a pointer to member function for the current + architecture. */ +int cplus_method_ptr_size (void); + +/* Return the method which should be called by applying METHOD_PTR + to *THIS_P, and adjust *THIS_P if necessary. */ +struct value *cplus_method_ptr_to_value (struct value **this_p, + struct value *method_ptr); + +/* Create the byte pattern in CONTENTS representing a pointer to + member function at ADDRESS (if IS_VIRTUAL is 0) or with virtual + table offset ADDRESS (if IS_VIRTUAL is 1). This is the opposite + of cplus_method_ptr_to_value. */ +void cplus_make_method_ptr (gdb_byte *CONTENTS, CORE_ADDR address, + int is_virtual); + struct cp_abi_ops { const char *shortname; @@ -164,6 +187,11 @@ struct cp_abi_ops int *using_enc); int (*baseclass_offset) (struct type *type, int index, const bfd_byte *valaddr, CORE_ADDR address); + void (*print_method_ptr) (const gdb_byte *contents, struct type *type, + struct ui_file *stream); + int (*method_ptr_size) (void); + void (*make_method_ptr) (gdb_byte *, CORE_ADDR, int); + struct value * (*method_ptr_to_value) (struct value **, struct value *); }; |