9ca7491b35
This is a reland of commit 8278cb5015
The reland adds the RestartFrameTrampoline to the list of
builtins that the deoptimizer is allowed to return from for
control flow integrity.
Original change's description:
> [inspector] Re-enable Debugger#restartFrame
>
> Doc: https://bit.ly/revive-restart-frame
>
> This CL "undeprecates" Debugger#restartFrame and adds a new optional
> "mode" parameter for back-wards compatibility. Moreover, the return
> values are all deprecated. They were never actually used in the
> DevTools frontend and the same information is available from the
> Debugger#paused event that fires once execution stops at the
> beginning of the restarted function.
>
> The CL also re-baselines all the restart-frame inspector tests that
> now run successfully.
>
> R=bmeurer@chromium.org, kimanh@chromium.org
>
> Bug: chromium:1303521
> Change-Id: I34bddeb1f2f4ff3dee58dd82e779c111495566f3
> Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3616505
> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
> Reviewed-by: Kim-Anh Tran <kimanh@chromium.org>
> Commit-Queue: Simon Zünd <szuend@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#80491}
Bug: chromium:1303521
Change-Id: I13e2f8b5011795a38e541310622b8333a3d08049
Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3644624
Reviewed-by: Nico Hartmann <nicohartmann@chromium.org>
Commit-Queue: Simon Zünd <szuend@chromium.org>
Reviewed-by: Kim-Anh Tran <kimanh@chromium.org>
Cr-Commit-Position: refs/heads/main@{#80534}
140 lines
3.0 KiB
Plaintext
140 lines
3.0 KiB
Plaintext
Checks that restarting every frame on the stack works.
|
|
|
|
---- Restarting at frame index 0 ----
|
|
Paused at (after evaluation):
|
|
console.log('A');
|
|
#debugger;
|
|
return 'Magic value';
|
|
|
|
Pause stack:
|
|
A:3 (canBeRestarted = true)
|
|
B:8 (canBeRestarted = true)
|
|
C:13 (canBeRestarted = true)
|
|
D:18 (canBeRestarted = true)
|
|
E:22 (canBeRestarted = true)
|
|
F:26 (canBeRestarted = true)
|
|
|
|
Restarting function "A" ...
|
|
Paused at (after restart):
|
|
function A() {
|
|
#console.log('A');
|
|
debugger;
|
|
|
|
Evaluating to: Magic value
|
|
Called functions: F,E,D,C,B,A,A
|
|
|
|
---- Restarting at frame index 1 ----
|
|
Paused at (after evaluation):
|
|
console.log('A');
|
|
#debugger;
|
|
return 'Magic value';
|
|
|
|
Pause stack:
|
|
A:3 (canBeRestarted = true)
|
|
B:8 (canBeRestarted = true)
|
|
C:13 (canBeRestarted = true)
|
|
D:18 (canBeRestarted = true)
|
|
E:22 (canBeRestarted = true)
|
|
F:26 (canBeRestarted = true)
|
|
|
|
Restarting function "B" ...
|
|
Paused at (after restart):
|
|
function B(param1, param2) {
|
|
#console.log('B');
|
|
return A();
|
|
|
|
Evaluating to: Magic value
|
|
Called functions: F,E,D,C,B,A,B,A
|
|
|
|
---- Restarting at frame index 2 ----
|
|
Paused at (after evaluation):
|
|
console.log('A');
|
|
#debugger;
|
|
return 'Magic value';
|
|
|
|
Pause stack:
|
|
A:3 (canBeRestarted = true)
|
|
B:8 (canBeRestarted = true)
|
|
C:13 (canBeRestarted = true)
|
|
D:18 (canBeRestarted = true)
|
|
E:22 (canBeRestarted = true)
|
|
F:26 (canBeRestarted = true)
|
|
|
|
Restarting function "C" ...
|
|
Paused at (after restart):
|
|
function C() {
|
|
#console.log('C');
|
|
// Function call with argument adapter is intentional.
|
|
|
|
Evaluating to: Magic value
|
|
Called functions: F,E,D,C,B,A,C,B,A
|
|
|
|
---- Restarting at frame index 3 ----
|
|
Paused at (after evaluation):
|
|
console.log('A');
|
|
#debugger;
|
|
return 'Magic value';
|
|
|
|
Pause stack:
|
|
A:3 (canBeRestarted = true)
|
|
B:8 (canBeRestarted = true)
|
|
C:13 (canBeRestarted = true)
|
|
D:18 (canBeRestarted = true)
|
|
E:22 (canBeRestarted = true)
|
|
F:26 (canBeRestarted = true)
|
|
|
|
Restarting function "D" ...
|
|
Paused at (after restart):
|
|
function D() {
|
|
#console.log('D');
|
|
// Function call with argument adapter is intentional.
|
|
|
|
Evaluating to: Magic value
|
|
Called functions: F,E,D,C,B,A,D,C,B,A
|
|
|
|
---- Restarting at frame index 4 ----
|
|
Paused at (after evaluation):
|
|
console.log('A');
|
|
#debugger;
|
|
return 'Magic value';
|
|
|
|
Pause stack:
|
|
A:3 (canBeRestarted = true)
|
|
B:8 (canBeRestarted = true)
|
|
C:13 (canBeRestarted = true)
|
|
D:18 (canBeRestarted = true)
|
|
E:22 (canBeRestarted = true)
|
|
F:26 (canBeRestarted = true)
|
|
|
|
Restarting function "E" ...
|
|
Paused at (after restart):
|
|
function E() {
|
|
#console.log('E');
|
|
return D();
|
|
|
|
Evaluating to: Magic value
|
|
Called functions: F,E,D,C,B,A,E,D,C,B,A
|
|
|
|
---- Restarting at frame index 5 ----
|
|
Paused at (after evaluation):
|
|
console.log('A');
|
|
#debugger;
|
|
return 'Magic value';
|
|
|
|
Pause stack:
|
|
A:3 (canBeRestarted = true)
|
|
B:8 (canBeRestarted = true)
|
|
C:13 (canBeRestarted = true)
|
|
D:18 (canBeRestarted = true)
|
|
E:22 (canBeRestarted = true)
|
|
F:26 (canBeRestarted = true)
|
|
|
|
Restarting function "F" ...
|
|
Paused at (after restart):
|
|
function F() {
|
|
#console.log('F');
|
|
return E();
|
|
|
|
Evaluating to: Magic value
|
|
Called functions: F,E,D,C,B,A,F,E,D,C,B,A
|