Add patches for generic context coroutine stack allocation in pika on macos (#37288)
This commit is contained in:
		| @@ -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 | ||||||
| @@ -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 | ||||||
| @@ -144,6 +144,11 @@ class Pika(CMakePackage, CudaPackage, ROCmPackage): | |||||||
|     # Patches |     # Patches | ||||||
|     patch("transform_mpi_includes.patch", when="@0.3.0 +mpi") |     patch("transform_mpi_includes.patch", when="@0.3.0 +mpi") | ||||||
|     patch("mimalloc_no_version_requirement.patch", when="@:0.5 malloc=mimalloc") |     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 |     # Fix missing template instantiation on macOS | ||||||
|     patch( |     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__) | ||||||
| @@ -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__) | ||||||
| @@ -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__) | ||||||
		Reference in New Issue
	
	Block a user
	 Mikael Simberg
					Mikael Simberg