Skip to content

Commit

Permalink
Revert of [heap] Verify remembered set for objects in the old generat…
Browse files Browse the repository at this point in the history
…ion. (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}
  • Loading branch information
ulan authored and Commit bot committed May 10, 2017
1 parent 838d0b4 commit 8f89e28
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 133 deletions.
128 changes: 0 additions & 128 deletions src/heap/heap.cc
Original file line number Diff line number Diff line change
Expand Up @@ -4779,134 +4779,6 @@ void Heap::Verify() {
mark_compact_collector()->VerifyOmittedMapChecks();
}
}

class SlotVerifyingVisitor : public ObjectVisitor {
public:
SlotVerifyingVisitor(std::set<Address>* untyped,
std::set<std::pair<SlotType, Address> >* 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<Address>(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<Address>* untyped_;
std::set<std::pair<SlotType, Address> >* typed_;
};

class OldToNewSlotVerifyingVisitor : public SlotVerifyingVisitor {
public:
OldToNewSlotVerifyingVisitor(Heap* heap, std::set<Address>* untyped,
std::set<std::pair<SlotType, Address> >* 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 <RememberedSetType direction>
void CollectSlots(MemoryChunk* chunk, Address start, Address end,
std::set<Address>* untyped,
std::set<std::pair<SlotType, Address> >* typed) {
RememberedSet<direction>::Iterate(chunk, [start, end, untyped](Address slot) {
if (start <= slot && slot < end) {
untyped->insert(slot);
}
return KEEP_SLOT;
});
RememberedSet<direction>::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<base::RecursiveMutex> lock_guard(chunk->mutex());
Address start = object->address();
Address end = start + object->Size();
std::set<Address> old_to_new;
std::set<std::pair<SlotType, Address> > typed_old_to_new;
if (!InNewSpace(object)) {
store_buffer()->MoveAllEntriesToRememberedSet();
CollectSlots<OLD_TO_NEW>(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


Expand Down
1 change: 0 additions & 1 deletion src/heap/heap.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 0 additions & 4 deletions src/heap/spaces.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 8f89e28

Please sign in to comment.