* gnu-v3-abi.c (struct value_and_voffset): New.

(hash_value_and_voffset, eq_value_and_voffset)
	(compare_value_and_voffset, compute_vtable_size)
	(print_one_vtable, gnuv3_print_vtable): New functions.
	(init_gnuv3_ops): Initialize 'print_vtable' field.
	* cp-support.c (info_vtbl_command): New function.
	(_initialize_cp_support): Add "info vtbl".
	* cp-abi.h (cplus_print_vtable): Declare.
	(struct cp_abi_ops) <print_vtable>: New field.
	* cp-abi.c (cplus_print_vtable): New function.
	* NEWS: Update.
gdb/testsuite
	* gdb.cp/virtfunc.exp (make_one_vtable_result): New proc.
	(test_info_vtbl): Likewise.
	(do_tests): Call test_info_vtbl.
	* gdb.cp/virtfunc.cc (va): New global.
gdb/doc
	* gdb.texinfo (Debugging C Plus Plus): Document "info vtbl".
This commit is contained in:
Tom Tromey
2012-03-15 15:43:18 +00:00
parent 2479f722a4
commit c4aeac856a
11 changed files with 359 additions and 0 deletions

View File

@@ -34,6 +34,7 @@
#include "exceptions.h"
#include "expression.h"
#include "value.h"
#include "cp-abi.h"
#include "safe-ctype.h"
@@ -1563,6 +1564,17 @@ cp_validate_operator (const char *input)
return 0;
}
/* Implement "info vtable". */
static void
info_vtbl_command (char *arg, int from_tty)
{
struct value *value;
value = parse_and_eval (arg);
cplus_print_vtable (value);
}
void
_initialize_cp_support (void)
{
@@ -1581,4 +1593,10 @@ _initialize_cp_support (void)
first_component_command,
_("Print the first class/namespace component of NAME."),
&maint_cplus_cmd_list);
add_info ("vtbl", info_vtbl_command,
_("Show the vtable for a C++ object.\n\
Usage: info vtbl EXPRESSION\n\
Evaluate EXPRESSION and display the virtual function table for the\n\
resulting object."));
}