X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fcp-abi.h;h=7d4b7f309026bcd0e58ff8cb4329a137f8d2e1e3;hb=162078c893bb9614d4bf5e0d60ad567fcaf8e2bd;hp=53c8f93c43bd2aa28d3f5281d50f57f950249e7d;hpb=7b6bb8daaceb9ecf3f42dea57ae82733d6a3b2f6;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/cp-abi.h b/gdb/cp-abi.h index 53c8f93c43..7d4b7f3090 100644 --- a/gdb/cp-abi.h +++ b/gdb/cp-abi.h @@ -3,8 +3,7 @@ Contributed by Daniel Berlin - Copyright (C) 2001, 2005, 2006, 2007, 2008, 2009, 2010, 2011 - Free Software Foundation, Inc. + Copyright (C) 2001-2014 Free Software Foundation, Inc. This file is part of GDB. @@ -139,18 +138,18 @@ 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. +/* Compute the offset of the baseclass which is the INDEXth baseclass + of class TYPE, for value at VALADDR (in host) at ADDRESS (in + target), offset by EMBEDDED_OFFSET. VALADDR points to the raw + contents of VAL. 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, const gdb_byte *valaddr, + int embedded_offset, + CORE_ADDR address, + const struct value *val); -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. */ @@ -174,6 +173,34 @@ struct value *cplus_method_ptr_to_value (struct value **this_p, void cplus_make_method_ptr (struct type *type, gdb_byte *CONTENTS, CORE_ADDR address, int is_virtual); +/* Print the vtable for VALUE, if there is one. If there is no + vtable, print a message, but do not throw. */ + +void cplus_print_vtable (struct value *value); + +/* Implement 'typeid': find the type info for VALUE, if possible. If + the type info cannot be found, throw an exception. */ + +extern struct value *cplus_typeid (struct value *value); + +/* Return the type of 'typeid' for the current C++ ABI on the given + architecture. */ + +extern struct type *cplus_typeid_type (struct gdbarch *gdbarch); + +/* Given a value which holds a pointer to a std::type_info, return the + type which that type_info represents. Throw an exception if the + type cannot be found. */ + +extern struct type *cplus_type_from_type_info (struct value *value); + +/* Given a value which holds a pointer to a std::type_info, return the + name of the type which that type_info represents. Throw an + exception if the type name cannot be found. The result is + xmalloc'd and must be freed by the caller. */ + +extern char *cplus_typename_from_type_info (struct value *value); + /* Determine if we are currently in a C++ thunk. If so, get the address of the routine we are thunking to and continue to there instead. */ @@ -204,8 +231,8 @@ struct cp_abi_ops struct type *(*rtti_type) (struct value *v, int *full, int *top, int *using_enc); int (*baseclass_offset) (struct type *type, int index, - const bfd_byte *valaddr, - CORE_ADDR address); + const bfd_byte *valaddr, int embedded_offset, + CORE_ADDR address, const struct value *val); void (*print_method_ptr) (const gdb_byte *contents, struct type *type, struct ui_file *stream); @@ -214,6 +241,11 @@ struct cp_abi_ops CORE_ADDR, int); struct value * (*method_ptr_to_value) (struct value **, struct value *); + void (*print_vtable) (struct value *); + struct value *(*get_typeid) (struct value *value); + struct type *(*get_typeid_type) (struct gdbarch *gdbarch); + struct type *(*get_type_from_type_info) (struct value *value); + char *(*get_typename_from_type_info) (struct value *value); CORE_ADDR (*skip_trampoline) (struct frame_info *, CORE_ADDR); int (*pass_by_reference) (struct type *type); };