summaryrefslogtreecommitdiff
path: root/deps/v8/src/debug/arm64/debug-arm64.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/debug/arm64/debug-arm64.cc')
-rw-r--r--deps/v8/src/debug/arm64/debug-arm64.cc27
1 files changed, 18 insertions, 9 deletions
diff --git a/deps/v8/src/debug/arm64/debug-arm64.cc b/deps/v8/src/debug/arm64/debug-arm64.cc
index 3e4b67c938..cd017219d2 100644
--- a/deps/v8/src/debug/arm64/debug-arm64.cc
+++ b/deps/v8/src/debug/arm64/debug-arm64.cc
@@ -92,9 +92,15 @@ void DebugCodegen::GenerateDebugBreakStub(MacroAssembler* masm,
__ Mov(scratch, Smi::FromInt(LiveEdit::kFramePaddingInitialSize));
__ Push(scratch);
- if (mode == SAVE_RESULT_REGISTER) __ Push(x0);
-
- __ Mov(x0, 0); // No arguments.
+ // Push arguments for DebugBreak call.
+ if (mode == SAVE_RESULT_REGISTER) {
+ // Break on return.
+ __ Push(x0);
+ } else {
+ // Non-return breaks.
+ __ Push(masm->isolate()->factory()->the_hole_value());
+ }
+ __ Mov(x0, 1);
__ Mov(x1, ExternalReference(Runtime::FunctionForId(Runtime::kDebugBreak),
masm->isolate()));
@@ -104,13 +110,14 @@ void DebugCodegen::GenerateDebugBreakStub(MacroAssembler* masm,
if (FLAG_debug_code) {
for (int i = 0; i < kNumJSCallerSaved; i++) {
Register reg = Register::XRegFromCode(JSCallerSavedCode(i));
- __ Mov(reg, Operand(kDebugZapValue));
+ // Do not clobber x0 if mode is SAVE_RESULT_REGISTER. It will
+ // contain return value of the function.
+ if (!(reg.is(x0) && (mode == SAVE_RESULT_REGISTER))) {
+ __ Mov(reg, Operand(kDebugZapValue));
+ }
}
}
- // Restore the register values from the expression stack.
- if (mode == SAVE_RESULT_REGISTER) __ Pop(x0);
-
// Don't bother removing padding bytes pushed on the stack
// as the frame is going to be restored right away.
@@ -130,10 +137,12 @@ void DebugCodegen::GenerateDebugBreakStub(MacroAssembler* masm,
void DebugCodegen::GenerateFrameDropperLiveEdit(MacroAssembler* masm) {
// We do not know our frame height, but set sp based on fp.
- __ Sub(masm->StackPointer(), fp, kPointerSize);
+ __ Add(masm->StackPointer(), fp, FrameDropperFrameConstants::kFunctionOffset);
__ AssertStackConsistency();
- __ Pop(x1, fp, lr); // Function, Frame, Return address.
+ __ Pop(x1); // Function
+ __ Mov(masm->StackPointer(), Operand(fp));
+ __ Pop(fp, lr); // Frame, Return address.
ParameterCount dummy(0);
__ FloodFunctionIfStepping(x1, no_reg, dummy, dummy);