| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "vm/globals.h" | 5 #include "vm/globals.h" | 
| 6 #if defined(TARGET_OS_ANDROID) | 6 #if defined(TARGET_OS_ANDROID) | 
| 7 | 7 | 
| 8 #include "vm/virtual_memory.h" | 8 #include "vm/virtual_memory.h" | 
| 9 | 9 | 
| 10 #include <sys/mman.h>  // NOLINT | 10 #include <sys/mman.h>  // NOLINT | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 69   void* address = mmap(reinterpret_cast<void*>(addr), size, prot, | 69   void* address = mmap(reinterpret_cast<void*>(addr), size, prot, | 
| 70                        MAP_PRIVATE | MAP_ANON | MAP_FIXED, | 70                        MAP_PRIVATE | MAP_ANON | MAP_FIXED, | 
| 71                        -1, 0); | 71                        -1, 0); | 
| 72   if (address == MAP_FAILED) { | 72   if (address == MAP_FAILED) { | 
| 73     return false; | 73     return false; | 
| 74   } | 74   } | 
| 75   return true; | 75   return true; | 
| 76 } | 76 } | 
| 77 | 77 | 
| 78 | 78 | 
| 79 bool VirtualMemory::Protect(Protection mode) { | 79 bool VirtualMemory::Protect(void* address, intptr_t size, Protection mode) { | 
|  | 80   uword start_address = reinterpret_cast<uword>(address); | 
|  | 81   uword end_address = start_address + size; | 
|  | 82   uword page_address = start_address & ~(PageSize() - 1); | 
| 80   int prot = 0; | 83   int prot = 0; | 
| 81   switch (mode) { | 84   switch (mode) { | 
| 82     case kNoAccess: | 85     case kNoAccess: | 
| 83       prot = PROT_NONE; | 86       prot = PROT_NONE; | 
| 84       break; | 87       break; | 
| 85     case kReadOnly: | 88     case kReadOnly: | 
| 86       prot = PROT_READ; | 89       prot = PROT_READ; | 
| 87       break; | 90       break; | 
| 88     case kReadWrite: | 91     case kReadWrite: | 
| 89       prot = PROT_READ | PROT_WRITE; | 92       prot = PROT_READ | PROT_WRITE; | 
| 90       break; | 93       break; | 
| 91     case kReadExecute: | 94     case kReadExecute: | 
| 92       prot = PROT_READ | PROT_EXEC; | 95       prot = PROT_READ | PROT_EXEC; | 
| 93       break; | 96       break; | 
| 94     case kReadWriteExecute: | 97     case kReadWriteExecute: | 
| 95       prot = PROT_READ | PROT_WRITE | PROT_EXEC; | 98       prot = PROT_READ | PROT_WRITE | PROT_EXEC; | 
| 96       break; | 99       break; | 
| 97   } | 100   } | 
| 98   return (mprotect(address(), size(), prot) == 0); | 101   return (mprotect(reinterpret_cast<void*>(page_address), | 
|  | 102                    end_address - page_address, | 
|  | 103                    prot) == 0); | 
| 99 } | 104 } | 
| 100 | 105 | 
| 101 }  // namespace dart | 106 }  // namespace dart | 
| 102 | 107 | 
| 103 #endif  // defined(TARGET_OS_ANDROID) | 108 #endif  // defined(TARGET_OS_ANDROID) | 
| OLD | NEW | 
|---|