From: aurel32 Date: Sat, 3 Jan 2009 13:14:52 +0000 (+0000) Subject: Fix qemu endless loop when raising a SIGSEGV/SIGBUS signal with gdbstub in user emulation X-Git-Tag: stefano.display-merge-end~290 X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=eaa449b94039d90c0bf17721528b7a8d97e74251;p=qemu-xen-unstable.git 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 Signed-off-by: Aurelien Jarno git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6151 c046a42c-6fe2-441c-8c8c-71466251a162 --- 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; }