From a1955bfb6e49209568eef561e6ead0376a2162e5 Mon Sep 17 00:00:00 2001 From: Martin Storsjo Date: Sat, 19 Dec 2020 00:33:52 +0200 Subject: [PATCH] ntdll: Implement a no-op __chkstk for arm64. Signed-off-by: Martin Storsjo Signed-off-by: Alexandre Julliard --- dlls/kernel32/kernel32.spec | 2 +- dlls/kernelbase/kernelbase.spec | 2 +- dlls/ntdll/ntdll.spec | 2 +- dlls/ntdll/signal_arm64.c | 8 ++++++++ dlls/ntoskrnl.exe/ntoskrnl.c | 18 ++++++------------ dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +- 6 files changed, 18 insertions(+), 16 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 4c4694959f0..9db8a8b17b4 100644 --- a/dlls/ntdll/signal_arm64.c +++ b/dlls/ntdll/signal_arm64.c @@ -100,6 +100,14 @@ 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..2e6131c32c7 100644 --- a/dlls/ntoskrnl.exe/ntoskrnl.c +++ b/dlls/ntoskrnl.exe/ntoskrnl.c @@ -3831,18 +3831,13 @@ PKEVENT WINAPI IoCreateNotificationEvent(UNICODE_STRING *name, HANDLE *handle) } -#ifdef __x86_64__ /************************************************************************** * __chkstk (NTOSKRNL.@) - * - * Supposed to touch all the stack pages, but we shouldn't need that. */ +#ifdef __x86_64__ +/* Supposed to touch all the stack pages, but we shouldn't need that. */ __ASM_GLOBAL_FUNC( __chkstk, "ret" ); - #elif defined(__i386__) -/************************************************************************** - * _chkstk (NTOSKRNL.@) - */ __ASM_GLOBAL_FUNC( _chkstk, "negl %eax\n\t" "addl %esp,%eax\n\t" @@ -3851,13 +3846,12 @@ __ASM_GLOBAL_FUNC( _chkstk, "movl %eax,0(%esp)\n\t" "ret" ) #elif defined(__arm__) -/************************************************************************** - * __chkstk (NTDLL.@) - * - * Incoming r4 contains words to allocate, converting to bytes then return - */ +/* Incoming r4 contains words to allocate, converting to bytes then return */ __ASM_GLOBAL_FUNC( __chkstk, "lsl r4, r4, #2\n\t" "bx lr" ) +#elif defined(__aarch64__) +/* 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()