aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuc Michel <luc.michel@greensocs.com>2019-01-07 15:23:46 +0000
committerPeter Maydell <peter.maydell@linaro.org>2019-01-07 15:23:46 +0000
commit95567c27121e58795949c77fd7503ac03451a62b (patch)
tree91b1ca1657bb23e829a08e6df99dd91bdc4ea2fd
parentc145eeae1cc7bb826fd60056bbd072e3881dc128 (diff)
downloadqemu-arm-95567c27121e58795949c77fd7503ac03451a62b.tar.gz
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>
-rw-r--r--gdbstub.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/gdbstub.c b/gdbstub.c
index 1f2b155490..edee38b613 100644
--- a/gdbstub.c
+++ b/gdbstub.c
@@ -1724,6 +1724,7 @@ static void gdb_vm_state_change(void *opaque, int running, RunState state)
GDBState *s = gdbserver_state;
CPUState *cpu = s->c_cpu;
char buf[256];
+ char thread_id[16];
const char *type;
int ret;
@@ -1735,6 +1736,14 @@ static void gdb_vm_state_change(void *opaque, int running, RunState state)
put_packet(s, s->syscall_buf);
return;
}
+
+ if (cpu == NULL) {
+ /* No process attached */
+ return;
+ }
+
+ gdb_fmt_thread_id(s, cpu, thread_id, sizeof(thread_id));
+
switch (state) {
case RUN_STATE_DEBUG:
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),
(target_ulong)cpu->watchpoint_hit->vaddr);
snprintf(buf, sizeof(buf),
- "T%02xthread:%02x;%swatch:" TARGET_FMT_lx ";",
- GDB_SIGNAL_TRAP, cpu_gdb_index(cpu), type,
+ "T%02xthread:%s;%swatch:" TARGET_FMT_lx ";",
+ GDB_SIGNAL_TRAP, thread_id, type,
(target_ulong)cpu->watchpoint_hit->vaddr);
cpu->watchpoint_hit = NULL;
goto send_packet;
@@ -1795,7 +1804,7 @@ static void gdb_vm_state_change(void *opaque, int running, RunState state)
break;
}
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:
put_packet(s, buf);