Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/x64/debug-x64.cc

Issue 265593004: Always initialize the debugger eagerly. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/serialize.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "v8.h" 5 #include "v8.h"
6 6
7 #if V8_TARGET_ARCH_X64 7 #if V8_TARGET_ARCH_X64
8 8
9 #include "assembler.h" 9 #include "assembler.h"
10 #include "codegen.h" 10 #include "codegen.h"
11 #include "debug.h" 11 #include "debug.h"
12 12
13 13
14 namespace v8 { 14 namespace v8 {
15 namespace internal { 15 namespace internal {
16 16
17 bool BreakLocationIterator::IsDebugBreakAtReturn() { 17 bool BreakLocationIterator::IsDebugBreakAtReturn() {
18 return Debug::IsDebugBreakAtReturn(rinfo()); 18 return Debug::IsDebugBreakAtReturn(rinfo());
19 } 19 }
20 20
21 21
22 // Patch the JS frame exit code with a debug break call. See 22 // Patch the JS frame exit code with a debug break call. See
23 // CodeGenerator::VisitReturnStatement and VirtualFrame::Exit in codegen-x64.cc 23 // CodeGenerator::VisitReturnStatement and VirtualFrame::Exit in codegen-x64.cc
24 // for the precise return instructions sequence. 24 // for the precise return instructions sequence.
25 void BreakLocationIterator::SetDebugBreakAtReturn() { 25 void BreakLocationIterator::SetDebugBreakAtReturn() {
26 ASSERT(Assembler::kJSReturnSequenceLength >= Assembler::kCallSequenceLength); 26 ASSERT(Assembler::kJSReturnSequenceLength >= Assembler::kCallSequenceLength);
27 rinfo()->PatchCodeWithCall( 27 rinfo()->PatchCodeWithCall(
28 debug_info_->GetIsolate()->debug()->debug_break_return()->entry(), 28 debug_info_->GetIsolate()->builtins()->Return_DebugBreak()->entry(),
29 Assembler::kJSReturnSequenceLength - Assembler::kCallSequenceLength); 29 Assembler::kJSReturnSequenceLength - Assembler::kCallSequenceLength);
30 } 30 }
31 31
32 32
33 // Restore the JS frame exit code. 33 // Restore the JS frame exit code.
34 void BreakLocationIterator::ClearDebugBreakAtReturn() { 34 void BreakLocationIterator::ClearDebugBreakAtReturn() {
35 rinfo()->PatchCode(original_rinfo()->pc(), 35 rinfo()->PatchCode(original_rinfo()->pc(),
36 Assembler::kJSReturnSequenceLength); 36 Assembler::kJSReturnSequenceLength);
37 } 37 }
38 38
39 39
40 // A debug break in the frame exit code is identified by the JS frame exit code 40 // A debug break in the frame exit code is identified by the JS frame exit code
41 // having been patched with a call instruction. 41 // having been patched with a call instruction.
42 bool Debug::IsDebugBreakAtReturn(v8::internal::RelocInfo* rinfo) { 42 bool Debug::IsDebugBreakAtReturn(v8::internal::RelocInfo* rinfo) {
43 ASSERT(RelocInfo::IsJSReturn(rinfo->rmode())); 43 ASSERT(RelocInfo::IsJSReturn(rinfo->rmode()));
44 return rinfo->IsPatchedReturnSequence(); 44 return rinfo->IsPatchedReturnSequence();
45 } 45 }
46 46
47 47
48 bool BreakLocationIterator::IsDebugBreakAtSlot() { 48 bool BreakLocationIterator::IsDebugBreakAtSlot() {
49 ASSERT(IsDebugBreakSlot()); 49 ASSERT(IsDebugBreakSlot());
50 // Check whether the debug break slot instructions have been patched. 50 // Check whether the debug break slot instructions have been patched.
51 return !Assembler::IsNop(rinfo()->pc()); 51 return !Assembler::IsNop(rinfo()->pc());
52 } 52 }
53 53
54 54
55 void BreakLocationIterator::SetDebugBreakAtSlot() { 55 void BreakLocationIterator::SetDebugBreakAtSlot() {
56 ASSERT(IsDebugBreakSlot()); 56 ASSERT(IsDebugBreakSlot());
57 rinfo()->PatchCodeWithCall( 57 rinfo()->PatchCodeWithCall(
58 debug_info_->GetIsolate()->debug()->debug_break_slot()->entry(), 58 debug_info_->GetIsolate()->builtins()->Slot_DebugBreak()->entry(),
59 Assembler::kDebugBreakSlotLength - Assembler::kCallSequenceLength); 59 Assembler::kDebugBreakSlotLength - Assembler::kCallSequenceLength);
60 } 60 }
61 61
62 62
63 void BreakLocationIterator::ClearDebugBreakAtSlot() { 63 void BreakLocationIterator::ClearDebugBreakAtSlot() {
64 ASSERT(IsDebugBreakSlot()); 64 ASSERT(IsDebugBreakSlot());
65 rinfo()->PatchCode(original_rinfo()->pc(), Assembler::kDebugBreakSlotLength); 65 rinfo()->PatchCode(original_rinfo()->pc(), Assembler::kDebugBreakSlotLength);
66 } 66 }
67 67
68 const bool Debug::FramePaddingLayout::kIsSupported = true; 68 const bool Debug::FramePaddingLayout::kIsSupported = true;
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 __ jmp(rdx); 308 __ jmp(rdx);
309 } 309 }
310 310
311 const bool Debug::kFrameDropperSupported = true; 311 const bool Debug::kFrameDropperSupported = true;
312 312
313 #undef __ 313 #undef __
314 314
315 } } // namespace v8::internal 315 } } // namespace v8::internal
316 316
317 #endif // V8_TARGET_ARCH_X64 317 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/serialize.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698