From 7f8f7b4239be1d8697d7c5053906097971bc9862 Mon Sep 17 00:00:00 2001 From: lizzie Date: Sun, 30 Nov 2025 22:48:52 +0000 Subject: [PATCH] protect/map shenanigans with macOS --- src/common/host_memory.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/common/host_memory.cpp b/src/common/host_memory.cpp index 9a18e8ecf4..1ae70d87d7 100644 --- a/src/common/host_memory.cpp +++ b/src/common/host_memory.cpp @@ -629,8 +629,9 @@ public: u8* addr = virtual_base + virtual_offset; #ifdef __APPLE__ // The way Steve Jobs intended - addr = (void*)trunc_page(u64(addr)); + addr = (u8*)trunc_page(u64(addr) + host_offset); length = round_page(length); + host_offset = 0; #endif void* ret = mmap(addr, length, prot_flags, flags, fd, host_offset); ASSERT_MSG(ret != MAP_FAILED, "mmap: {}", strerror(errno)); @@ -665,7 +666,13 @@ public: if (execute) flags |= PROT_EXEC; #endif - int ret = mprotect(virtual_base + virtual_offset, length, flags); + u8* addr = virtual_base + virtual_offset; +#ifdef __APPLE__ + // The way Steve Jobs intended + addr = (u8*)trunc_page(u64(addr)); + length = round_page(length); +#endif + int ret = mprotect(addr, length, flags); ASSERT_MSG(ret == 0, "mprotect failed: {}", strerror(errno)); }