Alexandre Julliard : ntdll: Handle alignment fault in signal handler on i386.
Alexandre Julliard
julliard at winehq.org
Thu Sep 12 16:28:56 CDT 2019
Module: wine
Branch: master
Commit: 846de4aef8bebcd165223d5f0d1ad6363cab739c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=846de4aef8bebcd165223d5f0d1ad6363cab739c
Author: Alexandre Julliard <julliard at winehq.org>
Date: Thu Sep 12 19:34:04 2019 +0200
ntdll: Handle alignment fault in signal handler on i386.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/ntdll/signal_i386.c | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
diff --git a/dlls/ntdll/signal_i386.c b/dlls/ntdll/signal_i386.c
index 580bfb2d5c..4087b9b0c1 100644
--- a/dlls/ntdll/signal_i386.c
+++ b/dlls/ntdll/signal_i386.c
@@ -1956,15 +1956,6 @@ static void WINAPI raise_segv_exception( EXCEPTION_RECORD *rec, CONTEXT *context
}
}
break;
- case EXCEPTION_DATATYPE_MISALIGNMENT:
- /* FIXME: pass through exception handler first? */
- if (context->EFlags & 0x00040000)
- {
- /* Disable AC flag, return */
- context->EFlags &= ~0x00040000;
- goto done;
- }
- break;
case EXCEPTION_BREAKPOINT:
if (!is_wow64)
{
@@ -2078,6 +2069,12 @@ static void segv_handler( int signal, siginfo_t *siginfo, void *sigcontext )
stack->rec.ExceptionInformation[1] = (ULONG_PTR)siginfo->si_addr;
break;
case TRAP_x86_ALIGNFLT: /* Alignment check exception */
+ /* FIXME: pass through exception handler first? */
+ if (stack->context.EFlags & 0x00040000)
+ {
+ EFL_sig(context) &= ~0x00040000; /* disable AC flag */
+ return;
+ }
stack->rec.ExceptionCode = EXCEPTION_DATATYPE_MISALIGNMENT;
break;
default:
More information about the wine-cvs
mailing list