All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [patch] Report usermode gdb exit codes
@ 2005-04-24 13:52 Paul Brook
  0 siblings, 0 replies; only message in thread
From: Paul Brook @ 2005-04-24 13:52 UTC (permalink / raw)
  To: qemu-devel

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

The attached patch makes qemu report the exit code to the attached gdb when 
the guest process exits.

Paul

[-- Attachment #2: patch.qemu_gdb_exit --]
[-- Type: text/x-diff, Size: 1915 bytes --]

Index: gdbstub.c
===================================================================
RCS file: /cvsroot/qemu/qemu/gdbstub.c,v
retrieving revision 1.25
diff -u -p -r1.25 gdbstub.c
--- gdbstub.c	24 Apr 2005 10:07:11 -0000	1.25
+++ gdbstub.c	24 Apr 2005 13:42:02 -0000
@@ -656,6 +656,22 @@ gdb_handlesig (CPUState *env, int sig)
   }
   return sig;
 }
+
+/* Tell the remote gdb that the process has exited.  */
+void gdb_exit(CPUState *env, int code)
+{
+  GDBState *s;
+  char buf[4];
+
+  if (gdbserver_fd < 0)
+    return;
+
+  s = &gdbserver_state;
+
+  snprintf(buf, sizeof(buf), "W%02x", code);
+  put_packet(s, buf);
+}
+
 #else
 static int gdb_can_read(void *opaque)
 {
Index: gdbstub.h
===================================================================
RCS file: /cvsroot/qemu/qemu/gdbstub.h,v
retrieving revision 1.1
diff -u -p -r1.1 gdbstub.h
--- gdbstub.h	17 Apr 2005 19:16:13 -0000	1.1
+++ gdbstub.h	24 Apr 2005 13:42:02 -0000
@@ -5,6 +5,7 @@
 
 #ifdef CONFIG_USER_ONLY
 int gdb_handlesig (CPUState *, int);
+void gdb_exit(CPUState *, int);
 #endif
 int gdbserver_start(int);
 
Index: linux-user/syscall.c
===================================================================
RCS file: /cvsroot/qemu/qemu/linux-user/syscall.c,v
retrieving revision 1.59
diff -u -p -r1.59 syscall.c
--- linux-user/syscall.c	23 Apr 2005 18:25:41 -0000	1.59
+++ linux-user/syscall.c	24 Apr 2005 13:42:02 -0000
@@ -1603,6 +1603,7 @@ long do_syscall(void *cpu_env, int num, 
 #ifdef HAVE_GPROF
         _mcleanup();
 #endif
+        gdb_exit(cpu_env, arg1);
         /* XXX: should free thread stack and CPU env */
         _exit(arg1);
         ret = 0; /* avoid warning */
@@ -2409,6 +2410,7 @@ long do_syscall(void *cpu_env, int num, 
 #ifdef __NR_exit_group
         /* new thread calls */
     case TARGET_NR_exit_group:
+        gdb_exit(cpu_env, arg1);
         ret = get_errno(exit_group(arg1));
         break;
 #endif

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2005-04-24 13:54 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-04-24 13:52 [Qemu-devel] [patch] Report usermode gdb exit codes Paul Brook

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.