Chromium Code Reviews| 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 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 107 } else { | 107 } else { |
| 108 return true; | 108 return true; |
| 109 } | 109 } |
| 110 } | 110 } |
| 111 | 111 |
| 112 if (requested <= kMinimumCodeRangeSize) { | 112 if (requested <= kMinimumCodeRangeSize) { |
| 113 requested = kMinimumCodeRangeSize; | 113 requested = kMinimumCodeRangeSize; |
| 114 } | 114 } |
| 115 | 115 |
| 116 DCHECK(!kRequiresCodeRange || requested <= kMaximalCodeRangeSize); | 116 DCHECK(!kRequiresCodeRange || requested <= kMaximalCodeRangeSize); |
| 117 #ifdef V8_TARGET_ARCH_MIPS64 | |
| 118 // To use pseudo-relative jumps such as j/jal instructions which have 28-bit | |
| 119 // encoded immediate, the addresses have to be in range of 256Mb aligned | |
| 120 // region. | |
| 121 code_range_ = new base::VirtualMemory(requested, kMaximalCodeRangeSize); | |
| 122 #else | |
| 117 code_range_ = new base::VirtualMemory(requested); | 123 code_range_ = new base::VirtualMemory(requested); |
| 124 #endif | |
| 118 CHECK(code_range_ != NULL); | 125 CHECK(code_range_ != NULL); |
| 119 if (!code_range_->IsReserved()) { | 126 if (!code_range_->IsReserved()) { |
| 120 delete code_range_; | 127 delete code_range_; |
| 121 code_range_ = NULL; | 128 code_range_ = NULL; |
| 122 return false; | 129 return false; |
| 123 } | 130 } |
| 124 | 131 |
| 125 // We are sure that we have mapped a block of requested addresses. | 132 // We are sure that we have mapped a block of requested addresses. |
| 126 DCHECK(code_range_->size() == requested); | 133 DCHECK(code_range_->size() == requested); |
| 127 Address base = reinterpret_cast<Address>(code_range_->address()); | 134 Address base = reinterpret_cast<Address>(code_range_->address()); |
| (...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 638 LOG(isolate_, StringEvent("MemoryAllocator::AllocateRawMemory", | 645 LOG(isolate_, StringEvent("MemoryAllocator::AllocateRawMemory", |
| 639 "V8 Executable Allocation capacity exceeded")); | 646 "V8 Executable Allocation capacity exceeded")); |
| 640 return NULL; | 647 return NULL; |
| 641 } | 648 } |
| 642 | 649 |
| 643 // Size of header (not executable) plus area (executable). | 650 // Size of header (not executable) plus area (executable). |
| 644 size_t commit_size = RoundUp(CodePageGuardStartOffset() + commit_area_size, | 651 size_t commit_size = RoundUp(CodePageGuardStartOffset() + commit_area_size, |
| 645 base::OS::CommitPageSize()); | 652 base::OS::CommitPageSize()); |
| 646 // Allocate executable memory either from code range or from the | 653 // Allocate executable memory either from code range or from the |
| 647 // OS. | 654 // OS. |
| 655 #ifdef V8_TARGET_ARCH_MIPS64 | |
| 656 // Use code range only for large object space on mips64 to keep address | |
| 657 // range within 256-MB memory region. | |
| 658 if (isolate_->code_range() != NULL && isolate_->code_range()->valid() && | |
| 659 commit_size > CodePageAreaSize()) { | |
|
Erik Corry
2015/06/04 10:28:15
The commit_size includes the CodePageGuardStartOff
dusmil.imgtec
2015/06/04 11:04:40
Done.
dusmil.imgtec
2015/06/04 11:04:40
Thank you for spotting this, typo mistake sorry. T
| |
| 660 #else | |
| 648 if (isolate_->code_range() != NULL && isolate_->code_range()->valid()) { | 661 if (isolate_->code_range() != NULL && isolate_->code_range()->valid()) { |
| 662 #endif | |
| 649 base = isolate_->code_range()->AllocateRawMemory(chunk_size, commit_size, | 663 base = isolate_->code_range()->AllocateRawMemory(chunk_size, commit_size, |
| 650 &chunk_size); | 664 &chunk_size); |
| 651 DCHECK( | 665 DCHECK( |
| 652 IsAligned(reinterpret_cast<intptr_t>(base), MemoryChunk::kAlignment)); | 666 IsAligned(reinterpret_cast<intptr_t>(base), MemoryChunk::kAlignment)); |
| 653 if (base == NULL) return NULL; | 667 if (base == NULL) return NULL; |
| 654 size_ += chunk_size; | 668 size_ += chunk_size; |
| 655 // Update executable memory size. | 669 // Update executable memory size. |
| 656 size_executable_ += chunk_size; | 670 size_executable_ += chunk_size; |
| 657 } else { | 671 } else { |
| 658 base = AllocateAlignedMemory(chunk_size, commit_size, | 672 base = AllocateAlignedMemory(chunk_size, commit_size, |
| (...skipping 2474 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 3133 object->ShortPrint(); | 3147 object->ShortPrint(); |
| 3134 PrintF("\n"); | 3148 PrintF("\n"); |
| 3135 } | 3149 } |
| 3136 printf(" --------------------------------------\n"); | 3150 printf(" --------------------------------------\n"); |
| 3137 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); | 3151 printf(" Marked: %x, LiveCount: %x\n", mark_size, LiveBytes()); |
| 3138 } | 3152 } |
| 3139 | 3153 |
| 3140 #endif // DEBUG | 3154 #endif // DEBUG |
| 3141 } | 3155 } |
| 3142 } // namespace v8::internal | 3156 } // namespace v8::internal |
| OLD | NEW |