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