diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c2bceeb8a7..880cd60760 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2017-06-13 Andreas Arnez + + * dwarf2loc.c (write_pieced_value): Fix order of calculations for + size capping. + 2017-06-13 Yao Qi * mips-linux-nat.c: Move include features/mips*-linux.c to diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c index 127167d887..2a45a79b50 100644 --- a/gdb/dwarf2loc.c +++ b/gdb/dwarf2loc.c @@ -1964,8 +1964,6 @@ write_pieced_value (struct value *to, struct value *from) bits_to_skip -= this_size_bits; continue; } - if (this_size_bits > type_len - offset) - this_size_bits = type_len - offset; if (bits_to_skip > 0) { dest_offset_bits = bits_to_skip; @@ -1978,6 +1976,8 @@ write_pieced_value (struct value *to, struct value *from) dest_offset_bits = 0; source_offset_bits = offset; } + if (this_size_bits > type_len - offset) + this_size_bits = type_len - offset; this_size = (this_size_bits + source_offset_bits % 8 + 7) / 8; source_offset = source_offset_bits / 8; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 4993a2db79..688efdf631 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-06-13 Andreas Arnez + + * gdb.dwarf2/var-pieces.exp: Add test case for modifying a + variable at nonzero offset. + 2017-06-13 Andreas Arnez * gdb.dwarf2/var-access.c: New file. diff --git a/gdb/testsuite/gdb.dwarf2/var-access.exp b/gdb/testsuite/gdb.dwarf2/var-access.exp index a52327d7db..bd92a44ef5 100644 --- a/gdb/testsuite/gdb.dwarf2/var-access.exp +++ b/gdb/testsuite/gdb.dwarf2/var-access.exp @@ -178,6 +178,11 @@ gdb_test "print/d s1" " = \\{a = 63, b = 3, c = 0, d = 1\\}" \ "verify s1.a" gdb_test "print/d a" " = \\{0, 1, 63, 3, 4, 5, 6, 7\\}" \ "verify s1.a through a" +gdb_test_no_output "set var s1.b = 42" +gdb_test "print/d s1" " = \\{a = 63, b = 42, c = 0, d = 1\\}" \ + "verify s1.b" +gdb_test "print/d a" " = \\{0, 1, 63, 42, 4, 5, 6, 7\\}" \ + "verify s1.b through a" # Byte-aligned register- and memory pieces. gdb_test_no_output "set var \$[lindex $regname 0] = 81" \