[PATCH] ntoskrnl.exe: Implement _chkstk
Alistair Leslie-Hughes
leslie_alistair at hotmail.com
Mon Mar 26 17:58:55 CDT 2018
These are just copied from ntdll.
Fixes https://bugs.winehq.org/show_bug.cgi?id=44811
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
---
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 d8277a9..e3d72ba 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -3373,3 +3373,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 dca1404..8265f1e 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -1416,6 +1416,8 @@
@ stub _aulldvrm
@ stdcall -private -arch=i386 -ret64 _aullrem(int64 int64)
@ stdcall -private -arch=i386 -ret64 _aullshr(int64 long)
+@ stdcall -private -arch=i386 -norelay _chkstk()
+@ stdcall -private -arch=arm,x86_64 -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
--
1.9.1
More information about the wine-devel
mailing list