mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-28 06:58:58 +02:00
protect/map shenanigans with macOS
This commit is contained in:
parent
816eb96f48
commit
c1fc6dcfe0
1 changed files with 9 additions and 2 deletions
|
|
@ -629,8 +629,9 @@ public:
|
||||||
u8* addr = virtual_base + virtual_offset;
|
u8* addr = virtual_base + virtual_offset;
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
// The way Steve Jobs intended
|
// The way Steve Jobs intended
|
||||||
addr = (void*)trunc_page(u64(addr));
|
addr = (u8*)trunc_page(u64(addr) + host_offset);
|
||||||
length = round_page(length);
|
length = round_page(length);
|
||||||
|
host_offset = 0;
|
||||||
#endif
|
#endif
|
||||||
void* ret = mmap(addr, length, prot_flags, flags, fd, host_offset);
|
void* ret = mmap(addr, length, prot_flags, flags, fd, host_offset);
|
||||||
ASSERT_MSG(ret != MAP_FAILED, "mmap: {}", strerror(errno));
|
ASSERT_MSG(ret != MAP_FAILED, "mmap: {}", strerror(errno));
|
||||||
|
|
@ -665,7 +666,13 @@ public:
|
||||||
if (execute)
|
if (execute)
|
||||||
flags |= PROT_EXEC;
|
flags |= PROT_EXEC;
|
||||||
#endif
|
#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));
|
ASSERT_MSG(ret == 0, "mprotect failed: {}", strerror(errno));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue