Choose TARGET_OBJECT_STACK_MEMORY and TARGET_OBJECT_MEMORY in read_value_memory
authorYao Qi <yao.qi@linaro.org>
Fri, 22 Apr 2016 16:18:31 +0000 (17:18 +0100)
committerYao Qi <yao.qi@linaro.org>
Fri, 22 Apr 2016 16:20:24 +0000 (17:20 +0100)
Before this patch
https://sourceware.org/ml/gdb-patches/2014-02/msg00709.html
read_value_memory checks parameter 'stack', and call read_stack or
read_memory respectively.  However, 'stack' is not checked and
TARGET_OBJECT_MEMORY is always used in target_xfer_partial, which is
a mistake in the patch above.

This patch checks parameter 'stack', and choose TARGET_OBJECT_MEMORY
or TARGET_OBJECT_STACK_MEMORY accordingly.

gdb:

2016-04-22  Yao Qi  <yao.qi@linaro.org>

* valops.c (read_value_memory): New local variable 'stack'.
Set it to either TARGET_OBJECT_STACK_MEMORY or
TARGET_OBJECT_MEMORY.

gdb/ChangeLog
gdb/valops.c

index 512344c1030ad8fd6e9f86bb28c29e2f9ff7aa32..56f96440071bcdab6c224a6821308d1f0613f581 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-22  Yao Qi  <yao.qi@linaro.org>
+
+       * valops.c (read_value_memory): New local variable 'stack'.
+       Set it to either TARGET_OBJECT_STACK_MEMORY or
+       TARGET_OBJECT_MEMORY.
+
 2016-04-22  Pedro Alves  <palves@redhat.com>
 
        * ada-exp.y: Remove all yy symbol remappings.
index 8a555f328684f477312bc19e316f09e66616f762..bbbbd0074eaf6839df15023f016084331ba0ef69 100644 (file)
@@ -961,6 +961,9 @@ read_value_memory (struct value *val, int embedded_offset,
   ULONGEST xfered_total = 0;
   struct gdbarch *arch = get_value_arch (val);
   int unit_size = gdbarch_addressable_memory_unit_size (arch);
+  enum target_object object;
+
+  object = stack ? TARGET_OBJECT_STACK_MEMORY : TARGET_OBJECT_MEMORY;
 
   while (xfered_total < length)
     {
@@ -968,7 +971,7 @@ read_value_memory (struct value *val, int embedded_offset,
       ULONGEST xfered_partial;
 
       status = target_xfer_partial (current_target.beneath,
-                                   TARGET_OBJECT_MEMORY, NULL,
+                                   object, NULL,
                                    buffer + xfered_total * unit_size, NULL,
                                    memaddr + xfered_total,
                                    length - xfered_total,