efb80afe2a
The native module cache makes it difficult to test deserialization, because the native module just gets loaded from the cache instead of deserializing the serialized module. This CL adds a new flag, --wasm-native-module-cache-enabled, to control whether the native module cache is enabled or not. The cache gets disabled by handling all modules like asm.js modules when the cache gets disabled, as the cache is not used for asm.js. The name of the flag is positive (i.e. `enabled` instead of `disabled`) to avoid double negation. The flag is true by default, and set to false in tests. R=thibaudm@chromium.org CC=clemensb@chromium.org Bug: v8:12964 Change-Id: If2b96a95ccf37f2eb8a868ad1661c3325c1048f6 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3703836 Commit-Queue: Andreas Haas <ahaas@chromium.org> Reviewed-by: Thibaud Michaud <thibaudm@chromium.org> Cr-Commit-Position: refs/heads/main@{#81132}
46 lines
1.4 KiB
JavaScript
46 lines
1.4 KiB
JavaScript
// Copyright 2021 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.
|
|
|
|
// The test needs --no-liftoff because we can't serialize and deserialize
|
|
// Liftoff code.
|
|
// Flags: --allow-natives-syntax --wasm-lazy-compilation --expose-gc
|
|
// Flags: --no-liftoff --no-wasm-native-module-cache-enabled
|
|
|
|
d8.file.execute('test/mjsunit/wasm/wasm-module-builder.js');
|
|
|
|
const num_functions = 3;
|
|
|
|
function create_builder() {
|
|
const builder = new WasmModuleBuilder();
|
|
builder.addImport("foo", "bar", kSig_i_v);
|
|
for (let i = 0; i < num_functions; ++i) {
|
|
builder.addFunction('f' + i, kSig_i_v)
|
|
.addBody(wasmI32Const(i))
|
|
.exportFunc();
|
|
}
|
|
return builder;
|
|
}
|
|
|
|
const wire_bytes = create_builder().toBuffer();
|
|
|
|
function serializeModule() {
|
|
const module = new WebAssembly.Module(wire_bytes);
|
|
// Run one function so that serialization happens.
|
|
let instance = new WebAssembly.Instance(module, {foo: {bar: () => 1}});
|
|
instance.exports.f2();
|
|
const buff = %SerializeWasmModule(module);
|
|
return buff;
|
|
};
|
|
|
|
const serialized_module = serializeModule();
|
|
|
|
(function testSerializedModule() {
|
|
print(arguments.callee.name);
|
|
const module = %DeserializeWasmModule(serialized_module, wire_bytes);
|
|
|
|
const instance = new WebAssembly.Instance(module, {foo: {bar: () => 1}});
|
|
assertEquals(0, instance.exports.f0());
|
|
assertEquals(1, instance.exports.f1());
|
|
})();
|