Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mumble-voip/mach_override.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafael Ávila de Espíndola <respindola@mozilla.com>2012-07-20 19:57:48 +0400
committerRafael Ávila de Espíndola <respindola@mozilla.com>2012-07-20 19:57:48 +0400
commit4112f60a1c446f1dcec5b63c98deda73f36ac11b (patch)
tree81dfaca75285e63367df5db5b54152d1bbdb5201
parentd8ff66ed7b17eab1527db89c376fda00cec4903e (diff)
Use a constant for the page size.
-rw-r--r--mach_override/mach_override.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/mach_override/mach_override.c b/mach_override/mach_override.c
index 64dd0ab..faaff77 100644
--- a/mach_override/mach_override.c
+++ b/mach_override/mach_override.c
@@ -23,6 +23,7 @@
#pragma mark -
#pragma mark (Constants)
+#define kPageSize 4096
#if defined(__ppc__) || defined(__POWERPC__)
long kIslandTemplate[] = {
@@ -158,12 +159,10 @@ fixupInstructions(
#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 );
- uintptr_t page = (uintptr_t)address & ~(uintptr_t)(pageSize-1);
+ uintptr_t page = (uintptr_t)address & ~(uintptr_t)(kPageSize-1);
int e = err_none;
- e |= mprotect((void *)page, pageSize, PROT_EXEC | PROT_READ | PROT_WRITE);
- e |= msync((void *)page, pageSize, MS_INVALIDATE );
+ e |= mprotect((void *)page, kPageSize, PROT_EXEC | PROT_READ | PROT_WRITE);
+ e |= msync((void *)page, kPageSize, MS_INVALIDATE );
if (e) {
err = err_cannot_override;
}
@@ -385,13 +384,11 @@ allocateBranchIsland(
mach_error_t err = err_none;
if( allocateHigh ) {
- vm_size_t pageSize;
- err = host_page_size( mach_host_self(), &pageSize );
if( !err ) {
- assert( sizeof( BranchIsland ) <= pageSize );
+ assert( sizeof( BranchIsland ) <= kPageSize );
#if defined(__ppc__) || defined(__POWERPC__)
vm_address_t first = 0xfeffffff;
- vm_address_t last = 0xfe000000 + pageSize;
+ vm_address_t last = 0xfe000000 + kPageSize;
#elif defined(__x86_64__)
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;
@@ -406,14 +403,14 @@ allocateBranchIsland(
while( !err && !allocated && page != last ) {
- err = vm_allocate( task_self, &page, pageSize, 0 );
+ err = vm_allocate( task_self, &page, kPageSize, 0 );
if( err == err_none )
allocated = 1;
else if( err == KERN_NO_SPACE ) {
#if defined(__x86_64__)
- page -= pageSize;
+ page -= kPageSize;
#else
- page += pageSize;
+ page += kPageSize;
#endif
err = err_none;
}
@@ -455,13 +452,11 @@ freeBranchIsland(
mach_error_t err = err_none;
if( island->allocatedHigh ) {
- vm_size_t pageSize;
- err = host_page_size( mach_host_self(), &pageSize );
if( !err ) {
- assert( sizeof( BranchIsland ) <= pageSize );
+ assert( sizeof( BranchIsland ) <= kPageSize );
err = vm_deallocate(
mach_task_self(),
- (vm_address_t) island, pageSize );
+ (vm_address_t) island, kPageSize );
}
} else {
free( island );