Commit eaa449b94039d90c0bf17721528b7a8d97e74251

Authored by aurel32
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 }