Choose TARGET_OBJECT_STACK_MEMORY and TARGET_OBJECT_MEMORY in read_value_memory

Message ID 1461059620-27870-1-git-send-email-yao.qi@linaro.org
State New, archived
Headers

Commit Message

Yao Qi April 19, 2016, 9:53 a.m. UTC
  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-19  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/valops.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)
  

Comments

Pedro Alves April 22, 2016, 3:53 p.m. UTC | #1
On 04/19/2016 10:53 AM, Yao Qi wrote:
> 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-19  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.

LGTM.

Thanks,
Pedro Alves
  
Yao Qi April 22, 2016, 4:21 p.m. UTC | #2
Pedro Alves <palves@redhat.com> writes:

> LGTM.

Patch is pushed in.
  

Patch

diff --git a/gdb/valops.c b/gdb/valops.c
index 5a244a9..03d7cac 100644
--- a/gdb/valops.c
+++ b/gdb/valops.c
@@ -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,