Does this attached patch perhaps fix the ARM case? It just uses FPE_FLTUNK as the default si_code for SIGFPE, which seems sane enough. And then gets rid of FPE_FIXME, which should resolve the nasty case. Hmm? Entirely untested, and I didn't really look at the test-case in question since I can't really run it anyway. Well, I could run it all on x86-64, but it doesn't have that FPE_FIXME case at all. Linus
arch/arm/include/uapi/asm/siginfo.h | 7 ------- arch/arm/vfp/vfpmodule.c | 4 ++-- 2 files changed, 2 insertions(+), 9 deletions(-) diff --git a/arch/arm/include/uapi/asm/siginfo.h b/arch/arm/include/uapi/asm/siginfo.h index d0513880be21..d87beeedb4c4 100644 --- a/arch/arm/include/uapi/asm/siginfo.h +++ b/arch/arm/include/uapi/asm/siginfo.h @@ -3,11 +3,4 @@ #include <asm-generic/siginfo.h> -/* - * SIGFPE si_codes - */ -#ifdef __KERNEL__ -#define FPE_FIXME 0 /* Broken dup of SI_USER */ -#endif /* __KERNEL__ */ - #endif diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c index 4c375e11ae95..012c6e690303 100644 --- a/arch/arm/vfp/vfpmodule.c +++ b/arch/arm/vfp/vfpmodule.c @@ -251,13 +251,13 @@ static void vfp_panic(char *reason, u32 inst) */ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_regs *regs) { - int si_code = 0; + int si_code = FPE_FLTUNK; pr_debug("VFP: raising exceptions %08x\n", exceptions); if (exceptions == VFP_EXCEPTION_ERROR) { vfp_panic("unhandled bounce", inst); - vfp_raise_sigfpe(FPE_FIXME, regs); + vfp_raise_sigfpe(si_code, regs); return; }