Module: wine Branch: master Commit: eccf92996c88adee809cea6e1416fa72e4c92ef3 URL: https://gitlab.winehq.org/wine/wine/-/commit/eccf92996c88adee809cea6e1416fa7...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Mar 8 11:42:58 2023 +0100
ntdll: Always call Wow64PrepareForException when dispatching an exception.
---
dlls/ntdll/signal_arm64.c | 2 ++ dlls/ntdll/signal_x86_64.c | 3 ++- dlls/wow64cpu/cpu.c | 2 ++ 3 files changed, 6 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c index cadf774be67..2eed51b101e 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -494,6 +494,8 @@ NTSTATUS WINAPI KiUserExceptionDispatcher( EXCEPTION_RECORD *rec, CONTEXT *conte NTSTATUS status; DWORD c;
+ if (pWow64PrepareForException) pWow64PrepareForException( rec, context ); + TRACE( "code=%lx flags=%lx addr=%p pc=%016I64x\n", rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress, context->Pc ); for (c = 0; c < rec->NumberParameters; c++) diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index 81479f1fd91..7ebd52766e6 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -508,6 +508,8 @@ NTSTATUS WINAPI dispatch_exception( EXCEPTION_RECORD *rec, CONTEXT *context ) NTSTATUS status; DWORD c;
+ if (pWow64PrepareForException) pWow64PrepareForException( rec, context ); + TRACE_(seh)( "code=%lx flags=%lx addr=%p ip=%Ix\n", rec->ExceptionCode, rec->ExceptionFlags, rec->ExceptionAddress, context->Rip ); for (c = 0; c < min( EXCEPTION_MAXIMUM_PARAMETERS, rec->NumberParameters ); c++) @@ -584,7 +586,6 @@ NTSTATUS WINAPI dispatch_wow_exception( EXCEPTION_RECORD *rec_ptr, CONTEXT *cont RtlInitializeExtendedContext( buffer, context_ptr->ContextFlags, &context_ex ); context = RtlLocateLegacyContext( context_ex, NULL ); RtlCopyContext( context, context_ptr->ContextFlags, context_ptr ); - pWow64PrepareForException( &rec, context ); return dispatch_exception( &rec, context ); }
diff --git a/dlls/wow64cpu/cpu.c b/dlls/wow64cpu/cpu.c index 13c94751d19..5bcaf9d1c45 100644 --- a/dlls/wow64cpu/cpu.c +++ b/dlls/wow64cpu/cpu.c @@ -375,6 +375,8 @@ NTSTATUS WINAPI BTCpuResetToConsistentState( EXCEPTION_POINTERS *ptrs ) CONTEXT *context = ptrs->ContextRecord; I386_CONTEXT wow_context;
+ if (context->SegCs == cs64_sel) return STATUS_SUCCESS; /* exception in 64-bit code, nothing to do */ + copy_context_64to32( &wow_context, CONTEXT_I386_ALL, context ); wow_context.EFlags &= ~(0x100|0x40000); BTCpuSetContext( GetCurrentThread(), GetCurrentProcess(), NULL, &wow_context );