Reland "[wasm] Fix code offset after module cache hit"

This is a reland of c6c86944ec
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 <thibaudm@chromium.org>
> Commit-Queue: Clemens Backes <clemensb@chromium.org>
> 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 <thibaudm@chromium.org>
Reviewed-by: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#70991}
This commit is contained in:
Thibaud Michaud 2020-11-05 16:31:17 +01:00 committed by Commit Bot
parent 3fbc94f625
commit 48a4780e9d
2 changed files with 6 additions and 1 deletions

View File

@ -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();
}

View File

@ -2479,6 +2479,8 @@ bool AsyncStreamingProcessor::ProcessCodeSectionHeader(
return false;
}
decoder_.set_code_section(offset, static_cast<uint32_t>(code_section_length));
prefix_hash_ = base::hash_combine(prefix_hash_,
static_cast<uint32_t>(code_section_length));
if (!wasm_engine_->GetStreamingCompilationOwnership(prefix_hash_)) {
@ -2500,7 +2502,6 @@ bool AsyncStreamingProcessor::ProcessCodeSectionHeader(
job_->DoImmediately<AsyncCompileJob::PrepareAndStartCompile>(
decoder_.shared_module(), false, code_size_estimate);
decoder_.set_code_section(offset, static_cast<uint32_t>(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);