summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornormalcoder <normalcoder@gmail.com>2021-12-19 00:12:08 +0300
committerZubin Duggal <zubin.duggal@gmail.com>2022-11-07 00:06:37 +0530
commit74ca6191fa0dbbe8cee3dc53741b8d59fbf16b09 (patch)
tree1eab9fed8b616f9feae349dd3fde86be7ea90f23
parent784324bce728e55e3f304822dff4ad23bbded807 (diff)
downloadhaskell-74ca6191fa0dbbe8cee3dc53741b8d59fbf16b09.tar.gz
ncg/aarch64: Don't use x18 register on AArch64/Darwinghc-9.2.5-release
Apple's ABI documentation [1] says: "The platforms reserve register x18. Don’t use this register." While this wasn't problematic in previous Darwin releases, macOS 13 appears to start zeroing this register periodically. See #21964. [1] https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms (cherry picked from commit 67575f2004340564d6e52af055ed6fb43d3f9711)
-rw-r--r--docs/users_guide/9.2.5-notes.rst2
-rw-r--r--includes/CodeGen.Platform.hs8
2 files changed, 10 insertions, 0 deletions
diff --git a/docs/users_guide/9.2.5-notes.rst b/docs/users_guide/9.2.5-notes.rst
index fca1f59d17..54e5a1a2c6 100644
--- a/docs/users_guide/9.2.5-notes.rst
+++ b/docs/users_guide/9.2.5-notes.rst
@@ -21,6 +21,8 @@ Compiler
- Fix a code generation panic when using SIMD types with unboxed sums (:ghc-ticket:`22187`).
+- Fix a code generation bug with the native code generator on aarch64 darwin leading to runtime segmentation faults due to an incorrect ABI (:ghc-ticket:`21964`)
+
Runtime system
--------------
diff --git a/includes/CodeGen.Platform.hs b/includes/CodeGen.Platform.hs
index 0dfac62a3f..ebec0212bd 100644
--- a/includes/CodeGen.Platform.hs
+++ b/includes/CodeGen.Platform.hs
@@ -1028,6 +1028,14 @@ freeReg 29 = False
-- ip0 -- used for spill offset computations
freeReg 16 = False
+#if defined(darwin_HOST_OS) || defined(ios_HOST_OS)
+-- x18 is reserved by the platform on Darwin/iOS, and can not be used
+-- More about ARM64 ABI that Apple platforms support:
+-- https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms
+-- https://github.com/Siguza/ios-resources/blob/master/bits/arm64.md
+freeReg 18 = False
+#endif
+
# if defined(REG_Base)
freeReg REG_Base = False
# endif