v8/test/inspector/debugger/wasm-script-code-offset.js

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

144 lines
4.5 KiB
JavaScript
Raw Normal View History

Reland "[wasm][inspector][test] Add more tests for code offsets" This is a reland of 4719dae1a4ab2067120cf0dbab89514adf662b73. The "V8 Linux64 TSAN - stress-incremental-marking" bot adds the --stress-incremental-marking flag for all variants, hence the SKIP in the status file was not triggered. We just explicitly disable the --stress-incremental-marking flag for the two new tests. This works for the "stress_incremental_marking" variant as well as the specific bot. Original change's description: > [wasm][inspector][test] Add more tests for code offsets > > The code offsets are sometimes wrong when compiled with streaming > compilation. Thus add more tests for synchronous, asynchronous, and > streaming compilation. The reported code offsets should all match. This > will be fixed in a follow-up CL. > > In order to make asynchronous WebAssembly compilation finish, the > inspector-test executable needs to pump the message loop before waiting > for new tasks to come in, just as other executables like d8. > This is added in this CL, but because of another bug this is skipped in > the stress-incremental-marking variant. Hence the new tests are also > skipped there. > > R=szuend@chromium.org > CC=ahaas@chromium.org > > Bug: chromium:1150303, v8:10748 > Change-Id: Ie1d63c8d6795e61627d838b7fa7b21e6728befc0 > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2562382 > Reviewed-by: Andreas Haas <ahaas@chromium.org> > Commit-Queue: Clemens Backes <clemensb@chromium.org> > Cr-Commit-Position: refs/heads/master@{#71483} Bug: chromium:1150303 Bug: v8:10748 Change-Id: I9adb9fc0250fab5c43dc85b695f4d338a9c7183c Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2565128 Reviewed-by: Andreas Haas <ahaas@chromium.org> Commit-Queue: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/master@{#71492}
2020-11-30 13:45:16 +00:00
// Copyright 2020 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.
// Because of https://crbug.com/v8/10748 we skip pumping the message loop
// with --stress-incremental-marking, which makes this test fail. Thus disable
// that stress mode here.
// Flags: --no-stress-incremental-marking
utils.load('test/inspector/wasm-inspector-test.js');
let {session, contextGroup, Protocol} =
InspectorTest.start('Tests reported code offsets on wasm scripts');
// Include a sentinel in every module to avoid re-using a cached module.
let sentinel = 0;
function addHeader(binary, num_functions) {
binary.emit_header();
// Add a custom section with the sentinel.
var custom_section = new Binary();
custom_section.emit_u8(0); // section code
custom_section.emit_u8(10); // section length
custom_section.emit_string('sentinel'); // name
custom_section.emit_bytes([sentinel]); // payload
++sentinel;
binary.emit_bytes(custom_section.trunc_buffer());
// Type section with a single function type with no params and no returns.
binary.emit_section(kTypeSectionCode, section => {
section.emit_u32v(1); // count
section.emit_u8(kWasmFunctionTypeForm);
section.emit_u32v(0); // params
section.emit_u32v(0); // results
});
// Function section with {num_functions} many functions.
binary.emit_section(kFunctionSectionCode, section => {
section.emit_u32v(num_functions);
for (let i = 0; i < num_functions; ++i) {
section.emit_u32v(0); // type index
}
});
}
function createModuleWithNoCodeSection() {
let binary = new Binary;
addHeader(binary, 0);
return binary.trunc_buffer();
}
function createModuleWithEmptyCodeSection() {
let binary = new Binary;
addHeader(binary, 0);
// Section code.
binary.emit_u8(kCodeSectionCode);
// Section length (1).
binary.emit_u32v(1);
// Payload (functions count: 0).
binary.emit_u32v(0);
return binary.trunc_buffer();
}
function createModuleWithFiveByteSectionLength() {
let binary = new Binary;
addHeader(binary, 1);
// Section code.
binary.emit_u8(kCodeSectionCode);
// Section length (4 as 5-byte LEB).
binary.emit_bytes([0x84, 0x80, 0x80, 0x80, 0x00]);
binary.emit_u32v(1); // functions count
binary.emit_u32v(2); // body size
binary.emit_u32v(0); // num locals
binary.emit_bytes([kExprEnd]); // body
return binary.trunc_buffer();
}
function createModuleWithFiveBytePayload() {
let binary = new Binary;
addHeader(binary, 1);
// Section code.
binary.emit_u8(kCodeSectionCode);
// Section length (8).
binary.emit_bytes([0x88, 0x80, 0x80, 0x80, 0x00]);
// Functions count (1 as 5-byte LEB).
binary.emit_bytes([0x81, 0x80, 0x80, 0x80, 0x00]);
binary.emit_u32v(2); // body size
binary.emit_u32v(0); // num locals
binary.emit_bytes([kExprEnd]); // body
return binary.trunc_buffer();
}
function compileSync(bytes) {
new WebAssembly.Module(new Uint8Array(bytes));
}
function compileAsync(bytes) {
WebAssembly.compile(new Uint8Array(bytes));
}
contextGroup.addScript(
`${compileSync}${compileAsync}`, 0, 0, 'v8://test/compileFunctions');
InspectorTest.runAsyncTestSuite([
async function test() {
Protocol.Debugger.enable();
let script_ids = new Map();
let generators = [
createModuleWithNoCodeSection, createModuleWithEmptyCodeSection,
createModuleWithFiveByteSectionLength, createModuleWithFiveBytePayload
];
for (let generator of generators) {
session.Protocol.Runtime.evaluate({
'expression': `
compileSync([${generator()}]);
compileAsync([${generator()}]);
`
});
// Wait for both wasm scripts to be there and print their information.
for (let wasm_scripts = 0; wasm_scripts < 2;) {
({params} = await Protocol.Debugger.onceScriptParsed());
if (!params.url.startsWith('wasm://')) continue;
if (!script_ids.has(params.scriptId)) {
script_ids.set(params.scriptId, script_ids.size);
}
// Print script IDs to ensure that script are not deduplicated (via
// cache).
let stable_id = script_ids.get(params.scriptId);
InspectorTest.log(`Wasm script parsed: ID ${stable_id}, startColumn: ${
params.startColumn}, endColumn: ${params.endColumn}, codeOffset: ${
params.codeOffset}`);
++wasm_scripts;
Reland "[wasm][inspector][test] Add more tests for code offsets" This is a reland of 4719dae1a4ab2067120cf0dbab89514adf662b73. The "V8 Linux64 TSAN - stress-incremental-marking" bot adds the --stress-incremental-marking flag for all variants, hence the SKIP in the status file was not triggered. We just explicitly disable the --stress-incremental-marking flag for the two new tests. This works for the "stress_incremental_marking" variant as well as the specific bot. Original change's description: > [wasm][inspector][test] Add more tests for code offsets > > The code offsets are sometimes wrong when compiled with streaming > compilation. Thus add more tests for synchronous, asynchronous, and > streaming compilation. The reported code offsets should all match. This > will be fixed in a follow-up CL. > > In order to make asynchronous WebAssembly compilation finish, the > inspector-test executable needs to pump the message loop before waiting > for new tasks to come in, just as other executables like d8. > This is added in this CL, but because of another bug this is skipped in > the stress-incremental-marking variant. Hence the new tests are also > skipped there. > > R=szuend@chromium.org > CC=ahaas@chromium.org > > Bug: chromium:1150303, v8:10748 > Change-Id: Ie1d63c8d6795e61627d838b7fa7b21e6728befc0 > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2562382 > Reviewed-by: Andreas Haas <ahaas@chromium.org> > Commit-Queue: Clemens Backes <clemensb@chromium.org> > Cr-Commit-Position: refs/heads/master@{#71483} Bug: chromium:1150303 Bug: v8:10748 Change-Id: I9adb9fc0250fab5c43dc85b695f4d338a9c7183c Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2565128 Reviewed-by: Andreas Haas <ahaas@chromium.org> Commit-Queue: Clemens Backes <clemensb@chromium.org> Cr-Commit-Position: refs/heads/master@{#71492}
2020-11-30 13:45:16 +00:00
}
}
}
]);