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 56 : void DebugCodegen::GenerateHandleDebuggerStatement(MacroAssembler* masm) {
21 : {
22 56 : FrameScope scope(masm, StackFrame::INTERNAL);
23 56 : __ CallRuntime(Runtime::kHandleDebuggerStatement, 0);
24 : }
25 56 : __ MaybeDropFrames();
26 :
27 : // Return to caller.
28 56 : __ ret(0);
29 56 : }
30 :
31 56 : 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 :
38 : Register decompr_scratch_for_debug =
39 56 : COMPRESS_POINTERS_BOOL ? kScratchRegister : no_reg;
40 :
41 56 : __ movp(rbp, rbx);
42 112 : __ movp(rdi, Operand(rbp, JavaScriptFrameConstants::kFunctionOffset));
43 56 : __ leave();
44 :
45 : __ LoadTaggedPointerField(
46 : rbx, FieldOperand(rdi, JSFunction::kSharedFunctionInfoOffset),
47 56 : decompr_scratch_for_debug);
48 : __ movzxwq(
49 : rbx, FieldOperand(rbx, SharedFunctionInfo::kFormalParameterCountOffset));
50 :
51 : ParameterCount dummy(rbx);
52 56 : __ InvokeFunction(rdi, no_reg, dummy, dummy, JUMP_FUNCTION);
53 56 : }
54 :
55 : const bool LiveEdit::kFrameDropperSupported = true;
56 :
57 : #undef __
58 :
59 : } // namespace internal
60 183867 : } // namespace v8
61 :
62 : #endif // V8_TARGET_ARCH_X64
|