* [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.