[PATCH] ntdll, ntoskrnl: Implement a no-op __chkstk for arm64
Martin Storsjo
martin at martin.st
Fri Dec 18 16:33:52 CST 2020
Signed-off-by: Martin Storsjo <martin at martin.st>
---
dlls/kernel32/kernel32.spec | 2 +-
dlls/kernelbase/kernelbase.spec | 2 +-
dlls/ntdll/ntdll.spec | 2 +-
dlls/ntdll/signal_arm64.c | 7 +++++++
dlls/ntoskrnl.exe/ntoskrnl.c | 7 +++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +-
6 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 949b262a592..ee2e3f8ad31 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -1647,7 +1647,7 @@
@ stdcall WriteTapemark(ptr long long long)
@ stdcall -import ZombifyActCtx(ptr)
@ stdcall -arch=x86_64 -private __C_specific_handler(ptr long ptr ptr) ntdll.__C_specific_handler
-@ cdecl -arch=arm,x86_64 -norelay __chkstk() ntdll.__chkstk
+@ cdecl -arch=arm,arm64,x86_64 -norelay __chkstk() ntdll.__chkstk
@ stub _DebugOut
@ stub _DebugPrintf
@ stdcall _hread(long ptr long)
diff --git a/dlls/kernelbase/kernelbase.spec b/dlls/kernelbase/kernelbase.spec
index 36d0492857f..b02737f045b 100644
--- a/dlls/kernelbase/kernelbase.spec
+++ b/dlls/kernelbase/kernelbase.spec
@@ -1742,7 +1742,7 @@
# @ stub _GetMUIStringFromCache
# @ stub _OpenMuiStringCache
@ stdcall -arch=x86_64 -private __C_specific_handler(ptr long ptr ptr) ntdll.__C_specific_handler
-@ cdecl -arch=arm,x86_64 -norelay __chkstk() ntdll.__chkstk
+@ cdecl -arch=arm,arm64,x86_64 -norelay __chkstk() ntdll.__chkstk
# @ stub __dllonexit3
@ stub __misaligned_access
# @ stub __wgetmainargs
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index b9acb120844..f3ec8fd9e39 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -1445,7 +1445,7 @@
@ cdecl -private -arch=i386 _CIsin()
@ cdecl -private -arch=i386 _CIsqrt()
@ stdcall -arch=x86_64,arm64 __C_specific_handler(ptr long ptr ptr)
-@ cdecl -arch=arm,x86_64 -norelay __chkstk()
+@ cdecl -arch=arm,arm64,x86_64 -norelay __chkstk()
@ cdecl __isascii(long)
@ cdecl __iscsym(long)
@ cdecl __iscsymf(long)
diff --git a/dlls/ntdll/signal_arm64.c b/dlls/ntdll/signal_arm64.c
index c31eb510382..6ca49481c77 100644
--- a/dlls/ntdll/signal_arm64.c
+++ b/dlls/ntdll/signal_arm64.c
@@ -100,6 +100,13 @@ static inline BOOL is_valid_frame( ULONG_PTR frame )
}
+/**************************************************************************
+ * __chkstk (NTDLL.@)
+ *
+ * Supposed to touch all the stack pages, but we shouldn't need that.
+ */
+__ASM_GLOBAL_FUNC( __chkstk, "ret")
+
/***********************************************************************
* RtlCaptureContext (NTDLL.@)
*/
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 4092e33db43..23ca0c1c51d 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -3858,6 +3858,13 @@ __ASM_GLOBAL_FUNC( _chkstk,
*/
__ASM_GLOBAL_FUNC( __chkstk, "lsl r4, r4, #2\n\t"
"bx lr" )
+#elif defined(__aarch64__)
+/**************************************************************************
+ * __chkstk (NTOSKRNL.@)
+ *
+ * Supposed to touch all the stack pages, but we shouldn't need that.
+ */
+__ASM_GLOBAL_FUNC( __chkstk, "ret" );
#endif
/*********************************************************************
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 6ac70c718f1..d57a2f81df6 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -1522,7 +1522,7 @@
@ stdcall ZwWriteFile(long long ptr ptr ptr ptr long ptr ptr) NtWriteFile
@ stdcall -private ZwYieldExecution() NtYieldExecution
@ stdcall -arch=x86_64 __C_specific_handler(ptr long ptr ptr)
-@ cdecl -arch=arm,x86_64 -norelay __chkstk()
+@ cdecl -arch=arm,arm64,x86_64 -norelay __chkstk()
@ cdecl -private -arch=i386 _CIcos()
@ cdecl -private -arch=i386 _CIsin()
@ cdecl -private -arch=i386 _CIsqrt()
--
2.17.1
More information about the wine-devel
mailing list