write_pieced_value: Fix buffer offset for memory pieces
authorAndreas Arnez <arnez@linux.vnet.ibm.com>
Tue, 13 Jun 2017 13:20:28 +0000 (15:20 +0200)
committerAndreas Arnez <arnez@linux.vnet.ibm.com>
Tue, 13 Jun 2017 13:20:28 +0000 (15:20 +0200)
In write_pieced_value, when transferring the data to target memory via a
buffer, the bit offset within the target value is not reduced to its
sub-byte fraction before using it as a bit offset into the buffer.  This
is fixed.

gdb/ChangeLog:

* dwarf2loc.c (write_pieced_value): In DWARF_VALUE_MEMORY,
truncate full bytes from dest_offset_bits before using it as an
offset into the buffer.

gdb/ChangeLog
gdb/dwarf2loc.c

index ee4c9d8b217af00e1cc54b4c87761c5ac0fc8ca1..296d187f2478544d0d88ac70acaf3b38dac7f710 100644 (file)
@@ -1,3 +1,9 @@
+2017-06-13  Andreas Arnez  <arnez@linux.vnet.ibm.com>
+
+       * dwarf2loc.c (write_pieced_value): In DWARF_VALUE_MEMORY,
+       truncate full bytes from dest_offset_bits before using it as an
+       offset into the buffer.
+
 2017-06-13  Andreas Arnez  <arnez@linux.vnet.ibm.com>
 
        * dwarf2loc.c (write_pieced_value): Include transfer size in
index 2849dadb77269733a6884b96e93bd41c0c969796..67a123fd42752e1fdca3281eed458793518d5d74 100644 (file)
@@ -2058,7 +2058,7 @@ write_pieced_value (struct value *to, struct value *from)
              read_memory (p->v.mem.addr + dest_offset, buffer.data (), 1);
              read_memory (p->v.mem.addr + dest_offset + this_size - 1,
                           &buffer[this_size - 1], 1);
-             copy_bitwise (buffer.data (), dest_offset_bits,
+             copy_bitwise (buffer.data (), dest_offset_bits % 8,
                            contents, source_offset_bits,
                            this_size_bits,
                            bits_big_endian);