From 48a4780e9d6121b55924ace851c86ffee0c2a386 Mon Sep 17 00:00:00 2001 From: Thibaud Michaud Date: Thu, 5 Nov 2020 16:31:17 +0100 Subject: [PATCH] Reland "[wasm] Fix code offset after module cache hit" This is a reland of c6c86944ec29889b5a6c27dd9c5a354890c47db5 The code offset is allowed to be null if there is no function in the module. Original change's description: > [wasm] Fix code offset after module cache hit > > If the module cache was hit, we didn't set the code offset in the > decoded module. Hence it was reported as 0 to the DevTools frontend, > leading to subsequent errors. > Note that this error can only happen if multiple isolates share the same > module, which we cannot easily test in v8. Sharing within a single > isolate is implemented via the script cache, so we won't report another > script via CDP. > > R=thibaudm@chromium.org > > Bug: chromium:1114143 > Change-Id: I3218a3b12cf5be09d685e3f371f858ab799cef80 > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2519560 > Reviewed-by: Thibaud Michaud > Commit-Queue: Clemens Backes > Cr-Commit-Position: refs/heads/master@{#70967} Bug: chromium:1114143 Change-Id: I4609cfc61fbd8b5092781dc9308f5651bcc76c42 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2517695 Commit-Queue: Thibaud Michaud Reviewed-by: Clemens Backes Cr-Commit-Position: refs/heads/master@{#70991} --- src/api/api.cc | 4 ++++ src/wasm/module-compiler.cc | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/api/api.cc b/src/api/api.cc index 9cfedf2f21..cb0409af96 100644 --- a/src/api/api.cc +++ b/src/api/api.cc @@ -9976,6 +9976,10 @@ int debug::WasmScript::CodeOffset() const { i::wasm::NativeModule* native_module = script->wasm_native_module(); const i::wasm::WasmModule* module = native_module->module(); + // If the module contains at least one function, the code offset must have + // been initialized, and it cannot be zero. + DCHECK_IMPLIES(module->num_declared_functions > 0, + module->code.offset() != 0); return module->code.offset(); } diff --git a/src/wasm/module-compiler.cc b/src/wasm/module-compiler.cc index df30ea61bd..ea194c0b18 100644 --- a/src/wasm/module-compiler.cc +++ b/src/wasm/module-compiler.cc @@ -2479,6 +2479,8 @@ bool AsyncStreamingProcessor::ProcessCodeSectionHeader( return false; } + decoder_.set_code_section(offset, static_cast(code_section_length)); + prefix_hash_ = base::hash_combine(prefix_hash_, static_cast(code_section_length)); if (!wasm_engine_->GetStreamingCompilationOwnership(prefix_hash_)) { @@ -2500,7 +2502,6 @@ bool AsyncStreamingProcessor::ProcessCodeSectionHeader( job_->DoImmediately( decoder_.shared_module(), false, code_size_estimate); - decoder_.set_code_section(offset, static_cast(code_section_length)); auto* compilation_state = Impl(job_->native_module_->compilation_state()); compilation_state->SetWireBytesStorage(std::move(wire_bytes_storage)); DCHECK_EQ(job_->native_module_->module()->origin, kWasmOrigin);