From 13b8395d21249e8a92a2a2bb8cb90e8da04f7ce8 Mon Sep 17 00:00:00 2001 From: Hanif Koh Date: Tue, 20 Oct 2026 16:22:03 +0800 Subject: [PATCH] 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). --- deps/GMP/GMP.cmake | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/deps/GMP/GMP.cmake b/deps/GMP/GMP.cmake index b3ba181753..66b9c58847 100644 --- a/deps/GMP/GMP.cmake +++ b/deps/GMP/GMP.cmake @@ -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