Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Side by Side Diff: src/wasm/wasm-module.cc

Issue 2626313003: [wasm] Change the constant kV8MaxWasmMemoryPages to a command line flag. (Closed)
Patch Set: typo Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 the V8 project authors. All rights reserved. 1 // Copyright 2015 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 <memory> 5 #include <memory>
6 6
7 #include "src/assembler-inl.h" 7 #include "src/assembler-inl.h"
8 #include "src/base/adapters.h" 8 #include "src/base/adapters.h"
9 #include "src/base/atomic-utils.h" 9 #include "src/base/atomic-utils.h"
10 #include "src/code-stubs.h" 10 #include "src/code-stubs.h"
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
738 Vector<const uint8_t>(reinterpret_cast<uint8_t*>(buffer), name_chars), 738 Vector<const uint8_t>(reinterpret_cast<uint8_t*>(buffer), name_chars),
739 TENURED); 739 TENURED);
740 script->set_name(*name_str.ToHandleChecked()); 740 script->set_name(*name_str.ToHandleChecked());
741 741
742 return script; 742 return script;
743 } 743 }
744 } // namespace 744 } // namespace
745 745
746 Handle<JSArrayBuffer> wasm::NewArrayBuffer(Isolate* isolate, size_t size, 746 Handle<JSArrayBuffer> wasm::NewArrayBuffer(Isolate* isolate, size_t size,
747 bool enable_guard_regions) { 747 bool enable_guard_regions) {
748 if (size > (kV8MaxWasmMemoryPages * WasmModule::kPageSize)) { 748 if (size > (static_cast<uint32_t>(FLAG_wasm_max_mem_pages) *
749 WasmModule::kPageSize)) {
749 // TODO(titzer): lift restriction on maximum memory allocated here. 750 // TODO(titzer): lift restriction on maximum memory allocated here.
750 return Handle<JSArrayBuffer>::null(); 751 return Handle<JSArrayBuffer>::null();
751 } 752 }
752 753
753 enable_guard_regions = enable_guard_regions && kGuardRegionsSupported; 754 enable_guard_regions = enable_guard_regions && kGuardRegionsSupported;
754 755
755 bool is_external; // Set by TryAllocateBackingStore 756 bool is_external; // Set by TryAllocateBackingStore
756 void* memory = 757 void* memory =
757 TryAllocateBackingStore(isolate, size, enable_guard_regions, is_external); 758 TryAllocateBackingStore(isolate, size, enable_guard_regions, is_external);
758 759
(...skipping 1001 matching lines...) Expand 10 before | Expand all | Expand 10 after
1760 break; 1761 break;
1761 default: 1762 default:
1762 UNREACHABLE(); 1763 UNREACHABLE();
1763 break; 1764 break;
1764 } 1765 }
1765 } 1766 }
1766 } 1767 }
1767 1768
1768 // Allocate memory for a module instance as a new JSArrayBuffer. 1769 // Allocate memory for a module instance as a new JSArrayBuffer.
1769 Handle<JSArrayBuffer> AllocateMemory(uint32_t min_mem_pages) { 1770 Handle<JSArrayBuffer> AllocateMemory(uint32_t min_mem_pages) {
1770 if (min_mem_pages > kV8MaxWasmMemoryPages) { 1771 if (min_mem_pages > static_cast<uint32_t>(FLAG_wasm_max_mem_pages)) {
1771 thrower_->RangeError("Out of memory: wasm memory too large"); 1772 thrower_->RangeError("Out of memory: wasm memory too large");
1772 return Handle<JSArrayBuffer>::null(); 1773 return Handle<JSArrayBuffer>::null();
1773 } 1774 }
1774 const bool enable_guard_regions = EnableGuardRegions(); 1775 const bool enable_guard_regions = EnableGuardRegions();
1775 Handle<JSArrayBuffer> mem_buffer = NewArrayBuffer( 1776 Handle<JSArrayBuffer> mem_buffer = NewArrayBuffer(
1776 isolate_, min_mem_pages * WasmModule::kPageSize, enable_guard_regions); 1777 isolate_, min_mem_pages * WasmModule::kPageSize, enable_guard_regions);
1777 1778
1778 if (mem_buffer.is_null()) { 1779 if (mem_buffer.is_null()) {
1779 thrower_->RangeError("Out of memory: wasm memory"); 1780 thrower_->RangeError("Out of memory: wasm memory");
1780 } 1781 }
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
2191 if (instance->has_memory_object()) { 2192 if (instance->has_memory_object()) {
2192 Handle<WasmMemoryObject> memory_object(instance->memory_object(), isolate); 2193 Handle<WasmMemoryObject> memory_object(instance->memory_object(), isolate);
2193 2194
2194 int maximum = memory_object->maximum_pages(); 2195 int maximum = memory_object->maximum_pages();
2195 if (maximum > 0) return static_cast<uint32_t>(maximum); 2196 if (maximum > 0) return static_cast<uint32_t>(maximum);
2196 } 2197 }
2197 uint32_t compiled_max_pages = instance->compiled_module()->max_mem_pages(); 2198 uint32_t compiled_max_pages = instance->compiled_module()->max_mem_pages();
2198 isolate->counters()->wasm_max_mem_pages_count()->AddSample( 2199 isolate->counters()->wasm_max_mem_pages_count()->AddSample(
2199 compiled_max_pages); 2200 compiled_max_pages);
2200 if (compiled_max_pages != 0) return compiled_max_pages; 2201 if (compiled_max_pages != 0) return compiled_max_pages;
2201 return kV8MaxWasmMemoryPages; 2202 return static_cast<uint32_t>(FLAG_wasm_max_mem_pages);
2202 } 2203 }
2203 2204
2204 Handle<JSArrayBuffer> GrowMemoryBuffer(Isolate* isolate, 2205 Handle<JSArrayBuffer> GrowMemoryBuffer(Isolate* isolate,
2205 MaybeHandle<JSArrayBuffer> buffer, 2206 MaybeHandle<JSArrayBuffer> buffer,
2206 uint32_t pages, uint32_t max_pages) { 2207 uint32_t pages, uint32_t max_pages) {
2207 Handle<JSArrayBuffer> old_buffer; 2208 Handle<JSArrayBuffer> old_buffer;
2208 Address old_mem_start = nullptr; 2209 Address old_mem_start = nullptr;
2209 uint32_t old_size = 0; 2210 uint32_t old_size = 0;
2210 if (buffer.ToHandle(&old_buffer) && old_buffer->backing_store() != nullptr) { 2211 if (buffer.ToHandle(&old_buffer) && old_buffer->backing_store() != nullptr) {
2211 old_mem_start = static_cast<Address>(old_buffer->backing_store()); 2212 old_mem_start = static_cast<Address>(old_buffer->backing_store());
2212 DCHECK_NOT_NULL(old_mem_start); 2213 DCHECK_NOT_NULL(old_mem_start);
2213 old_size = old_buffer->byte_length()->Number(); 2214 old_size = old_buffer->byte_length()->Number();
2214 } 2215 }
2215 DCHECK(old_size + pages * WasmModule::kPageSize <= 2216 DCHECK(old_size + pages * WasmModule::kPageSize <=
2216 std::numeric_limits<uint32_t>::max()); 2217 std::numeric_limits<uint32_t>::max());
2217 uint32_t new_size = old_size + pages * WasmModule::kPageSize; 2218 uint32_t new_size = old_size + pages * WasmModule::kPageSize;
2218 if (new_size <= old_size || max_pages * WasmModule::kPageSize < new_size || 2219 if (new_size <= old_size || max_pages * WasmModule::kPageSize < new_size ||
2219 kV8MaxWasmMemoryPages * WasmModule::kPageSize < new_size) { 2220 static_cast<uint32_t>(FLAG_wasm_max_mem_pages) * WasmModule::kPageSize <
2221 new_size) {
2220 return Handle<JSArrayBuffer>::null(); 2222 return Handle<JSArrayBuffer>::null();
2221 } 2223 }
2222 2224
2223 Handle<JSArrayBuffer> new_buffer; 2225 Handle<JSArrayBuffer> new_buffer;
2224 if (!old_buffer.is_null() && old_buffer->has_guard_region()) { 2226 if (!old_buffer.is_null() && old_buffer->has_guard_region()) {
2225 // We don't move the backing store, we simply change the protection to make 2227 // We don't move the backing store, we simply change the protection to make
2226 // more of it accessible. 2228 // more of it accessible.
2227 base::OS::Unprotect(old_buffer->backing_store(), new_size); 2229 base::OS::Unprotect(old_buffer->backing_store(), new_size);
2228 reinterpret_cast<v8::Isolate*>(isolate) 2230 reinterpret_cast<v8::Isolate*>(isolate)
2229 ->AdjustAmountOfExternalAllocatedMemory(pages * WasmModule::kPageSize); 2231 ->AdjustAmountOfExternalAllocatedMemory(pages * WasmModule::kPageSize);
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after
2502 2504
2503 JSObject::AddProperty(entry, name_string, export_name.ToHandleChecked(), 2505 JSObject::AddProperty(entry, name_string, export_name.ToHandleChecked(),
2504 NONE); 2506 NONE);
2505 JSObject::AddProperty(entry, kind_string, export_kind, NONE); 2507 JSObject::AddProperty(entry, kind_string, export_kind, NONE);
2506 2508
2507 storage->set(index, *entry); 2509 storage->set(index, *entry);
2508 } 2510 }
2509 2511
2510 return array_object; 2512 return array_object;
2511 } 2513 }
OLDNEW
« src/flag-definitions.h ('K') | « src/wasm/wasm-limits.h ('k') | test/fuzzer/wasm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698