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 6518324d46..6fc1630643 100644 --- a/gdbstub.c +++ b/gdbstub.c @@ -1791,10 +1791,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