Chromium Code Reviews| Index: runtime/vm/pages.cc |
| diff --git a/runtime/vm/pages.cc b/runtime/vm/pages.cc |
| index 5d5df0e2d559398f7494b34059206646c3399233..197e40960fb7ad181d6c4f0f874b0e6991cef6a0 100644 |
| --- a/runtime/vm/pages.cc |
| +++ b/runtime/vm/pages.cc |
| @@ -1061,7 +1061,9 @@ uword PageSpace::TryAllocateSmiInitializedLocked(intptr_t size, |
| } |
| -void PageSpace::SetupInstructionsSnapshotPage(void* pointer, uword size) { |
| +void PageSpace::SetupInstructionsSnapshotPage(void* pointer, |
| + uword size, |
| + bool is_executable) { |
| // Setup a HeapPage so precompiled Instructions can be traversed. |
| // Instructions are contiguous at [pointer, pointer + size). HeapPage |
| // expects to find objects at [memory->start() + ObjectStartOffset, |
| @@ -1070,23 +1072,30 @@ void PageSpace::SetupInstructionsSnapshotPage(void* pointer, uword size) { |
| pointer = reinterpret_cast<void*>(reinterpret_cast<uword>(pointer) - offset); |
| size += offset; |
| - ASSERT(Utils::IsAligned(pointer, OS::PreferredCodeAlignment())); |
| - |
| VirtualMemory* memory = VirtualMemory::ForInstructionsSnapshot(pointer, size); |
|
rmacnak
2016/01/15 00:57:01
rename to VirtualMemory::ForExternalPage
Florian Schneider
2016/01/15 15:56:01
Done.
|
| ASSERT(memory != NULL); |
| HeapPage* page = reinterpret_cast<HeapPage*>(malloc(sizeof(HeapPage))); |
| page->memory_ = memory; |
| page->next_ = NULL; |
| page->object_end_ = memory->end(); |
| - page->executable_ = true; |
| MutexLocker ml(pages_lock_); |
| - if (exec_pages_ == NULL) { |
| - exec_pages_ = page; |
| + HeapPage** first, **tail; |
| + if (is_executable) { |
| + ASSERT(Utils::IsAligned(pointer, OS::PreferredCodeAlignment())); |
| + page->executable_ = true; |
| + first = &exec_pages_; |
| + tail = &exec_pages_tail_; |
| + } else { |
| + first = &pages_; |
| + tail = &pages_tail_; |
| + } |
| + if (*first == NULL) { |
| + *first = page; |
| } else { |
| - exec_pages_tail_->set_next(page); |
| + (*tail)->set_next(page); |
| } |
| - exec_pages_tail_ = page; |
| + (*tail) = page; |
| } |