diff options
author | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-01-03 13:14:52 +0000 |
---|---|---|
committer | aurel32 <aurel32@c046a42c-6fe2-441c-8c8c-71466251a162> | 2009-01-03 13:14:52 +0000 |
commit | eaa449b94039d90c0bf17721528b7a8d97e74251 (patch) | |
tree | c7eb12273ef4d514eb91d8f14f856a9cd409220b /linux-user/signal.c | |
parent | 5d04f23bdf3f99c3c4c731e1897a760f067a34e0 (diff) |
Fix qemu endless loop when raising a SIGSEGV/SIGBUS signal with gdbstub in user emulation
When a SIGSEGV signal is raised in user mode emulation the current
test to know whether the signal is sent by the kernel is wrong :
info->si_code == SI_KERNEL
according to /usr/include/bits/siginfo.h it should be
info->si_code > 0
Signed-off-by: Lionel Landwerlin <lionel.landwerlin@openwide.fr>
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6151 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'linux-user/signal.c')
-rw-r--r-- | linux-user/signal.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/linux-user/signal.c b/linux-user/signal.c index 5e30522091..ae1c0bac23 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -441,9 +441,9 @@ static void host_signal_handler(int host_signum, siginfo_t *info, target_siginfo_t tinfo; /* the CPU emulator uses some host signals to detect exceptions, - we we forward to it some signals */ + we forward to it some signals */ if ((host_signum == SIGSEGV || host_signum == SIGBUS) - && info->si_code == SI_KERNEL) { + && info->si_code > 0) { if (cpu_signal_handler(host_signum, info, puc)) return; } |