diff --git a/src/arm/debug-arm.cc b/src/arm/debug-arm.cc index 97883199f2..aad40c2f38 100644 --- a/src/arm/debug-arm.cc +++ b/src/arm/debug-arm.cc @@ -298,21 +298,26 @@ void DebugCodegen::GenerateFrameDropperLiveEdit(MacroAssembler* masm) { __ mov(r1, Operand::Zero()); __ str(r1, MemOperand(ip, 0)); - // We do not know our frame height, but set sp based on fp. - __ sub(sp, fp, Operand(kPointerSize)); + // Load the function pointer off of our current stack frame. + __ ldr(r1, MemOperand(fp, + StandardFrameConstants::kConstantPoolOffset - kPointerSize)); - __ Pop(lr, fp, r1); // Return address, Frame, Function. + // Pop return address, frame and constant pool pointer (if + // FLAG_enable_ool_constant_pool). + __ LeaveFrame(StackFrame::INTERNAL); - // Load context from the function. - __ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); + { ConstantPoolUnavailableScope constant_pool_unavailable(masm); + // Load context from the function. + __ ldr(cp, FieldMemOperand(r1, JSFunction::kContextOffset)); - // Get function code. - __ ldr(ip, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset)); - __ ldr(ip, FieldMemOperand(ip, SharedFunctionInfo::kCodeOffset)); - __ add(ip, ip, Operand(Code::kHeaderSize - kHeapObjectTag)); + // Get function code. + __ ldr(ip, FieldMemOperand(r1, JSFunction::kSharedFunctionInfoOffset)); + __ ldr(ip, FieldMemOperand(ip, SharedFunctionInfo::kCodeOffset)); + __ add(ip, ip, Operand(Code::kHeaderSize - kHeapObjectTag)); - // Re-run JSFunction, r1 is function, cp is context. - __ Jump(ip); + // Re-run JSFunction, r1 is function, cp is context. + __ Jump(ip); + } }