| Index: third_party/mach_override/mach_override.c
|
| ===================================================================
|
| --- third_party/mach_override/mach_override.c (revision 93640)
|
| +++ third_party/mach_override/mach_override.c (working copy)
|
| @@ -145,12 +145,12 @@
|
| #pragma mark -
|
| #pragma mark (Interface)
|
|
|
| -#if defined(__x86_64__)
|
| +#if defined(__i386__) || defined(__x86_64__)
|
| mach_error_t makeIslandExecutable(void *address) {
|
| mach_error_t err = err_none;
|
| vm_size_t pageSize;
|
| host_page_size( mach_host_self(), &pageSize );
|
| - uint64_t page = (uint64_t)address & ~(uint64_t)(pageSize-1);
|
| + uintptr_t page = (uintptr_t)address & ~(uintptr_t)(pageSize-1);
|
| int e = err_none;
|
| e |= mprotect((void *)page, pageSize, PROT_EXEC | PROT_READ | PROT_WRITE);
|
| e |= msync((void *)page, pageSize, MS_INVALIDATE );
|
| @@ -301,6 +301,13 @@
|
| }
|
| #endif
|
|
|
| +#if defined(__i386__) || defined(__x86_64__)
|
| + if ( !err )
|
| + err = makeIslandExecutable( escapeIsland );
|
| + if ( !err && reentryIsland )
|
| + err = makeIslandExecutable( reentryIsland );
|
| +#endif
|
| +
|
| // Clean up on error.
|
| if( err ) {
|
| if( reentryIsland )
|
| @@ -309,11 +316,6 @@
|
| freeBranchIsland( escapeIsland );
|
| }
|
|
|
| -#if defined(__x86_64__)
|
| - err = makeIslandExecutable(escapeIsland);
|
| - err = makeIslandExecutable(reentryIsland);
|
| -#endif
|
| -
|
| return err;
|
| }
|
|
|
| @@ -355,8 +357,8 @@
|
| vm_address_t first = (uint64_t)originalFunctionAddress & ~(uint64_t)(((uint64_t)1 << 31) - 1) | ((uint64_t)1 << 31); // start in the middle of the page?
|
| vm_address_t last = 0x0;
|
| #else
|
| - vm_address_t first = 0xfeffffff;
|
| - vm_address_t last = 0xfe000000 + pageSize;
|
| + vm_address_t first = 0xffc00000;
|
| + vm_address_t last = 0xfffe0000;
|
| #endif
|
|
|
| vm_address_t page = first;
|
|
|