[v2,09/19] write_pieced_value: Fix buffer offset for memory pieces

Message ID 1494352015-10465-10-git-send-email-arnez@linux.vnet.ibm.com
State New, archived
Headers

Commit Message

Andreas Arnez May 9, 2017, 5:46 p.m. UTC
  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/dwarf2loc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
  

Comments

Yao Qi May 16, 2017, 8:44 a.m. UTC | #1
Andreas Arnez <arnez@linux.vnet.ibm.com> writes:

> 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.

LGTM.
  

Patch

diff --git a/gdb/dwarf2loc.c b/gdb/dwarf2loc.c
index 8b5cbc5..e1e1562 100644
--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -2056,7 +2056,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);