}
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)
{
#ifdef CONFIG_USER_ONLY
int gdb_handlesig (CPUState *, int);
+void gdb_exit(CPUState *, int);
#endif
int gdbserver_start(int);
#ifdef HAVE_GPROF
_mcleanup();
#endif
+ gdb_exit(cpu_env, arg1);
/* XXX: should free thread stack and CPU env */
_exit(arg1);
ret = 0; /* avoid warning */
#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