Index: gdb/cp-abi.h |
diff --git a/gdb/cp-abi.h b/gdb/cp-abi.h |
index 84514501ff7b151037ad8bc0dfabe13a3e9ef007..f6d47bad855102137fbeec8468e76c8ddc3a0bc7 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-2012 Free Software Foundation, Inc. |
+ Copyright (C) 2001-2013 Free Software Foundation, Inc. |
This file is part of GDB. |
@@ -178,6 +178,29 @@ void cplus_make_method_ptr (struct type *type, gdb_byte *CONTENTS, |
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. */ |
@@ -219,6 +242,10 @@ struct cp_abi_ops |
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); |
}; |