qemu-arm
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-arm] [Qemu-devel] [PATCH v2 08/15] gdbstub: add multiprocess s


From: Philippe Mathieu-Daudé
Subject: Re: [Qemu-arm] [Qemu-devel] [PATCH v2 08/15] gdbstub: add multiprocess support to gdb_vm_state_change()
Date: Mon, 1 Oct 2018 18:30:36 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.0

On 01/10/2018 13:56, Luc Michel wrote:
> Add support for multiprocess extension in gdb_vm_state_change()
> function.
> 
> Signed-off-by: Luc Michel <address@hidden>

Reviewed-by: Philippe Mathieu-Daudé <address@hidden>

> ---
>  gdbstub.c | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/gdbstub.c b/gdbstub.c
> index 9065e8e140..c1a02c34cd 100644
> --- a/gdbstub.c
> +++ b/gdbstub.c
> @@ -1692,10 +1692,11 @@ void gdb_set_stop_cpu(CPUState *cpu)
>  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;
>  
>      if (running || s->state == RS_INACTIVE) {
>          return;
> @@ -1703,10 +1704,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 == 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:
> @@ -1720,12 +1729,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 = NULL;
>              goto send_packet;
>          } else {
>              trace_gdbstub_hit_break();
> @@ -1763,11 +1772,11 @@ static void gdb_vm_state_change(void *opaque, int 
> running, RunState state)
>          trace_gdbstub_hit_unknown(state);
>          ret = GDB_SIGNAL_UNKNOWN;
>          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);
>  
>      /* disable single step if it was enabled */
> 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]