From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46257) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gNb4L-0005Rf-Pa for qemu-devel@nongnu.org; Fri, 16 Nov 2018 05:09:46 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gNb4J-0002uV-Tj for qemu-devel@nongnu.org; Fri, 16 Nov 2018 05:09:45 -0500 Date: Fri, 16 Nov 2018 11:09:04 +0100 From: "Edgar E. Iglesias" Message-ID: <20181116100904.GS7447@toto> References: <20181115094207.22846-1-luc.michel@greensocs.com> <20181115094207.22846-10-luc.michel@greensocs.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <20181115094207.22846-10-luc.michel@greensocs.com> Subject: Re: [Qemu-devel] [PATCH v6 09/16] gdbstub: add multiprocess support to gdb_vm_state_change() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luc Michel Cc: qemu-devel@nongnu.org, qemu-arm@nongnu.org, Peter Maydell , saipava@xilinx.com, edgari@xilinx.com, alistair@alistair23.me, Philippe =?iso-8859-1?Q?Mathieu-Daud=E9?= , mark.burton@greensocs.com, Eduardo Habkost On Thu, Nov 15, 2018 at 10:42:00AM +0100, Luc Michel wrote: > Add support for multiprocess extension in gdb_vm_state_change() > function. >=20 > Signed-off-by: Luc Michel > Reviewed-by: Philippe Mathieu-Daud=E9 Reviewed-by: Edgar E. Iglesias > --- > gdbstub.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) >=20 > diff --git a/gdbstub.c b/gdbstub.c > index 4cbc81ae5b..5df9929f92 100644 > --- a/gdbstub.c > +++ b/gdbstub.c > @@ -1713,10 +1713,11 @@ void gdb_set_stop_cpu(CPUState *cpu) > static void gdb_vm_state_change(void *opaque, int running, RunState stat= e) > { > GDBState *s =3D gdbserver_state; > CPUState *cpu =3D s->c_cpu; > char buf[256]; > + char thread_id[16]; > const char *type; > int ret; > =20 > if (running || s->state =3D=3D RS_INACTIVE) { > return; > @@ -1724,10 +1725,18 @@ static void gdb_vm_state_change(void *opaque, int= running, RunState state) > /* Is there a GDB syscall waiting to be sent? */ > if (s->current_syscall_cb) { > put_packet(s, s->syscall_buf); > return; > } > + > + if (cpu =3D=3D 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) { > switch (cpu->watchpoint_hit->flags & BP_MEM_ACCESS) { > case BP_MEM_READ: > @@ -1741,12 +1750,12 @@ static void gdb_vm_state_change(void *opaque, int= running, RunState state) > break; > } > 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 =3D NULL; > goto send_packet; > } else { > trace_gdbstub_hit_break(); > @@ -1784,11 +1793,11 @@ static void gdb_vm_state_change(void *opaque, int= running, RunState state) > trace_gdbstub_hit_unknown(state); > ret =3D GDB_SIGNAL_UNKNOWN; > break; > } > gdb_set_stop_cpu(cpu); > - snprintf(buf, sizeof(buf), "T%02xthread:%02x;", ret, cpu_gdb_index(c= pu)); > + snprintf(buf, sizeof(buf), "T%02xthread:%s;", ret, thread_id); > =20 > send_packet: > put_packet(s, buf); > =20 > /* disable single step if it was enabled */ > --=20 > 2.19.1 >=20