Module: wine Branch: master Commit: 846de4aef8bebcd165223d5f0d1ad6363cab739c URL: https://source.winehq.org/git/wine.git/?a=commit;h=846de4aef8bebcd165223d5f0...
Author: Alexandre Julliard julliard@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@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: