| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/base/bits.h" | 7 #include "src/base/bits.h" |
| 8 #include "src/base/platform/platform.h" | 8 #include "src/base/platform/platform.h" |
| 9 #include "src/full-codegen.h" | 9 #include "src/full-codegen.h" |
| 10 #include "src/heap/mark-compact.h" | 10 #include "src/heap/mark-compact.h" |
| (...skipping 857 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 868 // We are guarding code pages: the last OS page will be protected as | 868 // We are guarding code pages: the last OS page will be protected as |
| 869 // non-writable. | 869 // non-writable. |
| 870 return Page::kPageSize - static_cast<int>(base::OS::CommitPageSize()); | 870 return Page::kPageSize - static_cast<int>(base::OS::CommitPageSize()); |
| 871 } | 871 } |
| 872 | 872 |
| 873 | 873 |
| 874 bool MemoryAllocator::CommitExecutableMemory(base::VirtualMemory* vm, | 874 bool MemoryAllocator::CommitExecutableMemory(base::VirtualMemory* vm, |
| 875 Address start, size_t commit_size, | 875 Address start, size_t commit_size, |
| 876 size_t reserved_size) { | 876 size_t reserved_size) { |
| 877 // Commit page header (not executable). | 877 // Commit page header (not executable). |
| 878 if (!vm->Commit(start, CodePageGuardStartOffset(), false)) { | 878 Address header = start; |
| 879 return false; | 879 size_t header_size = CodePageGuardStartOffset(); |
| 880 if (vm->Commit(header, header_size, false)) { |
| 881 // Create guard page after the header. |
| 882 if (vm->Guard(start + CodePageGuardStartOffset())) { |
| 883 // Commit page body (executable). |
| 884 Address body = start + CodePageAreaStartOffset(); |
| 885 size_t body_size = commit_size - CodePageGuardStartOffset(); |
| 886 if (vm->Commit(body, body_size, true)) { |
| 887 // Create guard page before the end. |
| 888 if (vm->Guard(start + reserved_size - CodePageGuardSize())) { |
| 889 UpdateAllocatedSpaceLimits(start, start + CodePageAreaStartOffset() + |
| 890 commit_size - |
| 891 CodePageGuardStartOffset()); |
| 892 return true; |
| 893 } |
| 894 vm->Uncommit(body, body_size); |
| 895 } |
| 896 } |
| 897 vm->Uncommit(header, header_size); |
| 880 } | 898 } |
| 881 | 899 return false; |
| 882 // Create guard page after the header. | |
| 883 if (!vm->Guard(start + CodePageGuardStartOffset())) { | |
| 884 return false; | |
| 885 } | |
| 886 | |
| 887 // Commit page body (executable). | |
| 888 if (!vm->Commit(start + CodePageAreaStartOffset(), | |
| 889 commit_size - CodePageGuardStartOffset(), true)) { | |
| 890 return false; | |
| 891 } | |
| 892 | |
| 893 // Create guard page before the end. | |
| 894 if (!vm->Guard(start + reserved_size - CodePageGuardSize())) { | |
| 895 return false; | |
| 896 } | |
| 897 | |
| 898 UpdateAllocatedSpaceLimits(start, start + CodePageAreaStartOffset() + | |
| 899 commit_size - | |
| 900 CodePageGuardStartOffset()); | |
| 901 return true; | |
| 902 } | 900 } |
| 903 | 901 |
| 904 | 902 |
| 905 // ----------------------------------------------------------------------------- | 903 // ----------------------------------------------------------------------------- |
| 906 // MemoryChunk implementation | 904 // MemoryChunk implementation |
| 907 | 905 |
| 908 void MemoryChunk::IncrementLiveBytesFromMutator(Address address, int by) { | 906 void MemoryChunk::IncrementLiveBytesFromMutator(Address address, int by) { |
| 909 MemoryChunk* chunk = MemoryChunk::FromAddress(address); | 907 MemoryChunk* chunk = MemoryChunk::FromAddress(address); |
| 910 if (!chunk->InNewSpace() && !static_cast<Page*>(chunk)->WasSwept()) { | 908 if (!chunk->InNewSpace() && !static_cast<Page*>(chunk)->WasSwept()) { |
| 911 static_cast<PagedSpace*>(chunk->owner())->IncrementUnsweptFreeBytes(-by); | 909 static_cast<PagedSpace*>(chunk->owner())->IncrementUnsweptFreeBytes(-by); |
| (...skipping 2212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3124 object->ShortPrint(); | 3122 object->ShortPrint(); |
| 3125 PrintF("\n"); | 3123 PrintF("\n"); |
| 3126 } | 3124 } |
| 3127 printf(" --------------------------------------\n"); | 3125 printf(" --------------------------------------\n"); |
| 3128 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); | 3126 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); |
| 3129 } | 3127 } |
| 3130 | 3128 |
| 3131 #endif // DEBUG | 3129 #endif // DEBUG |
| 3132 } | 3130 } |
| 3133 } // namespace v8::internal | 3131 } // namespace v8::internal |
| OLD | NEW |