gdbstub: add support for vAttach packets

Add support for the vAttach packets. In multiprocess mode, GDB sends
them to attach to additional processes.

Signed-off-by: Luc Michel <luc.michel@greensocs.com>
Reviewed-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
Acked-by: Alistair Francis <alistair.francis@wdc.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Message-id: 20181207090135.7651-13-luc.michel@greensocs.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Luc Michel 2019-01-07 15:23:46 +00:00 committed by Peter Maydell
parent 53fd655415
commit 3f940dc988
1 changed files with 35 additions and 0 deletions

View File

@ -1348,6 +1348,41 @@ static int gdb_handle_packet(GDBState *s, const char *line_buf)
goto unknown_command;
}
break;
} else if (strncmp(p, "Attach;", 7) == 0) {
unsigned long pid;
p += 7;
if (qemu_strtoul(p, &p, 16, &pid)) {
put_packet(s, "E22");
break;
}
process = gdb_get_process(s, pid);
if (process == NULL) {
put_packet(s, "E22");
break;
}
cpu = get_first_cpu_in_process(s, process);
if (cpu == NULL) {
/* Refuse to attach an empty process */
put_packet(s, "E22");
break;
}
process->attached = true;
s->g_cpu = cpu;
s->c_cpu = cpu;
snprintf(buf, sizeof(buf), "T%02xthread:%s;", GDB_SIGNAL_TRAP,
gdb_fmt_thread_id(s, cpu, thread_id, sizeof(thread_id)));
put_packet(s, buf);
break;
} else {
goto unknown_command;
}