16EvacuationVerifier::EvacuationVerifier(Heap*
heap)
19void EvacuationVerifier::Run() {
22 VerifyEvacuation(
heap_->new_space());
23 VerifyEvacuation(
heap_->old_space());
24 VerifyEvacuation(
heap_->code_space());
25 if (
heap_->shared_space()) VerifyEvacuation(
heap_->shared_space());
28void EvacuationVerifier::VisitPointers(Tagged<HeapObject> host,
33void EvacuationVerifier::VisitPointers(Tagged<HeapObject> host,
34 MaybeObjectSlot
start,
35 MaybeObjectSlot
end) {
39void EvacuationVerifier::VisitInstructionStreamPointer(
40 Tagged<Code> host, InstructionStreamSlot slot) {
41 Tagged<Object> maybe_code = slot.load(code_cage_base());
42 Tagged<HeapObject>
code;
44 if (maybe_code.GetHeapObject(&code)) {
45 VerifyHeapObjectImpl(code);
49void EvacuationVerifier::VisitRootPointers(Root root,
const char* description,
55void EvacuationVerifier::VisitMapPointer(Tagged<HeapObject>
object) {
56 VerifyHeapObjectImpl(object->map(cage_base()));
59void EvacuationVerifier::VisitCodeTarget(Tagged<InstructionStream> host,
61 Tagged<InstructionStream> target =
62 InstructionStream::FromTargetAddress(rinfo->target_address());
63 VerifyHeapObjectImpl(target);
66void EvacuationVerifier::VisitEmbeddedPointer(Tagged<InstructionStream> host,
68 VerifyHeapObjectImpl(rinfo->target_object(cage_base()));
71void EvacuationVerifier::VerifyRoots() {
72 heap_->IterateRootsIncludingClients(
74 base::EnumSet<SkipRoot>{SkipRoot::kWeak, SkipRoot::kConservativeStack});
77void EvacuationVerifier::VerifyEvacuationOnPage(Address
start, Address
end) {
79 while (current <
end) {
80 Tagged<HeapObject>
object = HeapObject::FromAddress(current);
88void EvacuationVerifier::VerifyEvacuation(NewSpace* space) {
92 VerifyEvacuation(PagedNewSpace::From(space)->paged_space());
96 for (PageMetadata* p : *space) {
97 VerifyEvacuationOnPage(p->area_start(), p->area_end());
101void EvacuationVerifier::VerifyEvacuation(PagedSpaceBase* space) {
102 for (PageMetadata* p : *space) {
103 if (p->Chunk()->IsEvacuationCandidate())
continue;
104 VerifyEvacuationOnPage(p->area_start(), p->area_end());
#define ALIGN_TO_ALLOCATION_ALIGNMENT(value)
V8_INLINE constexpr bool IsFreeSpaceOrFiller(InstanceType instance_type)
void VisitObject(Isolate *isolate, Tagged< HeapObject > object, ObjectVisitor *visitor)
V8_EXPORT_PRIVATE FlagValues v8_flags