cfc4bba0a0
This patch maintains the previous default value of the flag controlling the max size of Wasm memories, but allows the limit to be raised on the command line. Bonus content: improve the multi-mapped mock allocator by falling back to regular allocation for small requests. More bonus content: make debug-mode Wasm tests faster. Bug: v8:6306 Change-Id: Idabae5734794b06e65d45b3a6165dbd488847f3f Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/1981157 Auto-Submit: Jakob Kummerow <jkummerow@chromium.org> Reviewed-by: Clemens Backes <clemensb@chromium.org> Reviewed-by: Andreas Haas <ahaas@chromium.org> Commit-Queue: Jakob Kummerow <jkummerow@chromium.org> Cr-Commit-Position: refs/heads/master@{#65681}
85 lines
2.2 KiB
JavaScript
85 lines
2.2 KiB
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
// Flags: --wasm-max-mem-pages=49152
|
|
// Save some memory on Linux; other platforms ignore this flag.
|
|
// Flags: --multi-mapped-mock-allocator
|
|
|
|
// This test makes sure things don't break once we support >2GB wasm memories.
|
|
load("test/mjsunit/wasm/wasm-module-builder.js");
|
|
|
|
(function testHugeMemory() {
|
|
print(arguments.callee.name);
|
|
var builder = new WasmModuleBuilder();
|
|
|
|
const num_pages = 49152; // 3GB
|
|
|
|
builder.addMemory(num_pages, num_pages, true);
|
|
builder.addFunction("geti", kSig_i_ii)
|
|
.addBody([
|
|
kExprLocalGet, 0,
|
|
kExprLocalGet, 1,
|
|
kExprI32Mul,
|
|
kExprI32LoadMem, 0, 0,
|
|
])
|
|
.exportFunc();
|
|
|
|
var module = builder.instantiate();
|
|
const geti = module.exports.geti;
|
|
|
|
print("In bounds");
|
|
assertEquals(0, geti(2500, 1 << 20));
|
|
print("Out of bounds");
|
|
assertTraps(kTrapMemOutOfBounds, () => geti(3500, 1 << 20));
|
|
})();
|
|
|
|
(function testHugeMemoryConstInBounds() {
|
|
print(arguments.callee.name);
|
|
var builder = new WasmModuleBuilder();
|
|
|
|
const num_pages = 49152; // 3GB
|
|
|
|
builder.addMemory(num_pages, num_pages, true);
|
|
builder.addFunction("geti", kSig_i_v)
|
|
.addBody([
|
|
kExprI32Const, 0x80, 0x80, 0x80, 0x80, 0x7A, // 0xA0000000, 2.5GB
|
|
kExprI32LoadMem, 0, 0,
|
|
])
|
|
.exportFunc();
|
|
|
|
var module = builder.instantiate();
|
|
const geti = module.exports.geti;
|
|
|
|
print("In bounds");
|
|
assertEquals(0, geti());
|
|
})();
|
|
|
|
(function testHugeMemoryConstOutOfBounds() {
|
|
print(arguments.callee.name);
|
|
var builder = new WasmModuleBuilder();
|
|
|
|
const num_pages = 49152; // 3GB
|
|
|
|
builder.addMemory(num_pages, num_pages, true);
|
|
builder.addFunction("geti", kSig_i_v)
|
|
.addBody([
|
|
kExprI32Const, 0x80, 0x80, 0x80, 0x80, 0x7E, // 0xE0000000, 3.5GB
|
|
kExprI32LoadMem, 0, 0,
|
|
])
|
|
.exportFunc();
|
|
|
|
var module = builder.instantiate();
|
|
const geti = module.exports.geti;
|
|
|
|
print("Out of bounds");
|
|
assertTraps(kTrapMemOutOfBounds, geti);
|
|
})();
|
|
|
|
(function testGrowHugeMemory() {
|
|
print(arguments.callee.name);
|
|
|
|
let mem = new WebAssembly.Memory({initial: 1});
|
|
mem.grow(49151);
|
|
})();
|