qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jason Wessel <jason.wessel@windriver.com>
To: qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH] GDB serial protocol fixes (detach, kill, and initial status query)
Date: Mon, 31 Jul 2006 11:24:58 -0500	[thread overview]
Message-ID: <44CE2EDA.6040100@windriver.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 893 bytes --]


I have occasionally found that I have killed off gdb, and had no way to 
recover a debug session to QEMU.  Also the detach/kill sequence does not 
work correctly protocol wise in the QEMU gdb-stub.  This patch addresses 
these problems.

I implemented the serial protocol commands the same way as in KGDB.

? = Query state, but also clear the breakpoints.
      - KGDB/gdb do the same thing so that in case you lose your
        session or context, gdb always send the "?" command during the
        connect sequence.  This ensures that gdb has a clean slate
        for breakpoints and run control.

D = Detach and clear all breakpoints with return "OK"

k = Do the same thing as D for now
      In the future this can be used to kill the target
      emulation.  But for now it makes gdb and other gdb serial debugger
      happy.

signed-off-by: jason.wessel@windriver.com

Thanks,
Jason.

[-- Attachment #2: gdb_break_remove_cleanup.patch --]
[-- Type: text/plain, Size: 1436 bytes --]

Index: qemu/cpu-all.h
===================================================================
--- qemu.orig/cpu-all.h
+++ qemu/cpu-all.h
@@ -768,6 +768,7 @@ void cpu_reset_interrupt(CPUState *env, 
 
 int cpu_breakpoint_insert(CPUState *env, target_ulong pc);
 int cpu_breakpoint_remove(CPUState *env, target_ulong pc);
+int cpu_breakpoint_remove_all(CPUState *env);
 void cpu_single_step(CPUState *env, int enabled);
 void cpu_reset(CPUState *s);
 
Index: qemu/gdbstub.c
===================================================================
--- qemu.orig/gdbstub.c
+++ qemu/gdbstub.c
@@ -580,6 +580,8 @@ static int gdb_handle_packet(GDBState *s
         /* TODO: Make this return the correct value for user-mode.  */
         snprintf(buf, sizeof(buf), "S%02x", SIGTRAP);
         put_packet(s, buf);
+        /* Remove all the breakpoints when this query is issued. */
+        cpu_breakpoint_remove_all(env);
         break;
     case 'c':
         if (*p != '\0') {
@@ -603,6 +605,18 @@ static int gdb_handle_packet(GDBState *s
         vm_start();
 #endif
 	return RS_IDLE;
+    case 'k':
+    case 'D':
+        /* Detach packet */
+        if (!cpu_breakpoint_remove_all(env)) {
+#ifdef CONFIG_USER_ONLY
+            s->running_state = 1;
+#else
+            vm_start();
+#endif
+            put_packet(s, "OK");
+            break;
+        }
     case 's':
         if (*p != '\0') {
             addr = strtoul(p, (char **)&p, 16);

                 reply	other threads:[~2006-07-31 16:25 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=44CE2EDA.6040100@windriver.com \
    --to=jason.wessel@windriver.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).