Browse Source
protect/map shenanigans with macOS
liz-dynarmic-macos-fbsd-port
lizzie
3 weeks ago
committed by
Caio Oliveira
No known key found for this signature in database
GPG Key ID: 362DA3DC1901E080
1 changed files with
9 additions and
2 deletions
-
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)); |
|
|
|
} |
|
|
|
|
|
|
|
|