Module: wine Branch: stable Commit: 3b216ff5ded073343b17eef5fc7b317c1b4934c3 URL: https://source.winehq.org/git/wine.git/?a=commit;h=3b216ff5ded073343b17eef5f...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Mon Mar 26 22:58:55 2018 +0000
ntoskrnl.exe: Implement _chkstk.
These are just copied from ntdll.
Signed-off-by: Alistair Leslie-Hughes leslie_alistair@hotmail.com Signed-off-by: Alexandre Julliard julliard@winehq.org (cherry picked from commit 075cbd34747390720e4b28be6b105b1a026c2844) Signed-off-by: Michael Stefaniuc mstefani@winehq.org
---
dlls/ntoskrnl.exe/ntoskrnl.c | 30 ++++++++++++++++++++++++++++++ dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 ++ 2 files changed, 32 insertions(+)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c index 315402a..5bea991 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -3316,3 +3316,33 @@ INT __cdecl NTOSKRNL_wcsncmp( LPCWSTR str1, LPCWSTR str2, INT n ) { return strncmpW( str1, str2, n ); } + + +#ifdef __x86_64__ +/************************************************************************** + * __chkstk (NTOSKRNL.@) + * + * Supposed to touch all the stack pages, but we shouldn't need that. + */ +__ASM_GLOBAL_FUNC( __chkstk, "ret" ); + +#elif defined(__i386__) +/************************************************************************** + * _chkstk (NTOSKRNL.@) + */ +__ASM_STDCALL_FUNC( _chkstk, 0, + "negl %eax\n\t" + "addl %esp,%eax\n\t" + "xchgl %esp,%eax\n\t" + "movl 0(%eax),%eax\n\t" /* copy return address from old location */ + "movl %eax,0(%esp)\n\t" + "ret" ) +#elif defined(__arm__) +/************************************************************************** + * __chkstk (NTDLL.@) + * + * Incoming r4 contains words to allocate, converting to bytes then return + */ +__ASM_GLOBAL_FUNC( __chkstk, "lsl r4, r4, #2\n\t" + "bx lr" ) +#endif diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec index e8b8dff..0e4af90 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec +++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec @@ -1397,6 +1397,7 @@ @ stdcall -private ZwWaitForSingleObject(long long ptr) NtWaitForSingleObject @ stdcall -private ZwWriteFile(long long ptr ptr ptr ptr long ptr ptr) NtWriteFile @ stdcall -private ZwYieldExecution() NtYieldExecution +@ stdcall -private -arch=arm,x86_64 -norelay __chkstk() @ cdecl -private -arch=i386 _CIcos() msvcrt._CIcos @ cdecl -private -arch=i386 _CIsin() msvcrt._CIsin @ cdecl -private -arch=i386 _CIsqrt() msvcrt._CIsqrt @@ -1412,6 +1413,7 @@ @ stub _aulldvrm @ stdcall -private -arch=i386 -ret64 _aullrem(int64 int64) @ stdcall -private -arch=i386 -ret64 _aullshr(int64 long) +@ stdcall -private -arch=i386 -norelay _chkstk() @ cdecl -private -arch=i386 _except_handler2(ptr ptr ptr ptr) msvcrt._except_handler2 @ cdecl -private -arch=i386 _except_handler3(ptr ptr ptr ptr) msvcrt._except_handler3 @ cdecl -private -arch=i386 _global_unwind2(ptr) msvcrt._global_unwind2