diff options
author | Pedro Alves <palves@redhat.com> | 2011-01-24 18:54:17 +0000 |
---|---|---|
committer | Pedro Alves <palves@redhat.com> | 2011-01-24 18:54:17 +0000 |
commit | 490f124f0943a59ca6829a030164f79716600166 (patch) | |
tree | 0140c25ba1bd8fa65f9242d98bacbb0177e8514b /gdb/testsuite/gdb.base | |
parent | 23b1e6e45074aded91b36b498a953d611da21b47 (diff) | |
download | gdb-490f124f0943a59ca6829a030164f79716600166.zip gdb-490f124f0943a59ca6829a030164f79716600166.tar.gz gdb-490f124f0943a59ca6829a030164f79716600166.tar.bz2 |
2011-01-24 Pedro Alves <pedro@codesourcery.com>
Don't lose embedded_offset in printing routines throughout.
gdb/
* valprint.h (val_print_array_elements): Change prototype.
* valprint.c (val_print_array_elements): Add `embedded_offset'
parameter, and adjust to pass it down to val_print, while passing
`valaddr' or `address' unmodified. Take embedded_offset into
account when checking repetitions.
* c-valprint.c (c_val_print): Pass embedded_offset to
val_print_array_elements instead of adjusting `valaddr' and
`address'.
* m2-valprint.c (m2_print_array_contents, m2_val_print): Pass
embedded_offset to val_print_array_elements instead of adjusting
`valaddr'.
* p-lang.h (pascal_object_print_value_fields): Adjust prototype.
* p-valprint.c (pascal_val_print): Pass embedded_offset to
val_print_array_elements and pascal_object_print_value_fields
instead of adjusting `valaddr'.
(pascal_object_print_value_fields): Add `offset' parameter, and
adjust to use it.
(pascal_object_print_value): Add `offset' parameter, and adjust to
use it.
(pascal_object_print_static_field): Use
value_contents_for_printing/value_embedded_offset, rather than
value_contents.
* ada-valprint.c (val_print_packed_array_elements): Add `offset'
parameter, and adjust to use it. Use
value_contents_for_printing/value_embedded_offset, rather than
value_contents.
(ada_val_print): Rename `valaddr0' parameter to `valaddr'.
(ada_val_print_array): Add `offset' parameter, and adjust to use
it.
(ada_val_print_1): Rename `valaddr0' parameter to `valaddr', and
`embedded_offset' to `offset'. Don't re-adjust `valaddr'.
Instead work with offsets. Use
value_contents_for_printing/value_embedded_offset, rather than
value_contents. Change `defer_val_int' local type to CORE_ADDR,
and use value_from_pointer to extract a target pointer, rather
than value_from_longest.
(print_variant_part): Add `offset' parameter. Replace
`outer_valaddr' parameter by a new `outer_offset' parameter.
Don't re-adjust `valaddr'. Instead pass down adjusted offsets.
(ada_value_print): Use
value_contents_for_printing/value_embedded_offset, rather than
value_contents.
(print_record): Add `offset' parameter, and adjust to pass it
down.
(print_field_values): Add `offset' parameter. Replace
`outer_valaddr' parameter by a new `outer_offset' parameter.
Don't re-adjust `valaddr'. Instead pass down adjusted offsets.
Use value_contents_for_printing/value_embedded_offset, rather than
value_contents.
* d-valprint.c (dynamic_array_type): Use
value_contents_for_printing/value_embedded_offset, rather than
value_contents.
* jv-valprint.c (java_print_value_fields): Add `offset' parameter.
Don't re-adjust `valaddr'. Instead pass down adjusted offsets.
(java_print_value_fields): Take `offset' into account. Don't
re-adjust `valaddr'. Instead pass down adjusted offsets.
(java_val_print): Take `embedded_offset' into account. Pass it to
java_print_value_fields.
* f-valprint.c (f77_print_array_1): Add `embedded_offset'
parameter. Don't re-adjust `valaddr' or `address'. Instead pass
down adjusted offsets.
(f77_print_array): Add `embedded_offset' parameter. Pass it down.
(f_val_print): Take `embedded_offset' into account.
gdb/testsuite/
* gdb.base/printcmds.c (some_struct): New struct and instance.
* gdb.base/printcmds.exp (test_print_repeats_embedded_array): New
procedure.
<global scope>: Call it.
Diffstat (limited to 'gdb/testsuite/gdb.base')
-rw-r--r-- | gdb/testsuite/gdb.base/printcmds.c | 22 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/printcmds.exp | 13 |
2 files changed, 35 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/printcmds.c b/gdb/testsuite/gdb.base/printcmds.c index 2d6668a..b3841ae 100644 --- a/gdb/testsuite/gdb.base/printcmds.c +++ b/gdb/testsuite/gdb.base/printcmds.c @@ -96,6 +96,28 @@ enum some_volatile_enum { enumvolval1, enumvolval2 }; name. See PR11827. */ volatile enum some_volatile_enum some_volatile_enum = enumvolval1; +/* A structure with an embedded array at an offset > 0. The array has + all elements with the same repeating value, which must not be the + same as the value of the preceding fields in the structure for the + test to be effective. This tests whether GDB uses the correct + element content offsets (relative to the complete `some_struct' + value) when counting value repetitions. */ +struct some_struct +{ + int a; + int b; + unsigned char array[20]; +} some_struct = { + 0x12345678, + 0x87654321, + { + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, + 0xaa, 0xaa, 0xaa, 0xaa, 0xaa + } +}; + /* -- */ int main () diff --git a/gdb/testsuite/gdb.base/printcmds.exp b/gdb/testsuite/gdb.base/printcmds.exp index d3ea9a5..89705ee 100644 --- a/gdb/testsuite/gdb.base/printcmds.exp +++ b/gdb/testsuite/gdb.base/printcmds.exp @@ -474,6 +474,18 @@ proc test_print_repeats_10 {} { } } +# This tests whether GDB uses the correct element content offsets +# (relative to the complete `some_struct' value) when counting value +# repetitions. + +proc test_print_repeats_embedded_array {} { + global gdb_prompt + + gdb_test_escape_braces "p/x some_struct" \ + "= {a = 0x12345678, b = 0x87654321, array = {0xaa <repeats 20 times>}}" \ + "correct element repeats in array embedded at offset > 0" +} + proc test_print_strings {} { global gdb_prompt @@ -818,6 +830,7 @@ test_float_rejected test_character_literals_accepted test_print_all_chars test_print_repeats_10 +test_print_repeats_embedded_array test_print_strings test_print_int_arrays test_print_typedef_arrays |