From 19ce9ac146b07ac54a9548e00511de80cd327ec2 Mon Sep 17 00:00:00 2001 From: w1naenator Date: Mon, 26 Jan 2026 07:47:06 +0200 Subject: [PATCH] Add Mach-O support for fiber switching and stack management --- src/core/libraries/fiber/fiber.cpp | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/core/libraries/fiber/fiber.cpp b/src/core/libraries/fiber/fiber.cpp index 05c22d550..07df5b773 100644 --- a/src/core/libraries/fiber/fiber.cpp +++ b/src/core/libraries/fiber/fiber.cpp @@ -117,6 +117,32 @@ extern "C" void PS4_SYSV_ABI __sanitizer_finish_switch_fiber(void* fake_stack_sa extern "C" void PS4_SYSV_ABI __asan_destroy_fake_stack() {} +#if defined(__APPLE__) +extern "C" void PS4_SYSV_ABI +__sanitizer_start_switch_fiber_macho(void** fake_stack_save, const void* stack_addr, + size_t stack_size) asm("__sanitizer_start_switch_fiber"); +extern "C" void PS4_SYSV_ABI __sanitizer_finish_switch_fiber_macho( + void* fake_stack_save, const void** old_stack_addr, + size_t* old_stack_size) asm("__sanitizer_finish_switch_fiber"); +extern "C" void PS4_SYSV_ABI __asan_destroy_fake_stack_macho(void) asm("__asan_destroy_fake_stack"); + +extern "C" void PS4_SYSV_ABI __sanitizer_start_switch_fiber_macho(void** fake_stack_save, + const void* stack_addr, + size_t stack_size) { + __sanitizer_start_switch_fiber(fake_stack_save, stack_addr, stack_size); +} + +extern "C" void PS4_SYSV_ABI __sanitizer_finish_switch_fiber_macho(void* fake_stack_save, + const void** old_stack_addr, + size_t* old_stack_size) { + __sanitizer_finish_switch_fiber(fake_stack_save, old_stack_addr, old_stack_size); +} + +extern "C" void PS4_SYSV_ABI __asan_destroy_fake_stack_macho(void) { + __asan_destroy_fake_stack(); +} +#endif + static void EnsureFiberGlobalsInitialized() { u32 expected = 0; if (fiber_globals_init.compare_exchange_strong(expected, 1u, std::memory_order_relaxed)) {