gdb/
* cp-valprint.c (cp_print_value_fields): Check valprint_check_validity for TYPE_VPTR_FIELDNO. * valprint.c (valprint_check_validity): Make it global, move the function comment ... * value.h (valprint_check_validity): ... to this new declaration. gdb/testsuite/ * gdb.trace/unavailable.exp (collect globals: print object on: print derived_partial) (collect globals: print object on: print derived_whole) (collect globals: print object off: print derived_partial) (collect globals: print object off: print derived_whole): Update expected output.
This commit is contained in:
parent
23916fffce
commit
a72c8f6a29
@ -1,3 +1,11 @@
|
||||
2012-04-03 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* cp-valprint.c (cp_print_value_fields): Check valprint_check_validity
|
||||
for TYPE_VPTR_FIELDNO.
|
||||
* valprint.c (valprint_check_validity): Make it global, move the
|
||||
function comment ...
|
||||
* value.h (valprint_check_validity): ... to this new declaration.
|
||||
|
||||
2012-04-02 Tristan Gingold <gingold@adacore.com>
|
||||
|
||||
* i386-darwin-nat.c (i386_darwin_fetch_inferior_registers): Use
|
||||
|
@ -360,14 +360,18 @@ cp_print_value_fields (struct type *type, struct type *real_type,
|
||||
}
|
||||
else if (i == TYPE_VPTR_FIELDNO (type))
|
||||
{
|
||||
CORE_ADDR addr
|
||||
= extract_typed_address (valaddr + offset
|
||||
+ TYPE_FIELD_BITSIZE (type, i) / 8,
|
||||
TYPE_FIELD_TYPE (type, i));
|
||||
int i_offset = offset + TYPE_FIELD_BITPOS (type, i) / 8;
|
||||
struct type *i_type = TYPE_FIELD_TYPE (type, i);
|
||||
|
||||
print_function_pointer_address (get_type_arch (type),
|
||||
addr, stream,
|
||||
options->addressprint);
|
||||
if (valprint_check_validity (stream, i_type, i_offset, val))
|
||||
{
|
||||
CORE_ADDR addr;
|
||||
|
||||
addr = extract_typed_address (valaddr + i_offset, i_type);
|
||||
print_function_pointer_address (get_type_arch (type),
|
||||
addr, stream,
|
||||
options->addressprint);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1,3 +1,12 @@
|
||||
2012-04-03 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.trace/unavailable.exp
|
||||
(collect globals: print object on: print derived_partial)
|
||||
(collect globals: print object on: print derived_whole)
|
||||
(collect globals: print object off: print derived_partial)
|
||||
(collect globals: print object off: print derived_whole): Update
|
||||
expected output.
|
||||
|
||||
2012-03-30 Keith Seitz <keiths@redhat.com>
|
||||
|
||||
* gdb.python: Add test for linespecs with commas.
|
||||
|
@ -542,11 +542,11 @@ proc gdb_collect_globals_test { } { with_test_prefix "collect globals" {
|
||||
|
||||
# vtable pointer available, but nothing else
|
||||
gdb_test "print derived_partial" \
|
||||
" = \\(Derived\\) {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex, z = <unavailable>}"
|
||||
" = \\(Derived\\) {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex <vtable for Derived.*>, z = <unavailable>}"
|
||||
|
||||
# whole object available
|
||||
gdb_test "print derived_whole" \
|
||||
" = \\(Derived\\) {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex, z = 4}"
|
||||
" = \\(Derived\\) {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex <vtable for Derived.*>, z = 4}"
|
||||
}
|
||||
|
||||
gdb_test_no_output "set print object off"
|
||||
@ -560,11 +560,11 @@ proc gdb_collect_globals_test { } { with_test_prefix "collect globals" {
|
||||
|
||||
# vtable pointer available, but nothing else
|
||||
gdb_test "print derived_partial" \
|
||||
" = {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex, z = <unavailable>}"
|
||||
" = {<Middle> = {<Base> = <unavailable>, _vptr.Middle = <unavailable>, y = <unavailable>}, _vptr.Derived = $hex <vtable for Derived.*>, z = <unavailable>}"
|
||||
|
||||
# whole object available
|
||||
gdb_test "print derived_whole" \
|
||||
" = {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex, z = 4}"
|
||||
" = {<Middle> = {<Base> = {x = 2}, _vptr.Middle = $hex, y = 3}, _vptr.Derived = $hex <vtable for Derived.*>, z = 4}"
|
||||
}
|
||||
|
||||
# An instance of a virtual class where we collected everything but
|
||||
|
@ -248,17 +248,9 @@ scalar_type_p (struct type *type)
|
||||
}
|
||||
}
|
||||
|
||||
/* Helper function to check the validity of some bits of a value.
|
||||
/* See its definition in value.h. */
|
||||
|
||||
If TYPE represents some aggregate type (e.g., a structure), return 1.
|
||||
|
||||
Otherwise, any of the bytes starting at OFFSET and extending for
|
||||
TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and
|
||||
return 0. The checking is done using FUNCS.
|
||||
|
||||
Otherwise, return 1. */
|
||||
|
||||
static int
|
||||
int
|
||||
valprint_check_validity (struct ui_file *stream,
|
||||
struct type *type,
|
||||
int embedded_offset,
|
||||
|
14
gdb/value.h
14
gdb/value.h
@ -213,6 +213,20 @@ extern struct value *allocate_computed_value (struct type *type,
|
||||
const struct lval_funcs *funcs,
|
||||
void *closure);
|
||||
|
||||
/* Helper function to check the validity of some bits of a value.
|
||||
|
||||
If TYPE represents some aggregate type (e.g., a structure), return 1.
|
||||
|
||||
Otherwise, any of the bytes starting at OFFSET and extending for
|
||||
TYPE_LENGTH(TYPE) bytes are invalid, print a message to STREAM and
|
||||
return 0. The checking is done using FUNCS.
|
||||
|
||||
Otherwise, return 1. */
|
||||
|
||||
extern int valprint_check_validity (struct ui_file *stream, struct type *type,
|
||||
int embedded_offset,
|
||||
const struct value *val);
|
||||
|
||||
extern struct value *allocate_optimized_out_value (struct type *type);
|
||||
|
||||
/* If VALUE is lval_computed, return its lval_funcs structure. */
|
||||
|
Loading…
x
Reference in New Issue
Block a user