summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Arnez <arnez@linux.vnet.ibm.com>2017-06-13 15:20:28 +0200
committerAndreas Arnez <arnez@linux.vnet.ibm.com>2017-06-13 15:20:28 +0200
commit07c9ca3bd8e6f83bcec49c922b52422c538f60f7 (patch)
tree2a816fc1dc6c9cd54feed456979dccdfe4487420
parentf1cc987420d9d2489eb453bd1c87139666cbe7fd (diff)
downloadbinutils-gdb-07c9ca3bd8e6f83bcec49c922b52422c538f60f7.tar.gz
write_pieced_value: Fix buffer offset for memory pieces
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.
-rw-r--r--gdb/ChangeLog6
-rw-r--r--gdb/dwarf2loc.c2
2 files changed, 7 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index ee4c9d8b217..296d187f247 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,11 @@
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
byte-wise check.
diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index 2849dadb772..67a123fd427 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -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);