Alexandre Julliard : ntdll: Fix floating point exception codes in Wow64 mode.
Alexandre Julliard
julliard at winehq.org
Fri Aug 20 16:12:55 CDT 2021
Module: wine
Branch: master
Commit: 6da06c15417d7cf08b21d0e327471e7fd702c4ec
URL: https://source.winehq.org/git/wine.git/?a=commit;h=6da06c15417d7cf08b21d0e327471e7fd702c4ec
Author: Alexandre Julliard <julliard at 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 at 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 );
}
More information about the wine-cvs
mailing list