Blame SOURCES/gdb-rhbz1420304-s390x-25of35.patch

e1d87d
commit 23f945bf8cebf348154aff43782de2e1977e9230
e1d87d
Author: Andreas Arnez <arnez@linux.vnet.ibm.com>
e1d87d
Date:   Tue Jun 13 15:20:31 2017 +0200
e1d87d
e1d87d
    Fix bit-/byte-offset mismatch in parameter to read_value_memory
e1d87d
    
e1d87d
    The function read_value_memory accepts a parameter embedded_offset and
e1d87d
    expects it to represent the byte offset into the given value.  However,
e1d87d
    the only invocation with a possibly non-zero embedded_offset happens in
e1d87d
    read_pieced_value, where a bit offset is passed instead.
e1d87d
    
e1d87d
    Adjust the implementation of read_value_memory to meet the caller's
e1d87d
    expectation.  This implicitly fixes the invocation in read_pieced_value.
e1d87d
    
e1d87d
    gdb/ChangeLog:
e1d87d
    
e1d87d
            * valops.c (read_value_memory): Change embedded_offset to
e1d87d
            represent a bit offset instead of a byte offset.
e1d87d
            * value.h (read_value_memory): Adjust comment.
e1d87d
e1d87d
### a/gdb/ChangeLog
e1d87d
### b/gdb/ChangeLog
e1d87d
## -1,5 +1,11 @@
e1d87d
 2017-06-13  Andreas Arnez  <arnez@linux.vnet.ibm.com>
e1d87d
 
e1d87d
+	* valops.c (read_value_memory): Change embedded_offset to
e1d87d
+	represent a bit offset instead of a byte offset.
e1d87d
+	* value.h (read_value_memory): Adjust comment.
e1d87d
+
e1d87d
+2017-06-13  Andreas Arnez  <arnez@linux.vnet.ibm.com>
e1d87d
+
e1d87d
 	* dwarf2loc.c (read_pieced_value): Remove unnecessary variables
e1d87d
 	dest_offset_bits and source_offset_bits.
e1d87d
 	(write_pieced_value): Likewise.
e1d87d
--- a/gdb/valops.c
e1d87d
+++ b/gdb/valops.c
e1d87d
@@ -958,7 +958,7 @@ value_at_lazy (struct type *type, CORE_ADDR addr)
e1d87d
 }
e1d87d
 
e1d87d
 void
e1d87d
-read_value_memory (struct value *val, LONGEST embedded_offset,
e1d87d
+read_value_memory (struct value *val, LONGEST bit_offset,
e1d87d
 		   int stack, CORE_ADDR memaddr,
e1d87d
 		   gdb_byte *buffer, size_t length)
e1d87d
 {
e1d87d
@@ -984,8 +984,9 @@ read_value_memory (struct value *val, LONGEST embedded_offset,
e1d87d
       if (status == TARGET_XFER_OK)
e1d87d
 	/* nothing */;
e1d87d
       else if (status == TARGET_XFER_UNAVAILABLE)
e1d87d
-	mark_value_bytes_unavailable (val, embedded_offset + xfered_total,
e1d87d
-				      xfered_partial);
e1d87d
+	mark_value_bits_unavailable (val, (xfered_total * HOST_CHAR_BIT
e1d87d
+					   + bit_offset),
e1d87d
+				     xfered_partial * HOST_CHAR_BIT);
e1d87d
       else if (status == TARGET_XFER_EOF)
e1d87d
 	memory_error (TARGET_XFER_E_IO, memaddr + xfered_total);
e1d87d
       else
e1d87d
--- a/gdb/value.h
e1d87d
+++ b/gdb/value.h
e1d87d
@@ -581,12 +581,11 @@ extern int value_contents_eq (const struct value *val1, LONGEST offset1,
e1d87d
 
e1d87d
 /* Read LENGTH addressable memory units starting at MEMADDR into BUFFER,
e1d87d
    which is (or will be copied to) VAL's contents buffer offset by
e1d87d
-   EMBEDDED_OFFSET (that is, to &VAL->contents[EMBEDDED_OFFSET]).
e1d87d
-   Marks value contents ranges as unavailable if the corresponding
e1d87d
-   memory is likewise unavailable.  STACK indicates whether the memory
e1d87d
-   is known to be stack memory.  */
e1d87d
+   BIT_OFFSET bits.  Marks value contents ranges as unavailable if
e1d87d
+   the corresponding memory is likewise unavailable.  STACK indicates
e1d87d
+   whether the memory is known to be stack memory.  */
e1d87d
 
e1d87d
-extern void read_value_memory (struct value *val, LONGEST embedded_offset,
e1d87d
+extern void read_value_memory (struct value *val, LONGEST bit_offset,
e1d87d
 			       int stack, CORE_ADDR memaddr,
e1d87d
 			       gdb_byte *buffer, size_t length);
e1d87d