Module: wine Branch: master Commit: ec2e266c7643d80f0a466c545e68d29ad5f5e1dd URL: https://gitlab.winehq.org/wine/wine/-/commit/ec2e266c7643d80f0a466c545e68d29...
Author: Alexandre Julliard julliard@winehq.org Date: Wed Mar 6 11:23:47 2024 +0100
ntdll: Implement KiUserExceptionDispatcher on ARM64EC.
---
dlls/ntdll/signal_arm64ec.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-)
diff --git a/dlls/ntdll/signal_arm64ec.c b/dlls/ntdll/signal_arm64ec.c index 08284b6a917..f56931a9e4b 100644 --- a/dlls/ntdll/signal_arm64ec.c +++ b/dlls/ntdll/signal_arm64ec.c @@ -1674,19 +1674,28 @@ NTSTATUS call_seh_handlers( EXCEPTION_RECORD *rec, CONTEXT *orig_context ) /******************************************************************* * KiUserExceptionDispatcher (NTDLL.@) */ -NTSTATUS WINAPI KiUserExceptionDispatcher( EXCEPTION_RECORD *rec, CONTEXT *context ) +static NTSTATUS __attribute__((used)) dispatch_exception_arm64ec( EXCEPTION_RECORD *rec, ARM64_NT_CONTEXT *arm_ctx ) { - FIXME( "not implemented\n" ); - return STATUS_INVALID_DISPOSITION; + ARM64EC_NT_CONTEXT context; + + context_arm_to_x64( &context, arm_ctx ); + return dispatch_exception( rec, &context.AMD64_Context ); } +__ASM_GLOBAL_FUNC( "#KiUserExceptionDispatcher", + ".seh_context\n\t" + ".seh_endprologue\n\t" + "add x0, sp, #0x390\n\t" /* rec (context + 1) */ + "mov x1, sp\n\t" /* context */ + "bl dispatch_exception_arm64ec\n\t" + "brk #1" )
/******************************************************************* * KiUserApcDispatcher (NTDLL.@) */ -void WINAPI dispatch_apc( void (CALLBACK *func)(ULONG_PTR,ULONG_PTR,ULONG_PTR,CONTEXT*), - ULONG_PTR arg1, ULONG_PTR arg2, ULONG_PTR arg3, - BOOLEAN alertable, ARM64_NT_CONTEXT *arm_ctx ) +static void __attribute__((used)) dispatch_apc( void (CALLBACK *func)(ULONG_PTR,ULONG_PTR,ULONG_PTR,CONTEXT*), + ULONG_PTR arg1, ULONG_PTR arg2, ULONG_PTR arg3, + BOOLEAN alertable, ARM64_NT_CONTEXT *arm_ctx ) { ARM64EC_NT_CONTEXT context;