Commit eaa449b94039d90c0bf17721528b7a8d97e74251
1 parent
5d04f23b
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
Showing
1 changed file
with
2 additions
and
2 deletions
linux-user/signal.c
@@ -441,9 +441,9 @@ static void host_signal_handler(int host_signum, siginfo_t *info, | @@ -441,9 +441,9 @@ static void host_signal_handler(int host_signum, siginfo_t *info, | ||
441 | target_siginfo_t tinfo; | 441 | target_siginfo_t tinfo; |
442 | 442 | ||
443 | /* the CPU emulator uses some host signals to detect exceptions, | 443 | /* the CPU emulator uses some host signals to detect exceptions, |
444 | - we we forward to it some signals */ | 444 | + we forward to it some signals */ |
445 | if ((host_signum == SIGSEGV || host_signum == SIGBUS) | 445 | if ((host_signum == SIGSEGV || host_signum == SIGBUS) |
446 | - && info->si_code == SI_KERNEL) { | 446 | + && info->si_code > 0) { |
447 | if (cpu_signal_handler(host_signum, info, puc)) | 447 | if (cpu_signal_handler(host_signum, info, puc)) |
448 | return; | 448 | return; |
449 | } | 449 | } |