1
0
mirror of https://github.com/wine-mirror/wine synced 2024-07-08 20:06:18 +00:00

ntdll: Implement KiUserCallbackDispatcher for ARM64EC.

This commit is contained in:
Alexandre Julliard 2023-12-07 14:44:32 +01:00
parent 3c94236186
commit 9e0f2e3b92

View File

@ -1694,10 +1694,35 @@ void WINAPI KiUserApcDispatcher( CONTEXT *context, ULONG_PTR arg1, ULONG_PTR arg
/*******************************************************************
* KiUserCallbackDispatcher (NTDLL.@)
*/
void WINAPI KiUserCallbackDispatcher( ULONG id, void *args, ULONG len )
void WINAPI dispatch_callback( void *args, ULONG len, ULONG id )
{
FIXME( "not implemented\n" );
NTSTATUS status;
__TRY
{
NTSTATUS (WINAPI *func)(void *, ULONG) = ((void **)NtCurrentTeb()->Peb->KernelCallbackTable)[id];
status = NtCallbackReturn( NULL, 0, func( args, len ));
}
__EXCEPT_ALL
{
ERR_(seh)( "ignoring exception\n" );
status = NtCallbackReturn( 0, 0, 0 );
}
__ENDTRY
RtlRaiseStatus( status );
}
__ASM_GLOBAL_FUNC( "#KiUserCallbackDispatcher",
__ASM_SEH(".seh_pushframe\n\t")
"nop\n\t"
__ASM_SEH(".seh_stackalloc 0x20\n\t")
"nop\n\t"
__ASM_SEH(".seh_save_reg lr, 0x18\n\t")
__ASM_SEH(".seh_endprologue\n\t")
"ldr x0, [sp]\n\t" /* args */
"ldp w1, w2, [sp, #0x08]\n\t" /* len, id */
"bl " __ASM_NAME("dispatch_callback") "\n\t"
"brk #1" )
/**************************************************************************