From 4c1c8712f0e0a700fc7af5cf06f3425826ba9a2f Mon Sep 17 00:00:00 2001 From: mostobriv Date: Wed, 27 Aug 2025 13:42:40 +0700 Subject: [PATCH] Add Apple arm64 syscall calling convention to Apple's platforms --- arch/arm64/arch_arm64.cpp | 9 ++++++--- platform/mac/platform_mac.cpp | 9 +++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/arch/arm64/arch_arm64.cpp b/arch/arm64/arch_arm64.cpp index 7ca02a7e4d..5faf37e58b 100644 --- a/arch/arm64/arch_arm64.cpp +++ b/arch/arm64/arch_arm64.cpp @@ -2692,15 +2692,15 @@ class WindowsArm64SystemCallConvention : public CallingConvention virtual bool IsEligibleForHeuristics() override { return false; } }; -class MacosArm64SystemCallConvention : public CallingConvention +class AppleArm64SystemCallConvention : public CallingConvention { public: - MacosArm64SystemCallConvention(Architecture* arch) : CallingConvention(arch, "macos-syscall") {} + AppleArm64SystemCallConvention(Architecture* arch) : CallingConvention(arch, "apple-syscall") {} virtual vector GetIntegerArgumentRegisters() override { - return vector {REG_X16, REG_X0, REG_X1, REG_X2, REG_X3, REG_X4, REG_X5}; + return vector {REG_X16, REG_X0, REG_X1, REG_X2, REG_X3, REG_X4, REG_X5, REG_X6, REG_X7, REG_X8}; } @@ -3500,6 +3500,9 @@ extern "C" conv = new WindowsArm64SystemCallConvention(arm64); arm64->RegisterCallingConvention(conv); + conv = new AppleArm64SystemCallConvention(arm64); + arm64->RegisterCallingConvention(conv); + conv = new AppleArm64CallingConvention(arm64); arm64->RegisterCallingConvention(conv); diff --git a/platform/mac/platform_mac.cpp b/platform/mac/platform_mac.cpp index 2eec7f530b..97bf195029 100644 --- a/platform/mac/platform_mac.cpp +++ b/platform/mac/platform_mac.cpp @@ -143,6 +143,10 @@ class MacArm64Platform: public Platform RegisterFastcallCallingConvention(cc); RegisterStdcallCallingConvention(cc); } + + cc = arch->GetCallingConventionByName("apple-syscall"); + if (cc) + SetSystemCallConvention(cc); } virtual bool GetFallbackEnabled() override @@ -232,6 +236,11 @@ class IOSArm64Platform: public Platform RegisterFastcallCallingConvention(cc); RegisterStdcallCallingConvention(cc); } + + cc = arch->GetCallingConventionByName("apple-syscall"); + if (cc) + SetSystemCallConvention(cc); + } virtual bool GetFallbackEnabled() override