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

Side by Side Diff: src/heap/mark-compact.cc

Issue 1234833003: Debugger: use debug break slots to break at function exit. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: fix for arm Created 5 years, 5 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
« no previous file with comments | « src/heap/mark-compact.h ('k') | src/heap/objects-visiting-inl.h » ('j') | 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 "src/v8.h" 5 #include "src/v8.h"
6 6
7 #include "src/base/atomicops.h" 7 #include "src/base/atomicops.h"
8 #include "src/base/bits.h" 8 #include "src/base/bits.h"
9 #include "src/code-stubs.h" 9 #include "src/code-stubs.h"
10 #include "src/compilation-cache.h" 10 #include "src/compilation-cache.h"
(...skipping 2851 matching lines...) Expand 10 before | Expand all | Expand 10 after
2862 DCHECK(RelocInfo::IsCodeAgeSequence(rinfo->rmode())); 2862 DCHECK(RelocInfo::IsCodeAgeSequence(rinfo->rmode()));
2863 Object* stub = rinfo->code_age_stub(); 2863 Object* stub = rinfo->code_age_stub();
2864 DCHECK(stub != NULL); 2864 DCHECK(stub != NULL);
2865 VisitPointer(&stub); 2865 VisitPointer(&stub);
2866 if (stub != rinfo->code_age_stub()) { 2866 if (stub != rinfo->code_age_stub()) {
2867 rinfo->set_code_age_stub(Code::cast(stub)); 2867 rinfo->set_code_age_stub(Code::cast(stub));
2868 } 2868 }
2869 } 2869 }
2870 2870
2871 void VisitDebugTarget(RelocInfo* rinfo) { 2871 void VisitDebugTarget(RelocInfo* rinfo) {
2872 DCHECK((RelocInfo::IsJSReturn(rinfo->rmode()) && 2872 DCHECK(RelocInfo::IsDebugBreakSlot(rinfo->rmode()) &&
2873 rinfo->IsPatchedReturnSequence()) || 2873 rinfo->IsPatchedDebugBreakSlotSequence());
2874 (RelocInfo::IsDebugBreakSlot(rinfo->rmode()) && 2874 Object* target =
2875 rinfo->IsPatchedDebugBreakSlotSequence())); 2875 Code::GetCodeFromTargetAddress(rinfo->debug_call_address());
2876 Object* target = Code::GetCodeFromTargetAddress(rinfo->call_address());
2877 VisitPointer(&target); 2876 VisitPointer(&target);
2878 rinfo->set_call_address(Code::cast(target)->instruction_start()); 2877 rinfo->set_debug_call_address(Code::cast(target)->instruction_start());
2879 } 2878 }
2880 2879
2881 static inline void UpdateSlot(Heap* heap, Object** slot) { 2880 static inline void UpdateSlot(Heap* heap, Object** slot) {
2882 Object* obj = reinterpret_cast<Object*>( 2881 Object* obj = reinterpret_cast<Object*>(
2883 base::NoBarrier_Load(reinterpret_cast<base::AtomicWord*>(slot))); 2882 base::NoBarrier_Load(reinterpret_cast<base::AtomicWord*>(slot)));
2884 2883
2885 if (!obj->IsHeapObject()) return; 2884 if (!obj->IsHeapObject()) return;
2886 2885
2887 HeapObject* heap_obj = HeapObject::cast(obj); 2886 HeapObject* heap_obj = HeapObject::cast(obj);
2888 2887
(...skipping 539 matching lines...) Expand 10 before | Expand all | Expand 10 after
3428 case SlotsBuffer::RELOCATED_CODE_OBJECT: { 3427 case SlotsBuffer::RELOCATED_CODE_OBJECT: {
3429 HeapObject* obj = HeapObject::FromAddress(addr); 3428 HeapObject* obj = HeapObject::FromAddress(addr);
3430 Code::cast(obj)->CodeIterateBody(v); 3429 Code::cast(obj)->CodeIterateBody(v);
3431 break; 3430 break;
3432 } 3431 }
3433 case SlotsBuffer::DEBUG_TARGET_SLOT: { 3432 case SlotsBuffer::DEBUG_TARGET_SLOT: {
3434 RelocInfo rinfo(addr, RelocInfo::DEBUG_BREAK_SLOT_AT_POSITION, 0, NULL); 3433 RelocInfo rinfo(addr, RelocInfo::DEBUG_BREAK_SLOT_AT_POSITION, 0, NULL);
3435 if (rinfo.IsPatchedDebugBreakSlotSequence()) rinfo.Visit(isolate, v); 3434 if (rinfo.IsPatchedDebugBreakSlotSequence()) rinfo.Visit(isolate, v);
3436 break; 3435 break;
3437 } 3436 }
3438 case SlotsBuffer::JS_RETURN_SLOT: {
3439 RelocInfo rinfo(addr, RelocInfo::JS_RETURN, 0, NULL);
3440 if (rinfo.IsPatchedReturnSequence()) rinfo.Visit(isolate, v);
3441 break;
3442 }
3443 case SlotsBuffer::EMBEDDED_OBJECT_SLOT: { 3437 case SlotsBuffer::EMBEDDED_OBJECT_SLOT: {
3444 RelocInfo rinfo(addr, RelocInfo::EMBEDDED_OBJECT, 0, NULL); 3438 RelocInfo rinfo(addr, RelocInfo::EMBEDDED_OBJECT, 0, NULL);
3445 rinfo.Visit(isolate, v); 3439 rinfo.Visit(isolate, v);
3446 break; 3440 break;
3447 } 3441 }
3448 case SlotsBuffer::OBJECT_SLOT: { 3442 case SlotsBuffer::OBJECT_SLOT: {
3449 v->VisitPointer(reinterpret_cast<Object**>(addr)); 3443 v->VisitPointer(reinterpret_cast<Object**>(addr));
3450 break; 3444 break;
3451 } 3445 }
3452 default: 3446 default:
(...skipping 1069 matching lines...) Expand 10 before | Expand all | Expand 10 after
4522 4516
4523 static inline SlotsBuffer::SlotType SlotTypeForRMode(RelocInfo::Mode rmode) { 4517 static inline SlotsBuffer::SlotType SlotTypeForRMode(RelocInfo::Mode rmode) {
4524 if (RelocInfo::IsCodeTarget(rmode)) { 4518 if (RelocInfo::IsCodeTarget(rmode)) {
4525 return SlotsBuffer::CODE_TARGET_SLOT; 4519 return SlotsBuffer::CODE_TARGET_SLOT;
4526 } else if (RelocInfo::IsCell(rmode)) { 4520 } else if (RelocInfo::IsCell(rmode)) {
4527 return SlotsBuffer::CELL_TARGET_SLOT; 4521 return SlotsBuffer::CELL_TARGET_SLOT;
4528 } else if (RelocInfo::IsEmbeddedObject(rmode)) { 4522 } else if (RelocInfo::IsEmbeddedObject(rmode)) {
4529 return SlotsBuffer::EMBEDDED_OBJECT_SLOT; 4523 return SlotsBuffer::EMBEDDED_OBJECT_SLOT;
4530 } else if (RelocInfo::IsDebugBreakSlot(rmode)) { 4524 } else if (RelocInfo::IsDebugBreakSlot(rmode)) {
4531 return SlotsBuffer::DEBUG_TARGET_SLOT; 4525 return SlotsBuffer::DEBUG_TARGET_SLOT;
4532 } else if (RelocInfo::IsJSReturn(rmode)) {
4533 return SlotsBuffer::JS_RETURN_SLOT;
4534 } 4526 }
4535 UNREACHABLE(); 4527 UNREACHABLE();
4536 return SlotsBuffer::NUMBER_OF_SLOT_TYPES; 4528 return SlotsBuffer::NUMBER_OF_SLOT_TYPES;
4537 } 4529 }
4538 4530
4539 4531
4540 void MarkCompactCollector::RecordRelocSlot(RelocInfo* rinfo, Object* target) { 4532 void MarkCompactCollector::RecordRelocSlot(RelocInfo* rinfo, Object* target) {
4541 Page* target_page = Page::FromAddress(reinterpret_cast<Address>(target)); 4533 Page* target_page = Page::FromAddress(reinterpret_cast<Address>(target));
4542 RelocInfo::Mode rmode = rinfo->rmode(); 4534 RelocInfo::Mode rmode = rinfo->rmode();
4543 if (target_page->IsEvacuationCandidate() && 4535 if (target_page->IsEvacuationCandidate() &&
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
4653 SlotsBuffer* buffer = *buffer_address; 4645 SlotsBuffer* buffer = *buffer_address;
4654 while (buffer != NULL) { 4646 while (buffer != NULL) {
4655 SlotsBuffer* next_buffer = buffer->next(); 4647 SlotsBuffer* next_buffer = buffer->next();
4656 DeallocateBuffer(buffer); 4648 DeallocateBuffer(buffer);
4657 buffer = next_buffer; 4649 buffer = next_buffer;
4658 } 4650 }
4659 *buffer_address = NULL; 4651 *buffer_address = NULL;
4660 } 4652 }
4661 } // namespace internal 4653 } // namespace internal
4662 } // namespace v8 4654 } // namespace v8
OLDNEW
« no previous file with comments | « src/heap/mark-compact.h ('k') | src/heap/objects-visiting-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698