mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-20 14:08:20 +00:00
Update GMP to 6.3.0 to Avoid the x18 Register on Apple Silicon
GMP 6.2.1's arm64 assembly keeps loop counters in x18, which Apple reserves and macOS zeroes on every return to user space (syscalls, page faults, preemption). When that happens inside one of those loops the counter underflows and the routine walks the stack until the guard page: EXC_BAD_ACCESS / SIGBUS inside __gmpn_* whenever CGAL falls back to exact arithmetic (texture import boundary smoothing, text emboss cuts, mesh repair, mesh boolean). 6.3.0 moves those counters to ordinary temporaries (gmp-6.2 changeset f4ff6ff711ed); no x18 use remains under mpn/arm64. The GCC 15 patch applies unchanged apart from a line offset. The tarball comes from the GNU mirror, like MPFR. Windows is unaffected: MSVC copies the prebuilt libgmp-10 and the arm64 job stages MSYS2's GMP. Built with the deps recipe flags and ran make check on Linux x86_64 (clang 18, 200/200) and macOS arm64 (Apple clang, 199/199).
This commit is contained in:
1 parent
069bd402d9
commit
13b8395d21
1 file changed
+5
-2
Vendored
+5
-2
@@ -59,9 +59,12 @@ else ()
|
||||
set(_cross_compile_arg --host=${TOOLCHAIN_PREFIX})
|
||||
endif ()
|
||||
|
||||
# 6.3.0 is the first release whose arm64 assembly avoids x18, which macOS
|
||||
# reserves and zeroes on every return to user space; 6.2.1 crashes on Apple
|
||||
# silicon whenever CGAL falls back to exact arithmetic.
|
||||
ExternalProject_Add(dep_GMP
|
||||
URL https://github.com/SoftFever/OrcaSlicer_deps/releases/download/gmp-6.2.1/gmp-6.2.1.tar.bz2
|
||||
URL_HASH SHA256=eae9326beb4158c386e39a356818031bd28f3124cf915f8c5b1dc4c7a36b4d7c
|
||||
URL https://ftp.gnu.org/gnu/gmp/gmp-6.3.0.tar.bz2
|
||||
URL_HASH SHA256=ac28211a7cfb609bae2e2c8d6058d66c8fe96434f740cf6fe2e47b000d1c20cb
|
||||
DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/GMP
|
||||
PATCH_COMMAND git apply ${GMP_DIRECTORY_FLAG} --verbose ${CMAKE_CURRENT_LIST_DIR}/0001-GMP_GCC15.patch
|
||||
BUILD_IN_SOURCE ON
|
||||
|
||||
Reference in new issue
Block a user