Fix bit-/byte-offset mismatch in parameter to read_value_memory

The function read_value_memory accepts a parameter embedded_offset and
expects it to represent the byte offset into the given value.  However,
the only invocation with a possibly non-zero embedded_offset happens in
read_pieced_value, where a bit offset is passed instead.

Adjust the implementation of read_value_memory to meet the caller's
expectation.  This implicitly fixes the invocation in read_pieced_value.

gdb/ChangeLog:

	* valops.c (read_value_memory): Change embedded_offset to
	represent a bit offset instead of a byte offset.
	* value.h (read_value_memory): Adjust comment.
This commit is contained in:
Andreas Arnez 2017-06-13 15:20:31 +02:00
parent f236533e3c
commit 23f945bf8c
3 changed files with 14 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2017-06-13 Andreas Arnez <arnez@linux.vnet.ibm.com>
* valops.c (read_value_memory): Change embedded_offset to
represent a bit offset instead of a byte offset.
* value.h (read_value_memory): Adjust comment.
2017-06-13 Andreas Arnez <arnez@linux.vnet.ibm.com> 2017-06-13 Andreas Arnez <arnez@linux.vnet.ibm.com>
* dwarf2loc.c (read_pieced_value): Remove unnecessary variables * dwarf2loc.c (read_pieced_value): Remove unnecessary variables

View File

@ -958,7 +958,7 @@ value_at_lazy (struct type *type, CORE_ADDR addr)
} }
void void
read_value_memory (struct value *val, LONGEST embedded_offset, read_value_memory (struct value *val, LONGEST bit_offset,
int stack, CORE_ADDR memaddr, int stack, CORE_ADDR memaddr,
gdb_byte *buffer, size_t length) gdb_byte *buffer, size_t length)
{ {
@ -984,8 +984,9 @@ read_value_memory (struct value *val, LONGEST embedded_offset,
if (status == TARGET_XFER_OK) if (status == TARGET_XFER_OK)
/* nothing */; /* nothing */;
else if (status == TARGET_XFER_UNAVAILABLE) else if (status == TARGET_XFER_UNAVAILABLE)
mark_value_bytes_unavailable (val, embedded_offset + xfered_total, mark_value_bits_unavailable (val, (xfered_total * HOST_CHAR_BIT
xfered_partial); + bit_offset),
xfered_partial * HOST_CHAR_BIT);
else if (status == TARGET_XFER_EOF) else if (status == TARGET_XFER_EOF)
memory_error (TARGET_XFER_E_IO, memaddr + xfered_total); memory_error (TARGET_XFER_E_IO, memaddr + xfered_total);
else else

View File

@ -581,12 +581,11 @@ extern int value_contents_eq (const struct value *val1, LONGEST offset1,
/* Read LENGTH addressable memory units starting at MEMADDR into BUFFER, /* Read LENGTH addressable memory units starting at MEMADDR into BUFFER,
which is (or will be copied to) VAL's contents buffer offset by which is (or will be copied to) VAL's contents buffer offset by
EMBEDDED_OFFSET (that is, to &VAL->contents[EMBEDDED_OFFSET]). BIT_OFFSET bits. Marks value contents ranges as unavailable if
Marks value contents ranges as unavailable if the corresponding the corresponding memory is likewise unavailable. STACK indicates
memory is likewise unavailable. STACK indicates whether the memory whether the memory is known to be stack memory. */
is known to be stack memory. */
extern void read_value_memory (struct value *val, LONGEST embedded_offset, extern void read_value_memory (struct value *val, LONGEST bit_offset,
int stack, CORE_ADDR memaddr, int stack, CORE_ADDR memaddr,
gdb_byte *buffer, size_t length); gdb_byte *buffer, size_t length);