| OLD | NEW |
| 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 "src/v8.h" | 5 #include "src/v8.h" |
| 6 | 6 |
| 7 #include "src/api.h" | 7 #include "src/api.h" |
| 8 #include "src/arguments.h" | 8 #include "src/arguments.h" |
| 9 #include "src/bootstrapper.h" | 9 #include "src/bootstrapper.h" |
| 10 #include "src/code-stubs.h" | 10 #include "src/code-stubs.h" |
| (...skipping 1337 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1348 { | 1348 { |
| 1349 // Find the break location where execution has stopped. | 1349 // Find the break location where execution has stopped. |
| 1350 DisallowHeapAllocation no_gc; | 1350 DisallowHeapAllocation no_gc; |
| 1351 BreakLocationIterator it(debug_info, ALL_BREAK_LOCATIONS); | 1351 BreakLocationIterator it(debug_info, ALL_BREAK_LOCATIONS); |
| 1352 | 1352 |
| 1353 // pc points to the instruction after the current one, possibly a break | 1353 // pc points to the instruction after the current one, possibly a break |
| 1354 // location as well. So the "- 1" to exclude it from the search. | 1354 // location as well. So the "- 1" to exclude it from the search. |
| 1355 it.FindBreakLocationFromAddress(frame->pc() - 1); | 1355 it.FindBreakLocationFromAddress(frame->pc() - 1); |
| 1356 | 1356 |
| 1357 is_exit = it.IsExit(); | 1357 is_exit = it.IsExit(); |
| 1358 is_construct_call = RelocInfo::IsConstructCall(it.rmode()); |
| 1358 | 1359 |
| 1359 if (thread_local_.restarter_frame_function_pointer_ == NULL) { | 1360 if (thread_local_.restarter_frame_function_pointer_ == NULL) { |
| 1360 if (RelocInfo::IsCodeTarget(it.rinfo()->rmode())) { | 1361 if (RelocInfo::IsCodeTarget(it.rinfo()->rmode())) { |
| 1361 bool is_call_target = false; | 1362 bool is_call_target = false; |
| 1362 Address target = it.rinfo()->target_address(); | 1363 Address target = it.rinfo()->target_address(); |
| 1363 Code* code = Code::GetCodeFromTargetAddress(target); | 1364 Code* code = Code::GetCodeFromTargetAddress(target); |
| 1364 | 1365 |
| 1365 is_call_target = code->is_call_stub(); | 1366 is_call_target = code->is_call_stub(); |
| 1366 is_construct_call = RelocInfo::IsConstructCall(it.rmode()); | |
| 1367 is_inline_cache_stub = code->is_inline_cache_stub(); | 1367 is_inline_cache_stub = code->is_inline_cache_stub(); |
| 1368 is_load_or_store = is_inline_cache_stub && !is_call_target; | 1368 is_load_or_store = is_inline_cache_stub && !is_call_target; |
| 1369 | 1369 |
| 1370 // Check if target code is CallFunction stub. | 1370 // Check if target code is CallFunction stub. |
| 1371 Code* maybe_call_function_stub = code; | 1371 Code* maybe_call_function_stub = code; |
| 1372 // If there is a breakpoint at this line look at the original code to | 1372 // If there is a breakpoint at this line look at the original code to |
| 1373 // check if it is a CallFunction stub. | 1373 // check if it is a CallFunction stub. |
| 1374 if (it.IsDebugBreak()) { | 1374 if (it.IsDebugBreak()) { |
| 1375 Address original_target = it.original_rinfo()->target_address(); | 1375 Address original_target = it.original_rinfo()->target_address(); |
| 1376 maybe_call_function_stub = | 1376 maybe_call_function_stub = |
| (...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1505 | 1505 |
| 1506 // Step in or Step in min | 1506 // Step in or Step in min |
| 1507 // Step in through construct call requires no changes to the running code. | 1507 // Step in through construct call requires no changes to the running code. |
| 1508 // Step in through getters/setters should already be prepared as well | 1508 // Step in through getters/setters should already be prepared as well |
| 1509 // because caller of this function (Debug::PrepareStep) is expected to | 1509 // because caller of this function (Debug::PrepareStep) is expected to |
| 1510 // flood the top frame's function with one shot breakpoints. | 1510 // flood the top frame's function with one shot breakpoints. |
| 1511 // Step in through CallFunction stub should also be prepared by caller of | 1511 // Step in through CallFunction stub should also be prepared by caller of |
| 1512 // this function (Debug::PrepareStep) which should flood target function | 1512 // this function (Debug::PrepareStep) which should flood target function |
| 1513 // with breakpoints. | 1513 // with breakpoints. |
| 1514 DCHECK(is_construct_call || is_inline_cache_stub || | 1514 DCHECK(is_construct_call || is_inline_cache_stub || |
| 1515 !call_function_stub.is_null()); | 1515 !call_function_stub.is_null() || is_at_restarted_function); |
| 1516 ActivateStepIn(frame); | 1516 ActivateStepIn(frame); |
| 1517 } | 1517 } |
| 1518 } | 1518 } |
| 1519 | 1519 |
| 1520 | 1520 |
| 1521 // Check whether the current debug break should be reported to the debugger. It | 1521 // Check whether the current debug break should be reported to the debugger. It |
| 1522 // is used to have step next and step in only report break back to the debugger | 1522 // is used to have step next and step in only report break back to the debugger |
| 1523 // if on a different frame or in a different statement. In some situations | 1523 // if on a different frame or in a different statement. In some situations |
| 1524 // there will be several break points in the same statement when the code is | 1524 // there will be several break points in the same statement when the code is |
| 1525 // flooded with one-shot break points. This function helps to perform several | 1525 // flooded with one-shot break points. This function helps to perform several |
| (...skipping 1946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3472 logger_->DebugEvent("Put", message.text()); | 3472 logger_->DebugEvent("Put", message.text()); |
| 3473 } | 3473 } |
| 3474 | 3474 |
| 3475 | 3475 |
| 3476 void LockingCommandMessageQueue::Clear() { | 3476 void LockingCommandMessageQueue::Clear() { |
| 3477 base::LockGuard<base::Mutex> lock_guard(&mutex_); | 3477 base::LockGuard<base::Mutex> lock_guard(&mutex_); |
| 3478 queue_.Clear(); | 3478 queue_.Clear(); |
| 3479 } | 3479 } |
| 3480 | 3480 |
| 3481 } } // namespace v8::internal | 3481 } } // namespace v8::internal |
| OLD | NEW |