[PATCH 1/2] ntdll: Add RtlAddGrowableFunctionTable stub
From: Austin English <austinenglish(a)gmail.com> Signed-off-by: Alex Henrie <alexhenrie24(a)gmail.com> --- Copied from https://bugs.winehq.org/show_bug.cgi?id=42255 with minor changes. Xenia needs this function to return S_OK. However, if I understand correctly, faking success is fine because Xenia only needs these function tables for debug backtraces, which are not produced during the normal operation of the program. Fixes https://bugs.winehq.org/show_bug.cgi?id=42255 dlls/ntdll/ntdll.spec | 1 + dlls/ntdll/signal_arm.c | 10 ++++++++++ dlls/ntdll/signal_x86_64.c | 12 ++++++++++++ 3 files changed, 23 insertions(+) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 035fad2058..3813e43707 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -428,6 +428,7 @@ @ stdcall RtlAddMandatoryAce(ptr long long long long ptr) # @ stub RtlAddRange @ cdecl -arch=arm,x86_64 RtlAddFunctionTable(ptr long long) +@ cdecl -arch=arm,x86_64 RtlAddGrowableFunctionTable(ptr ptr long long long long) @ stdcall RtlAddRefActivationContext(ptr) # @ stub RtlAddRefMemoryStream @ stdcall RtlAddVectoredContinueHandler(long ptr) diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c index d60c2a9dc2..1bd9b766d4 100644 --- a/dlls/ntdll/signal_arm.c +++ b/dlls/ntdll/signal_arm.c @@ -1043,6 +1043,16 @@ BOOLEAN CDECL RtlAddFunctionTable( RUNTIME_FUNCTION *table, DWORD count, DWORD a return TRUE; } +/************************************************************************* + * RtlAddGrowableFunctionTable (NTDLL.@) + */ +DWORD WINAPI RtlAddGrowableFunctionTable( void **table, RUNTIME_FUNCTION *functions, DWORD count, DWORD max_count, + ULONG_PTR base, ULONG_PTR end ) +{ + FIXME( "(%p, %p, %d, %d, %ld, %ld) stub!\n", table, functions, count, max_count, base, end ); + if (table) *table = NULL; + return S_OK; +} /********************************************************************** * RtlDeleteFunctionTable (NTDLL.@) diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index abd3174f22..872452eb35 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -3201,6 +3201,18 @@ BOOLEAN CDECL RtlInstallFunctionTableCallback( DWORD64 table, DWORD64 base, DWOR } +/************************************************************************* + * RtlAddGrowableFunctionTable (NTDLL.@) + */ +DWORD WINAPI RtlAddGrowableFunctionTable( void **table, RUNTIME_FUNCTION *functions, DWORD count, DWORD max_count, + ULONG_PTR base, ULONG_PTR end ) +{ + FIXME( "(%p, %p, %d, %d, %ld, %ld) stub!\n", table, functions, count, max_count, base, end ); + if (table) *table = NULL; + return S_OK; +} + + /********************************************************************** * RtlDeleteFunctionTable (NTDLL.@) */ -- 2.16.1
Signed-off-by: Alex Henrie <alexhenrie24(a)gmail.com> --- After this, the only thing that Xenia seems to want is Vulkan support-- Running Xenia with +msvcrt reveals the error message "Unable to initialize Vulkan graphics subsystem." dlls/ntdll/ntdll.spec | 1 + dlls/ntdll/signal_arm.c | 8 ++++++++ dlls/ntdll/signal_x86_64.c | 9 +++++++++ 3 files changed, 18 insertions(+) diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec index 3813e43707..c452c2e360 100644 --- a/dlls/ntdll/ntdll.spec +++ b/dlls/ntdll/ntdll.spec @@ -674,6 +674,7 @@ @ stdcall RtlGetUnloadEventTrace() @ stub RtlGetUserInfoHeap @ stdcall RtlGetVersion(ptr) +@ stdcall -arch=arm,x86_64 RtlGrowFunctionTable(ptr long) @ stub RtlGuidToPropertySetName @ stdcall RtlHashUnicodeString(ptr long long ptr) @ stdcall RtlIdentifierAuthoritySid(ptr) diff --git a/dlls/ntdll/signal_arm.c b/dlls/ntdll/signal_arm.c index 1bd9b766d4..7c4d0faa97 100644 --- a/dlls/ntdll/signal_arm.c +++ b/dlls/ntdll/signal_arm.c @@ -1054,6 +1054,14 @@ DWORD WINAPI RtlAddGrowableFunctionTable( void **table, RUNTIME_FUNCTION *functi return S_OK; } +/************************************************************************* + * RtlGrowFunctionTable (NTDLL.@) + */ +void WINAPI RtlGrowFunctionTable( void *table, DWORD count ) +{ + FIXME( "(%p, %d) stub!\n", table, count ); +} + /********************************************************************** * RtlDeleteFunctionTable (NTDLL.@) */ diff --git a/dlls/ntdll/signal_x86_64.c b/dlls/ntdll/signal_x86_64.c index 872452eb35..b081f23b05 100644 --- a/dlls/ntdll/signal_x86_64.c +++ b/dlls/ntdll/signal_x86_64.c @@ -3213,6 +3213,15 @@ DWORD WINAPI RtlAddGrowableFunctionTable( void **table, RUNTIME_FUNCTION *functi } +/************************************************************************* + * RtlGrowFunctionTable (NTDLL.@) + */ +void WINAPI RtlGrowFunctionTable( void *table, DWORD count ) +{ + FIXME( "(%p, %d) stub!\n", table, count ); +} + + /********************************************************************** * RtlDeleteFunctionTable (NTDLL.@) */ -- 2.16.1
On 1/25/2018 10:13 AM, Alex Henrie wrote:
+/************************************************************************* + * RtlAddGrowableFunctionTable (NTDLL.@) + */ +DWORD WINAPI RtlAddGrowableFunctionTable( void **table, RUNTIME_FUNCTION *functions, DWORD count, DWORD max_count, + ULONG_PTR base, ULONG_PTR end ) +{ + FIXME( "(%p, %p, %d, %d, %ld, %ld) stub!\n", table, functions, count, max_count, base, end ); + if (table) *table = NULL; + return S_OK; +} +
In 10.0.15063.0 SDK it's defined in two headers apparently, one of them uses NTSTATUS, it probably makes sense to use that too. In any case S_OK looks inappropriate.
participants (2)
-
Alex Henrie -
Nikolay Sivov