Line data Source code
1 : // Copyright 2012 the V8 project authors. All rights reserved.
2 : // Use of this source code is governed by a BSD-style license that can be
3 : // found in the LICENSE file.
4 :
5 : #if V8_TARGET_ARCH_X64
6 :
7 : #include "src/debug/debug.h"
8 :
9 : #include "src/assembler.h"
10 : #include "src/debug/liveedit.h"
11 : #include "src/frames-inl.h"
12 : #include "src/macro-assembler.h"
13 : #include "src/objects-inl.h"
14 :
15 : namespace v8 {
16 : namespace internal {
17 :
18 : #define __ ACCESS_MASM(masm)
19 :
20 31 : void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) {
21 : {
22 31 : FrameScope scope(masm, StackFrame::INTERNAL);
23 31 : __ CallRuntime(Runtime::kHandleDebuggerStatement, 0);
24 : }
25 31 : __ MaybeDropFrames();
26 :
27 : // Return to caller.
28 31 : __ ret(0);
29 31 : }
30 :
31 31 : void DebugCodegen::GenerateFrameDropperTrampoline(MacroAssembler* masm) {
32 : // Frame is being dropped:
33 : // - Drop to the target frame specified by rbx.
34 : // - Look up current function on the frame.
35 : // - Leave the frame.
36 : // - Restart the frame by calling the function.
37 31 : __ movp(rbp, rbx);
38 62 : __ movp(rdi, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset));
39 31 : __ leave();
40 :
41 : __ movp(rbx, FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset));
42 : __ movsxlq(
43 31 : rbx, FieldOperand(rbx, SharedFunctionInfo::kFormalParameterCountOffset));
44 :
45 : ParameterCount dummy(rbx);
46 31 : __ InvokeFunction(rdi, no_reg, dummy, dummy, JUMP_FUNCTION);
47 31 : }
48 :
49 : const bool LiveEdit::kFrameDropperSupported = true;
50 :
51 : #undef __
52 :
53 : } // namespace internal
54 : } // namespace v8
55 :
56 : #endif // V8_TARGET_ARCH_X64
|