On Thu, Nov 15, 2018 at 10:42:05AM +0100, Luc Michel wrote:
> When gdb_set_stop_cpu() is called with a CPU associated to a process
> currently not attached by the GDB client, return without modifying the
> stop CPU. Otherwise, GDB gets confused if it receives packets with a
> thread-id it does not know about.
> 
> Signed-off-by: Luc Michel <luc.mic...@greensocs.com>
> Acked-by: Alistair Francis <alistair.fran...@wdc.com>

Reviewed-by: Edgar E. Iglesias <edgar.igles...@xilinx.com>


> ---
>  gdbstub.c | 9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/gdbstub.c b/gdbstub.c
> index 59eed3b878..89819a6a72 100644
> --- a/gdbstub.c
> +++ b/gdbstub.c
> @@ -1787,10 +1787,19 @@ static int gdb_handle_packet(GDBState *s, const char 
> *line_buf)
>      return RS_IDLE;
>  }
>  
>  void gdb_set_stop_cpu(CPUState *cpu)
>  {
> +    GDBProcess *p = gdb_get_cpu_process(gdbserver_state, cpu);
> +
> +    if (!p->attached) {
> +        /* Having a stop CPU corresponding to a process that is not attached
> +         * confuses GDB. So we ignore the request.
> +         */
> +        return;
> +    }
> +
>      gdbserver_state->c_cpu = cpu;
>      gdbserver_state->g_cpu = cpu;
>  }
>  
>  #ifndef CONFIG_USER_ONLY
> -- 
> 2.19.1
> 

Reply via email to