Module: wine Branch: master Commit: 9c6fb2b30c870e9e50079a0c49426c90353198df URL: https://gitlab.winehq.org/wine/wine/-/commit/9c6fb2b30c870e9e50079a0c49426c9...
Author: Alexandre Julliard julliard@winehq.org Date: Tue Jun 18 12:55:41 2024 +0200
kernelbase: Send cross process notifications in FlushInstructionCache on ARM64.
---
dlls/kernelbase/memory.c | 16 ++++++++++++++++ dlls/kernelbase/process.c | 9 --------- dlls/ntdll/tests/wow64.c | 1 - 3 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/dlls/kernelbase/memory.c b/dlls/kernelbase/memory.c index 2e30ebc9067..faa6bd7d5ee 100644 --- a/dlls/kernelbase/memory.c +++ b/dlls/kernelbase/memory.c @@ -122,6 +122,22 @@ BOOL WINAPI DECLSPEC_HOTPATCH FlushViewOfFile( const void *base, SIZE_T size ) }
+/**************************************************************************** + * FlushInstructionCache (kernelbase.@) + */ +BOOL WINAPI DECLSPEC_HOTPATCH FlushInstructionCache( HANDLE process, LPCVOID addr, SIZE_T size ) +{ + CROSS_PROCESS_WORK_LIST *list; + + if ((list = open_cross_process_connection( process ))) + { + send_cross_process_notification( list, CrossProcessFlushCache, addr, size, 0 ); + close_cross_process_connection( list ); + } + return set_ntstatus( NtFlushInstructionCache( process, addr, size )); +} + + /*********************************************************************** * GetLargePageMinimum (kernelbase.@) */ diff --git a/dlls/kernelbase/process.c b/dlls/kernelbase/process.c index 775512e7f0d..2d08481cd35 100644 --- a/dlls/kernelbase/process.c +++ b/dlls/kernelbase/process.c @@ -737,15 +737,6 @@ BOOL WINAPI DECLSPEC_HOTPATCH DuplicateHandle( HANDLE source_process, HANDLE sou }
-/**************************************************************************** - * FlushInstructionCache (kernelbase.@) - */ -BOOL WINAPI DECLSPEC_HOTPATCH FlushInstructionCache( HANDLE process, LPCVOID addr, SIZE_T size ) -{ - return set_ntstatus( NtFlushInstructionCache( process, addr, size )); -} - - /*********************************************************************** * GetApplicationRestartSettings (kernelbase.@) */ diff --git a/dlls/ntdll/tests/wow64.c b/dlls/ntdll/tests/wow64.c index 5d4fe4f9fef..67770cb9b59 100644 --- a/dlls/ntdll/tests/wow64.c +++ b/dlls/ntdll/tests/wow64.c @@ -713,7 +713,6 @@ static void test_cross_process_notifications( HANDLE process, ULONG_PTR section,
FlushInstructionCache( process, addr, 0x1234 ); entry = pop_from_work_list( &list->work_list ); - todo_wine_if (current_machine == IMAGE_FILE_MACHINE_ARM64) entry = expect_cross_work_entry( list, entry, CrossProcessFlushCache, addr, 0x1234, 0xcccccccc, 0xcccccccc, 0xcccccccc, 0xcccccccc ); ok( !entry, "not at end of list\n" );