| Index: src/spaces.cc
|
| ===================================================================
|
| --- src/spaces.cc (revision 8619)
|
| +++ src/spaces.cc (working copy)
|
| @@ -380,7 +380,14 @@
|
| if (isolate_->code_range()->exists()) {
|
| mem = isolate_->code_range()->AllocateRawMemory(requested, allocated);
|
| } else {
|
| +#ifdef ENABLE_HEAP_PROTECTION
|
| + mem = OS::Allocate(requested + Page::kPageSize, allocated, true);
|
| + OS::Guard(mem, Page::kPageSize);
|
| + *allocated -= Page::kPageSize;
|
| + mem = static_cast<char*>(mem) + Page::kPageSize;
|
| +#else // ENABLE_HEAP_PROTECTION
|
| mem = OS::Allocate(requested, allocated, true);
|
| +#endif // ENABLE_HEAP_PROTECTION
|
| }
|
| // Update executable memory size.
|
| size_executable_ += static_cast<int>(*allocated);
|
| @@ -407,7 +414,12 @@
|
| if (isolate_->code_range()->contains(static_cast<Address>(mem))) {
|
| isolate_->code_range()->FreeRawMemory(mem, length);
|
| } else {
|
| - OS::Free(mem, length);
|
| +#ifdef ENABLE_HEAP_PROTECTION
|
| + size_t guardsize = (executable == EXECUTABLE) ? Page::kPageSize : 0;
|
| + OS::Free(static_cast<char*>(mem) - guardsize, length + guardsize);
|
| +#else // ENABLE_HEAP_PROTECTION
|
| + OS::Free(static_cast<char*>(mem), length);
|
| +#endif // ENABLE_HEAP_PROTECTION
|
| }
|
| isolate_->counters()->memory_allocated()->Decrement(static_cast<int>(length));
|
| size_ -= static_cast<int>(length);
|
|
|