report user mode gdb exit codes (Paul Brook)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1401 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
		
							parent
							
								
									43fb823b5f
								
							
						
					
					
						commit
						e90096763d
					
				
							
								
								
									
										16
									
								
								gdbstub.c
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								gdbstub.c
									
									
									
									
									
								
							@ -656,6 +656,22 @@ gdb_handlesig (CPUState *env, int sig)
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
  return 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
 | 
					#else
 | 
				
			||||||
static int gdb_can_read(void *opaque)
 | 
					static int gdb_can_read(void *opaque)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
				
			|||||||
@ -5,6 +5,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#ifdef CONFIG_USER_ONLY
 | 
					#ifdef CONFIG_USER_ONLY
 | 
				
			||||||
int gdb_handlesig (CPUState *, int);
 | 
					int gdb_handlesig (CPUState *, int);
 | 
				
			||||||
 | 
					void gdb_exit(CPUState *, int);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
int gdbserver_start(int);
 | 
					int gdbserver_start(int);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -1603,6 +1603,7 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
 | 
				
			|||||||
#ifdef HAVE_GPROF
 | 
					#ifdef HAVE_GPROF
 | 
				
			||||||
        _mcleanup();
 | 
					        _mcleanup();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					        gdb_exit(cpu_env, arg1);
 | 
				
			||||||
        /* XXX: should free thread stack and CPU env */
 | 
					        /* XXX: should free thread stack and CPU env */
 | 
				
			||||||
        _exit(arg1);
 | 
					        _exit(arg1);
 | 
				
			||||||
        ret = 0; /* avoid warning */
 | 
					        ret = 0; /* avoid warning */
 | 
				
			||||||
@ -2409,6 +2410,7 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
 | 
				
			|||||||
#ifdef __NR_exit_group
 | 
					#ifdef __NR_exit_group
 | 
				
			||||||
        /* new thread calls */
 | 
					        /* new thread calls */
 | 
				
			||||||
    case TARGET_NR_exit_group:
 | 
					    case TARGET_NR_exit_group:
 | 
				
			||||||
 | 
					        gdb_exit(cpu_env, arg1);
 | 
				
			||||||
        ret = get_errno(exit_group(arg1));
 | 
					        ret = get_errno(exit_group(arg1));
 | 
				
			||||||
        break;
 | 
					        break;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user