From 553368ff504ac93455b1f58a880f24bf47ce337a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Hentschel?= Date: Sun, 31 Mar 2019 20:24:54 +0200 Subject: [PATCH] ntdll: Add stub for RtlInstallFunctionTableCallback on ARM/ARM64. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: André Hentschel Signed-off-by: Alexandre Julliard (cherry picked from commit 0e26aaa3ed80341b213508d7f2666e740bda90c8) Signed-off-by: Michael Stefaniuc --- .../api-ms-win-core-rtlsupport-l1-1-0.spec | 2 +- dlls/ntdll/ntdll.spec | 2 +- dlls/ntdll/signal_arm.c | 10 ++++++++++ dlls/ntdll/signal_arm64.c | 12 +++++++++++- include/winnt.h | 6 ++++++ 5 files changed, 29 insertions(+), 3 deletions(-) diff --git a/dlls/api-ms-win-core-rtlsupport-l1-1-0/api-ms-win-core-rtlsupport-l1-1-0.spec b/dlls/api-ms-win-core-rtlsupport-l1-1-0/api-ms-win-core-rtlsupport-l1-1-0.spec index 1c5744d7f08..644e868c572 100644 --- a/dlls/api-ms-win-core-rtlsupport-l1-1-0/api-ms-win-core-rtlsupport-l1-1-0.spec +++ b/dlls/api-ms-win-core-rtlsupport-l1-1-0/api-ms-win-core-rtlsupport-l1-1-0.spec @@ -5,7 +5,7 @@ @ stdcall -arch=x86_64 RtlCopyMemory(ptr ptr long) ntdll.RtlCopyMemory @ cdecl -arch=arm,arm64,x86_64 RtlDeleteFunctionTable(ptr) ntdll.RtlDeleteFunctionTable @ stdcall RtlFillMemory(ptr long long) ntdll.RtlFillMemory -@ cdecl -arch=x86_64 RtlInstallFunctionTableCallback(long long long ptr ptr wstr) ntdll.RtlInstallFunctionTableCallback +@ cdecl -arch=arm,arm64,x86_64 RtlInstallFunctionTableCallback(long long long ptr ptr wstr) ntdll.RtlInstallFunctionTableCallback @ stdcall -arch=arm,x86_64 RtlLookupFunctionEntry(long ptr ptr) ntdll.RtlLookupFunctionEntry @ stdcall RtlPcToFileHeader(ptr ptr) ntdll.RtlPcToFileHeader @ stdcall -norelay RtlRaiseException(ptr) ntdll.RtlRaiseException diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index c2e2fb1c66e..7f59182b24a 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -721,7 +721,7 @@ # @ stub RtlInitializeStackTraceDataBase @ stub RtlInsertElementGenericTable @ stdcall RtlInsertElementGenericTableAvl(ptr ptr long ptr) -@ cdecl -arch=x86_64 RtlInstallFunctionTableCallback(long long long ptr ptr wstr) +@ cdecl -arch=arm,arm64,x86_64 RtlInstallFunctionTableCallback(long long long ptr ptr wstr) @ stdcall RtlInt64ToUnicodeString(int64 long ptr) @ stdcall RtlIntegerToChar(long long long ptr) @ stdcall RtlIntegerToUnicodeString(long long ptr) diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c index 88914cd0962..4f505db9440 100644 --- a/dlls/ntdll/signal_arm.c +++ b/dlls/ntdll/signal_arm.c @@ -1058,6 +1058,16 @@ BOOLEAN CDECL RtlAddFunctionTable( RUNTIME_FUNCTION *table, DWORD count, DWORD a return TRUE; } +/********************************************************************** + * RtlInstallFunctionTableCallback (NTDLL.@) + */ +BOOLEAN CDECL RtlInstallFunctionTableCallback( DWORD table, DWORD base, DWORD length, + PGET_RUNTIME_FUNCTION_CALLBACK callback, PVOID context, PCWSTR dll ) +{ + FIXME( "%x %x %d %p %p %s: stub\n", table, base, length, callback, context, wine_dbgstr_w(dll) ); + return TRUE; +} + /************************************************************************* * RtlAddGrowableFunctionTable (NTDLL.@) */ diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c index e1958890af2..e15129b20dc 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -637,7 +637,7 @@ static void segv_handler( int signal, siginfo_t *info, void *ucontext ) { EXCEPTION_RECORD *rec; ucontext_t *context = ucontext; - DWORD *orig_pc = PC_sig(context); + DWORD *orig_pc = (DWORD *)PC_sig(context); /* check for page fault inside the thread stack */ if (signal == SIGSEGV && @@ -977,6 +977,16 @@ BOOLEAN CDECL RtlAddFunctionTable( RUNTIME_FUNCTION *table, DWORD count, ULONG_P return TRUE; } +/********************************************************************** + * RtlInstallFunctionTableCallback (NTDLL.@) + */ +BOOLEAN CDECL RtlInstallFunctionTableCallback( ULONG_PTR table, ULONG_PTR base, DWORD length, + PGET_RUNTIME_FUNCTION_CALLBACK callback, PVOID context, PCWSTR dll ) +{ + FIXME( "%lx %lx %d %p %p %s: stub\n", table, base, length, callback, context, wine_dbgstr_w(dll) ); + return TRUE; +} + /************************************************************************* * RtlAddGrowableFunctionTable (NTDLL.@) diff --git a/include/winnt.h b/include/winnt.h index 3a8295f1cac..20e8a8518ba 100644 --- a/include/winnt.h +++ b/include/winnt.h @@ -1741,8 +1741,11 @@ typedef struct _CONTEXT ULONG Padding2[2]; /* 198 */ } CONTEXT; +typedef PRUNTIME_FUNCTION (CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD,PVOID); + BOOLEAN CDECL RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,DWORD); BOOLEAN CDECL RtlDeleteFunctionTable(RUNTIME_FUNCTION*); +BOOLEAN CDECL RtlInstallFunctionTableCallback(DWORD,DWORD,DWORD,PGET_RUNTIME_FUNCTION_CALLBACK,PVOID,PCWSTR); PRUNTIME_FUNCTION WINAPI RtlLookupFunctionEntry(ULONG_PTR,DWORD*,UNWIND_HISTORY_TABLE*); #endif /* __arm__ */ @@ -1874,8 +1877,11 @@ typedef struct _CONTEXT DWORD64 Wvr[ARM64_MAX_WATCHPOINTS]; /* 380 */ } CONTEXT; +typedef PRUNTIME_FUNCTION (CALLBACK *PGET_RUNTIME_FUNCTION_CALLBACK)(DWORD64,PVOID); + BOOLEAN CDECL RtlAddFunctionTable(RUNTIME_FUNCTION*,DWORD,ULONG_PTR); BOOLEAN CDECL RtlDeleteFunctionTable(RUNTIME_FUNCTION*); +BOOLEAN CDECL RtlInstallFunctionTableCallback(ULONG_PTR,ULONG_PTR,DWORD,PGET_RUNTIME_FUNCTION_CALLBACK,PVOID,PCWSTR); #endif /* __aarch64__ */