qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH v6 09/16] gdbstub: add multiprocess support to g


From: Alistair Francis
Subject: Re: [Qemu-devel] [PATCH v6 09/16] gdbstub: add multiprocess support to gdb_vm_state_change()
Date: Fri, 16 Nov 2018 13:56:34 -0800
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.3.0

On 15/11/2018 1:42 am, 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>

Acked-by: Alistair Francis <address@hidden>

Alistair

---
  gdbstub.c | 15 ++++++++++++---
  1 file changed, 12 insertions(+), 3 deletions(-)

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 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;
@@ -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 == 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 = 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 = 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]