This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 1/3] Fix inferior memory reading in GDBServer for arm/aarch32.


On 16-12-01 13:09:56, Antoine Tremblay wrote:
> 
> After some more thought, it can happen even with current code too that
> single step breakpoints are installed without a step-over.
> 
> Consider this situation:
> 
> In non-stop:
> 
> the user issues:
> 
> thread 1
> step&
> thread 2
> step&
> thread 3
> step&
> 
> In a similar way as non-stop-fair-events.exp (threads are looping).
> 
> GDBServer:
> 
>  linux_resume is called
>  GDBServer has pending events,
>  threads are not resumed and single-step breakpoint for thread 1 not installed.
> 
>  linux_wait_1 is called with a pending event on thread 2 at pc A
>  GDBServer handles the event and calls proceed_all_lwps
>  This calls proceed_one_lwp and installs single-step breakpoints on all
>  the threads that need one.
> 
>  Now since thread 1 needs to install a single-step breakpoint and is at pc B
>  (different than thread 2), a step-over is not initiated and get_next_pc
>  is called to figure out the next instruction from pc B.
> 
>  However it may just be that thread 3 as a single step breakpoint at pc
>  B. And thus get_next_pc fails.
> 
> This situation is tested with non-stop-fair-events.exp.
> 
> Sorry for the confusion, you can consider only the two last replies as
> valid.

This helps understanding the problem, and helps me recalling one patch
in my tree, but I didn't submit it (I can't remember why).

Single-step breakpoints are installed in proceed_one_lwp for each thread.
GDBserver proceeds two threads for resume_step, as requested by GDB,
and the thread proceeded later may see the single-step breakpoints
installed for the thread proceeded just now.

Please add these explanations to the commit log.

-- 
Yao (齐尧)

>From 716477ebf1c00c04235953c345a295bb3ea91dd9 Mon Sep 17 00:00:00 2001
From: Yao Qi <yao.qi@linaro.org>
Date: Mon, 29 Feb 2016 12:50:58 +0000
Subject: [PATCH] Call check_mem_read in get_next_pcs_read_memory_unsigned_integer

get_next_pcs_read_memory_unsigned_integer only calls
*the_target->read_memory but doesn't call check_mem_read,

gdb/gdbserver:

2016-03-02  Yao Qi  <yao.qi@linaro.org>

        * linux-arm-low.c (get_next_pcs_read_memory_unsigned_integer):
        Call read_inferior_memory instead of *the_target->read_memory.

diff --git a/gdb/gdbserver/linux-arm-low.c b/gdb/gdbserver/linux-arm-low.c
index ed9b356..a62904a 100644
--- a/gdb/gdbserver/linux-arm-low.c
+++ b/gdb/gdbserver/linux-arm-low.c
@@ -263,7 +263,7 @@ get_next_pcs_read_memory_unsigned_integer (CORE_ADDR memaddr,
   ULONGEST res;
 
   res = 0;
-  (*the_target->read_memory) (memaddr, (unsigned char *) &res, len);
+  read_inferior_memory (memaddr, (unsigned char *) &res, len);
   return res;
 }
 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]