提交 eaa449b9 编写于 作者: A aurel32

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: NLionel Landwerlin <lionel.landwerlin@openwide.fr>
Signed-off-by: NAurelien Jarno <aurelien@aurel32.net>

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@6151 c046a42c-6fe2-441c-8c8c-71466251a162
上级 5d04f23b
...@@ -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,
target_siginfo_t tinfo; target_siginfo_t tinfo;
/* the CPU emulator uses some host signals to detect exceptions, /* 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) if ((host_signum == SIGSEGV || host_signum == SIGBUS)
&& info->si_code == SI_KERNEL) { && info->si_code > 0) {
if (cpu_signal_handler(host_signum, info, puc)) if (cpu_signal_handler(host_signum, info, puc))
return; return;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册