Commit dc318df3 authored by Clemens Backes's avatar Clemens Backes Committed by V8 LUCI CQ

[wasm][debug] Do not install debug code when tiered up

If the debugger is disabled for an isolate, we first remove all
breakpoints for that isolate, and then tier up the module (if there is
no other isolate that keeps it tiered down).
During the first step, functions might get recompiled since the
set breakpoints change. This is not needed in case we will tier-up the
module afterwards anyway. It also triggers a DCHECK if we reinstall
debugging code even though the module is already marked "tiered up".

This CL avoids the installation of debugging if the module is not tiered
down, and also slightly modified the condition for installing new code
when tiered-up (to allow overwriting debugging code with non-debugging
code even if it's the same tier).

R=thibaudm@chromium.org

Bug: chromium:1228628
Change-Id: I83828d4186e299f779a858006eafa3dbc7966c35
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3026707Reviewed-by: 's avatarThibaud Michaud <thibaudm@chromium.org>
Commit-Queue: Clemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#75722}
parent a3b24ecc
......@@ -1216,8 +1216,10 @@ WasmCode* NativeModule::PublishCodeLocked(
(tiering_state_ == kTieredDown
// Tiered down: Install breakpoints over normal debug code.
? prior_code->for_debugging() <= code->for_debugging()
// Tiered up: Install if the tier is higher than before.
: prior_code->tier() < code->tier()));
// Tiered up: Install if the tier is higher than before or we
// replace debugging code with non-debugging code.
: (prior_code->tier() < code->tier() ||
(prior_code->for_debugging() && !code->for_debugging()))));
if (update_code_table) {
code_table_[slot_idx] = code;
if (prior_code) {
......@@ -1246,7 +1248,9 @@ void NativeModule::ReinstallDebugCode(WasmCode* code) {
DCHECK(!code->IsAnonymous());
DCHECK_LE(module_->num_imported_functions, code->index());
DCHECK_LT(code->index(), num_functions());
DCHECK_EQ(kTieredDown, tiering_state_);
// If the module is tiered up by now, do not reinstall debug code.
if (tiering_state_ != kTieredDown) return;
uint32_t slot_idx = declared_function_index(module(), code->index());
if (WasmCode* prior_code = code_table_[slot_idx]) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment