gdbstub: add multiprocess support to gdb_vm_state_change()
Add support for multiprocess extension in gdb_vm_state_change() function. Signed-off-by: Luc Michel <luc.michel@greensocs.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com> Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com> Acked-by: Alistair Francis <alistair.francis@wdc.com> Message-id: 20181207090135.7651-10-luc.michel@greensocs.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
c145eeae1c
commit
95567c2712
15
gdbstub.c
15
gdbstub.c
@ -1724,6 +1724,7 @@ static void gdb_vm_state_change(void *opaque, int running, RunState state)
|
|||||||
GDBState *s = gdbserver_state;
|
GDBState *s = gdbserver_state;
|
||||||
CPUState *cpu = s->c_cpu;
|
CPUState *cpu = s->c_cpu;
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
char thread_id[16];
|
||||||
const char *type;
|
const char *type;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -1735,6 +1736,14 @@ static void gdb_vm_state_change(void *opaque, int running, RunState state)
|
|||||||
put_packet(s, s->syscall_buf);
|
put_packet(s, s->syscall_buf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cpu == NULL) {
|
||||||
|
/* No process attached */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gdb_fmt_thread_id(s, cpu, thread_id, sizeof(thread_id));
|
||||||
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case RUN_STATE_DEBUG:
|
case RUN_STATE_DEBUG:
|
||||||
if (cpu->watchpoint_hit) {
|
if (cpu->watchpoint_hit) {
|
||||||
@ -1752,8 +1761,8 @@ static void gdb_vm_state_change(void *opaque, int running, RunState state)
|
|||||||
trace_gdbstub_hit_watchpoint(type, cpu_gdb_index(cpu),
|
trace_gdbstub_hit_watchpoint(type, cpu_gdb_index(cpu),
|
||||||
(target_ulong)cpu->watchpoint_hit->vaddr);
|
(target_ulong)cpu->watchpoint_hit->vaddr);
|
||||||
snprintf(buf, sizeof(buf),
|
snprintf(buf, sizeof(buf),
|
||||||
"T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
|
"T%02xthread:%s;%swatch:" TARGET_FMT_lx ";",
|
||||||
GDB_SIGNAL_TRAP, cpu_gdb_index(cpu), type,
|
GDB_SIGNAL_TRAP, thread_id, type,
|
||||||
(target_ulong)cpu->watchpoint_hit->vaddr);
|
(target_ulong)cpu->watchpoint_hit->vaddr);
|
||||||
cpu->watchpoint_hit = NULL;
|
cpu->watchpoint_hit = NULL;
|
||||||
goto send_packet;
|
goto send_packet;
|
||||||
@ -1795,7 +1804,7 @@ static void gdb_vm_state_change(void *opaque, int running, RunState state)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
gdb_set_stop_cpu(cpu);
|
gdb_set_stop_cpu(cpu);
|
||||||
snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, cpu_gdb_index(cpu));
|
snprintf(buf, sizeof(buf), "T%02xthread:%s;", ret, thread_id);
|
||||||
|
|
||||||
send_packet:
|
send_packet:
|
||||||
put_packet(s, buf);
|
put_packet(s, buf);
|
||||||
|
Loading…
Reference in New Issue
Block a user