GDB exit status for semihosting
PATCH 1/1 GDB exit status for semihosting
Report exit status to GDB when a semihosted application exits.
Signed-off-by Paul Brook <[email protected]>
--- arm-semi.c | 1 + gdbstub.c | 34 ++++++++++++++++++++-------------- gdbstub.h | 2 +- m68k-semi.c | 1 + 4 files changed, 23 insertions(+), 15 deletions(-)
arm-semi.c +1 -0
@@ -459,6 +459,7 @@ uint32_t do_arm_semihosting(CPUState *env)return 0 ; }case SYS_EXIT : +gdb_exit (env,0 );exit (0 );default :fprintf (stderr,"qemu: Unsupported SemiHosting SWI 0x%02x\n" , nr);
gdbstub.c +20 -14
@@ -2373,6 +2373,26 @@ static void gdb_read_byte(GDBState *s, int ch) } } +/* Tell the remote gdb that the process has exited. */ +void gdb_exit (CPUState *env,int code) +{ +GDBState *s; +char buf[4 ]; + + s = gdbserver_state; +if (!s) { +return ; + } +#ifdef CONFIG_USER_ONLY +if (gdbserver_fd <0 || s->fd <0 ) { +return ; + } +#endif + +snprintf (buf,sizeof (buf),"W%02x" , (uint8_t )code); +put_packet (s, buf); +} +#ifdef CONFIG_USER_ONLY int gdb_queuesig (void )
@@ -2436,20 +2456,6 @@ 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 ]; - - s = gdbserver_state; -if (gdbserver_fd <0 || s->fd <0 ) -return ; - -snprintf (buf,sizeof (buf),"W%02x" , code); -put_packet (s, buf); -} -/* Tell the remote gdb that the process has exited due to SIG. */ void gdb_signalled (CPUState *env,int sig) {
gdbstub.h +1 -1
@@ -17,10 +17,10 @@ typedef void (*gdb_syscall_complete_cb)(CPUState *env,void gdb_do_syscall (gdb_syscall_complete_cb cb,const char *fmt, ...);int use_gdb_syscalls (void );void gdb_set_stop_cpu (CPUState *env); +void gdb_exit (CPUState *,int );#ifdef CONFIG_USER_ONLY int gdb_queuesig (void );int gdb_handlesig (CPUState *,int ); -void gdb_exit (CPUState *,int );void gdb_signalled (CPUState *,int );void gdbserver_fork (CPUState *);#endif
m68k-semi.c +1 -0
@@ -172,6 +172,7 @@ void do_m68k_semihosting(CPUM68KState *env, int nr) args = env->dregs[1 ];switch (nr) {case HOSTED_EXIT : +gdb_exit (env, env->dregs[0 ]);exit (env->dregs[0 ]);case HOSTED_OPEN :if (use_gdb_syscalls ()) {
Signature · 1 line
1.7.1