Module: wine Branch: master Commit: 6da06c15417d7cf08b21d0e327471e7fd702c4ec URL: https://source.winehq.org/git/wine.git/?a=commit;h=6da06c15417d7cf08b21d0e32...
Author: Alexandre Julliard julliard@winehq.org Date: Fri Aug 20 11:33:46 2021 +0200
ntdll: Fix floating point exception codes in Wow64 mode.
Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/ntdll/unix/signal_x86_64.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c index f541306d950..e6971b4629a 100644 --- a/dlls/ntdll/unix/signal_x86_64.c +++ b/dlls/ntdll/unix/signal_x86_64.c @@ -2694,7 +2694,10 @@ static void fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext ) break; case FPE_FLTINV: default: - rec.ExceptionCode = EXCEPTION_FLT_INVALID_OPERATION; + if (FPU_sig(ucontext) && FPU_sig(ucontext)->StatusWord & 0x40) + rec.ExceptionCode = EXCEPTION_FLT_STACK_CHECK; + else + rec.ExceptionCode = EXCEPTION_FLT_INVALID_OPERATION; break; }
@@ -2703,6 +2706,7 @@ static void fpe_handler( int signal, siginfo_t *siginfo, void *sigcontext ) rec.NumberParameters = 2; rec.ExceptionInformation[0] = 0; rec.ExceptionInformation[1] = FPU_sig(ucontext) ? FPU_sig(ucontext)->MxCsr : 0; + if (CS_sig(ucontext) != cs64_sel) rec.ExceptionCode = STATUS_FLOAT_MULTIPLE_TRAPS; } setup_exception( sigcontext, &rec ); }