From 8f89e28661af23b0aa163a265d906bf6a194fe3d Mon Sep 17 00:00:00 2001 From: ulan Date: Wed, 10 May 2017 03:37:37 -0700 Subject: [PATCH] Revert of [heap] Verify remembered set for objects in the old generation. (patchset #3 id:40001 of https://codereview.chromium.org/2868053002/ ) Reason for revert: buildbot failures Original issue's description: > [heap] Verify remembered set for objects in the old generation. > > Review-Url: https://codereview.chromium.org/2868053002 > Cr-Commit-Position: refs/heads/master@{#45225} > Committed: https://chromium.googlesource.com/v8/v8/+/755a809ee5f91f5f63d5f056af37090960be002c TBR=mlippautz@chromium.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review-Url: https://codereview.chromium.org/2870413002 Cr-Commit-Position: refs/heads/master@{#45227} --- src/heap/heap.cc | 128 --------------------------------------------- src/heap/heap.h | 1 - src/heap/spaces.cc | 4 -- 3 files changed, 133 deletions(-) diff --git a/src/heap/heap.cc b/src/heap/heap.cc index b3cc540806f1..15e61e7ac95b 100644 --- a/src/heap/heap.cc +++ b/src/heap/heap.cc @@ -4779,134 +4779,6 @@ void Heap::Verify() { mark_compact_collector()->VerifyOmittedMapChecks(); } } - -class SlotVerifyingVisitor : public ObjectVisitor { - public: - SlotVerifyingVisitor(std::set
* untyped, - std::set >* typed) - : untyped_(untyped), typed_(typed) {} - - virtual bool ShouldHaveBeenRecorded(HeapObject* host, Object* target) = 0; - - void VisitPointers(HeapObject* host, Object** start, Object** end) override { - for (Object** slot = start; slot < end; slot++) { - if (ShouldHaveBeenRecorded(host, *slot)) { - CHECK_GT(untyped_->count(reinterpret_cast
(slot)), 0); - } - } - } - - void VisitCodeTarget(Code* host, RelocInfo* rinfo) override { - Object* target = Code::GetCodeFromTargetAddress(rinfo->target_address()); - if (ShouldHaveBeenRecorded(host, target)) { - CHECK(InTypedSet(CODE_TARGET_SLOT, rinfo->pc()) || - (rinfo->IsInConstantPool() && - InTypedSet(CODE_ENTRY_SLOT, rinfo->pc()))); - } - } - - void VisitCodeAgeSequence(Code* host, RelocInfo* rinfo) override { - Object* target = rinfo->code_age_stub(); - if (ShouldHaveBeenRecorded(host, target)) { - CHECK(InTypedSet(CODE_TARGET_SLOT, rinfo->pc()) || - (rinfo->IsInConstantPool() && - InTypedSet(CODE_ENTRY_SLOT, rinfo->pc()))); - } - } - - void VisitCodeEntry(JSFunction* host, Address entry_address) override { - Object* target = Code::GetObjectFromEntryAddress(entry_address); - if (ShouldHaveBeenRecorded(host, target)) { - CHECK(InTypedSet(CODE_ENTRY_SLOT, entry_address)); - } - } - - void VisitCellPointer(Code* host, RelocInfo* rinfo) override { - Object* target = rinfo->target_cell(); - if (ShouldHaveBeenRecorded(host, target)) { - CHECK( - InTypedSet(CELL_TARGET_SLOT, rinfo->pc()) || - (rinfo->IsInConstantPool() && InTypedSet(OBJECT_SLOT, rinfo->pc()))); - } - } - - void VisitDebugTarget(Code* host, RelocInfo* rinfo) override { - Object* target = - Code::GetCodeFromTargetAddress(rinfo->debug_call_address()); - if (ShouldHaveBeenRecorded(host, target)) { - CHECK(InTypedSet(DEBUG_TARGET_SLOT, rinfo->pc()) || - (rinfo->IsInConstantPool() && - InTypedSet(CODE_ENTRY_SLOT, rinfo->pc()))); - } - } - - void VisitEmbeddedPointer(Code* host, RelocInfo* rinfo) override { - Object* target = rinfo->target_object(); - if (ShouldHaveBeenRecorded(host, target)) { - CHECK( - InTypedSet(EMBEDDED_OBJECT_SLOT, rinfo->pc()) || - (rinfo->IsInConstantPool() && InTypedSet(OBJECT_SLOT, rinfo->pc()))); - } - } - - private: - bool InTypedSet(SlotType type, Address slot) { - return typed_->count(std::make_pair(type, slot)) > 0; - } - std::set
* untyped_; - std::set >* typed_; -}; - -class OldToNewSlotVerifyingVisitor : public SlotVerifyingVisitor { - public: - OldToNewSlotVerifyingVisitor(Heap* heap, std::set
* untyped, - std::set >* typed) - : SlotVerifyingVisitor(untyped, typed), heap_(heap) {} - - bool ShouldHaveBeenRecorded(HeapObject* host, Object* target) override { - return target->IsHeapObject() && heap_->InNewSpace(target) && - !heap_->InNewSpace(host); - } - - private: - Heap* heap_; -}; - -template -void CollectSlots(MemoryChunk* chunk, Address start, Address end, - std::set
* untyped, - std::set >* typed) { - RememberedSet::Iterate(chunk, [start, end, untyped](Address slot) { - if (start <= slot && slot < end) { - untyped->insert(slot); - } - return KEEP_SLOT; - }); - RememberedSet::IterateTyped( - chunk, [start, end, typed](SlotType type, Address host, Address slot) { - if (start <= slot && slot < end) { - typed->insert(std::make_pair(type, slot)); - } - return KEEP_SLOT; - }); -} - -void Heap::VerifyRememberedSetFor(HeapObject* object) { - MemoryChunk* chunk = MemoryChunk::FromAddress(object->address()); - base::LockGuard lock_guard(chunk->mutex()); - Address start = object->address(); - Address end = start + object->Size(); - std::set
old_to_new; - std::set > typed_old_to_new; - if (!InNewSpace(object)) { - store_buffer()->MoveAllEntriesToRememberedSet(); - CollectSlots(chunk, start, end, &old_to_new, &typed_old_to_new); - OldToNewSlotVerifyingVisitor visitor(this, &old_to_new, &typed_old_to_new); - object->IterateBody(&visitor); - } - // TODO(ulan): Add old to old slot set verification once all weak objects - // have their own instance types and slots are recorded for all weal fields. -} #endif diff --git a/src/heap/heap.h b/src/heap/heap.h index 17687612d4d4..808056d00c32 100644 --- a/src/heap/heap.h +++ b/src/heap/heap.h @@ -1535,7 +1535,6 @@ class Heap { #ifdef VERIFY_HEAP // Verify the heap is in its normal state before or after a GC. void Verify(); - void VerifyRememberedSetFor(HeapObject* object); #endif #ifdef DEBUG diff --git a/src/heap/spaces.cc b/src/heap/spaces.cc index 8f75e14b788c..db8fb4b7d066 100644 --- a/src/heap/spaces.cc +++ b/src/heap/spaces.cc @@ -1569,8 +1569,6 @@ void PagedSpace::Verify(ObjectVisitor* visitor) { // The object itself should look OK. object->ObjectVerify(); - heap()->VerifyRememberedSetFor(object); - // All the interior pointers should be contained in the heap. int size = object->Size(); object->IterateBody(map->instance_type(), size, visitor); @@ -3323,8 +3321,6 @@ void LargeObjectSpace::Verify() { // The object itself should look OK. object->ObjectVerify(); - heap()->VerifyRememberedSetFor(object); - // Byte arrays and strings don't have interior pointers. if (object->IsAbstractCode()) { VerifyPointersVisitor code_visitor;