From 3bfd948ec84e320c1a06ab4af272c629fe0126de Mon Sep 17 00:00:00 2001 From: Mikael Simberg Date: Thu, 4 May 2023 09:56:02 +0200 Subject: Add patches for generic context coroutine stack allocation in pika on macos (#37288) --- .../pika/generic_context_allocate_guard_0_10_12.patch | 15 +++++++++++++++ .../pika/generic_context_allocate_guard_0_13_14.patch | 14 ++++++++++++++ var/spack/repos/builtin/packages/pika/package.py | 5 +++++ .../packages/pika/posix_stack_non_executable_0_13.patch | 13 +++++++++++++ .../pika/posix_stack_non_executable_0_1_0_5.patch | 13 +++++++++++++ .../pika/posix_stack_non_executable_0_6_0_12.patch | 13 +++++++++++++ 6 files changed, 73 insertions(+) create mode 100644 var/spack/repos/builtin/packages/pika/generic_context_allocate_guard_0_10_12.patch create mode 100644 var/spack/repos/builtin/packages/pika/generic_context_allocate_guard_0_13_14.patch create mode 100644 var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_13.patch create mode 100644 var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_1_0_5.patch create mode 100644 var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_6_0_12.patch (limited to 'var') diff --git a/var/spack/repos/builtin/packages/pika/generic_context_allocate_guard_0_10_12.patch b/var/spack/repos/builtin/packages/pika/generic_context_allocate_guard_0_10_12.patch new file mode 100644 index 0000000000..64c691668e --- /dev/null +++ b/var/spack/repos/builtin/packages/pika/generic_context_allocate_guard_0_10_12.patch @@ -0,0 +1,15 @@ +diff --git a/libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp b/libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp +index a26314a0..38d4e7f1 100644 +--- a/libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp ++++ b/libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp +@@ -92,9 +92,7 @@ namespace pika::threads::coroutines { + + void* allocate(std::size_t size) const + { +-#if defined(_POSIX_VERSION) && \ +- !(defined(__APPLE__) && \ +- (defined(arm64) || defined(__arm64) || defined(__arm64__))) ++#if defined(_POSIX_VERSION) + void* limit = posix::alloc_stack(size); + posix::watermark_stack(limit, size); + #else diff --git a/var/spack/repos/builtin/packages/pika/generic_context_allocate_guard_0_13_14.patch b/var/spack/repos/builtin/packages/pika/generic_context_allocate_guard_0_13_14.patch new file mode 100644 index 0000000000..dccb490b0c --- /dev/null +++ b/var/spack/repos/builtin/packages/pika/generic_context_allocate_guard_0_13_14.patch @@ -0,0 +1,14 @@ +diff --git a/libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp b/libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp +index 79eabdb7a..0a6028ae8 100644 +--- a/libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp ++++ b/libs/pika/coroutines/include/pika/coroutines/detail/context_generic_context.hpp +@@ -91,8 +91,7 @@ namespace pika::threads::coroutines { + + void* allocate(std::size_t size) const + { +-# if defined(_POSIX_VERSION) && \ +- !(defined(__APPLE__) && (defined(arm64) || defined(__arm64) || defined(__arm64__))) ++# if defined(_POSIX_VERSION) + void* limit = posix::alloc_stack(size); + posix::watermark_stack(limit, size); + # else diff --git a/var/spack/repos/builtin/packages/pika/package.py b/var/spack/repos/builtin/packages/pika/package.py index e22691a415..7fbaabba31 100644 --- a/var/spack/repos/builtin/packages/pika/package.py +++ b/var/spack/repos/builtin/packages/pika/package.py @@ -144,6 +144,11 @@ class Pika(CMakePackage, CudaPackage, ROCmPackage): # Patches patch("transform_mpi_includes.patch", when="@0.3.0 +mpi") patch("mimalloc_no_version_requirement.patch", when="@:0.5 malloc=mimalloc") + patch("generic_context_allocate_guard_0_13_14.patch", when="@0.13:0.14 platform=darwin") + patch("generic_context_allocate_guard_0_10_12.patch", when="@0.10:0.12 platform=darwin") + patch("posix_stack_non_executable_0_13.patch", when="@0.13 platform=darwin") + patch("posix_stack_non_executable_0_6_0_12.patch", when="@0.6:0.12 platform=darwin") + patch("posix_stack_non_executable_0_1_0_5.patch", when="@:0.5 platform=darwin") # Fix missing template instantiation on macOS patch( diff --git a/var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_13.patch b/var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_13.patch new file mode 100644 index 0000000000..77e70f8acc --- /dev/null +++ b/var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_13.patch @@ -0,0 +1,13 @@ +diff --git a/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp b/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp +index 107fe781..be52d9c9 100644 +--- a/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp ++++ b/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp +@@ -77,7 +77,7 @@ namespace pika::threads::coroutines::detail::posix { + + inline void* alloc_stack(std::size_t size) + { +- void* real_stack = ::mmap(nullptr, size + EXEC_PAGESIZE, PROT_EXEC | PROT_READ | PROT_WRITE, ++ void* real_stack = ::mmap(nullptr, size + EXEC_PAGESIZE, PROT_READ | PROT_WRITE, + # if defined(__APPLE__) + MAP_PRIVATE | MAP_ANON | MAP_NORESERVE, + # elif defined(__FreeBSD__) diff --git a/var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_1_0_5.patch b/var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_1_0_5.patch new file mode 100644 index 0000000000..8b5eae3057 --- /dev/null +++ b/var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_1_0_5.patch @@ -0,0 +1,13 @@ +diff --git a/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp b/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp +index aba1863d..bdbddd2f 100644 +--- a/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp ++++ b/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp +@@ -80,7 +80,7 @@ namespace pika { namespace threads { namespace coroutines { namespace detail { + inline void* alloc_stack(std::size_t size) + { + void* real_stack = ::mmap(nullptr, size + EXEC_PAGESIZE, +- PROT_EXEC | PROT_READ | PROT_WRITE, ++ PROT_READ | PROT_WRITE, + #if defined(__APPLE__) + MAP_PRIVATE | MAP_ANON | MAP_NORESERVE, + #elif defined(__FreeBSD__) diff --git a/var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_6_0_12.patch b/var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_6_0_12.patch new file mode 100644 index 0000000000..c25e1fe407 --- /dev/null +++ b/var/spack/repos/builtin/packages/pika/posix_stack_non_executable_0_6_0_12.patch @@ -0,0 +1,13 @@ +diff --git a/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp b/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp +index d53ac752..7c02f781 100644 +--- a/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp ++++ b/libs/pika/coroutines/include/pika/coroutines/detail/posix_utility.hpp +@@ -79,7 +79,7 @@ namespace pika::threads::coroutines::detail::posix { + inline void* alloc_stack(std::size_t size) + { + void* real_stack = ::mmap(nullptr, size + EXEC_PAGESIZE, +- PROT_EXEC | PROT_READ | PROT_WRITE, ++ PROT_READ | PROT_WRITE, + #if defined(__APPLE__) + MAP_PRIVATE | MAP_ANON | MAP_NORESERVE, + #elif defined(__FreeBSD__) -- cgit v1.2.3-70-g09d2