Commit dded0933 authored by Thibaud Michaud's avatar Thibaud Michaud Committed by Commit Bot

[liftoff] Skip unreachable breakpoints

Forward the breakpoint iterator to the current position, ignoring
unreachable breakpoints.

R=clemensb@chromium.org

Bug: v8:10147
Change-Id: Ic7e7fca4c69fdea68676ff75031bb5133bfc69d9
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2100993
Commit-Queue: Thibaud Michaud <thibaudm@chromium.org>
Reviewed-by: 's avatarClemens Backes <clemensb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#66716}
parent e47f9a9d
......@@ -633,10 +633,6 @@ class LiftoffCompiler {
}
void FinishFunction(FullDecoder* decoder) {
// All breakpoints (if any) must be emitted by now.
DCHECK(next_breakpoint_ptr_ == nullptr ||
(*next_breakpoint_ptr_ == 0 &&
next_breakpoint_ptr_ + 1 == next_breakpoint_end_));
if (DidAssemblerBailout(decoder)) return;
for (OutOfLineCode& ool : out_of_line_code_) {
GenerateOutOfLineCode(&ool);
......@@ -662,13 +658,17 @@ class LiftoffCompiler {
// A single breakpoint at offset 0 indicates stepping.
DCHECK_EQ(next_breakpoint_ptr_ + 1, next_breakpoint_end_);
EmitBreakpoint(decoder);
} else if (*next_breakpoint_ptr_ == decoder->position()) {
++next_breakpoint_ptr_;
// TODO(thibaudm): skip unreachable breakpoints.
} else {
while (next_breakpoint_ptr_ != next_breakpoint_end_ &&
*next_breakpoint_ptr_ < decoder->position()) {
// Skip unreachable breakpoints.
++next_breakpoint_ptr_;
}
if (next_breakpoint_ptr_ == next_breakpoint_end_) {
next_breakpoint_ptr_ = next_breakpoint_end_ = nullptr;
} else if (*next_breakpoint_ptr_ == decoder->position()) {
EmitBreakpoint(decoder);
}
EmitBreakpoint(decoder);
}
}
TraceCacheState(decoder);
......
......@@ -18,6 +18,8 @@ at wasm_B (0:56):
at (anonymous) (0:17):
-- skipped
Setting breakpoint at offset 39 on script v8://test/runWasm
Setting breakpoint at offset 61 on script v8://test/runWasm
Setting breakpoint at offset 60 on script v8://test/runWasm
Setting breakpoint at offset 54 on script v8://test/runWasm
Setting breakpoint at offset 53 on script v8://test/runWasm
Setting breakpoint at offset 51 on script v8://test/runWasm
......@@ -322,5 +324,15 @@ at wasm_B (0:47):
stack: "0": -11 (number)
at (anonymous) (0:17):
-- skipped
Paused:
Script wasm://wasm/0c10a5fe byte offset 61: Wasm opcode 0xb
Scope:
at wasm_B (0:61):
- scope (global):
- scope (local):
locals: "var0": 0 (number)
stack:
at (anonymous) (0:17):
-- skipped
exports.main returned!
Finished!
......@@ -95,7 +95,8 @@ Protocol.Debugger.onPaused(async msg => {
// Check that setting breakpoints on active instances of A and B takes
// effect immediately.
setBreakpoint(func_a.body_offset + 1, loc.scriptId, frame.url);
for (offset of [11, 10, 8, 6, 2, 4]) {
// All of the following breakpoints are in reachable code, except offset 17.
for (offset of [18, 17, 11, 10, 8, 6, 2, 4]) {
setBreakpoint(func_b.body_offset + offset, loc.scriptId, frame.url);
}
first_iteration = false;
......
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