Index: src/heap/heap.cc |
diff --git a/src/heap/heap.cc b/src/heap/heap.cc |
index acb1ca21a8546993a19dcd2020ae50d54b96ae03..9c6029eadd3bb6f0eade26a96d75ff4c4659d391 100644 |
--- a/src/heap/heap.cc |
+++ b/src/heap/heap.cc |
@@ -1469,6 +1469,38 @@ |
} |
+#ifdef VERIFY_HEAP |
+// Visitor class to verify pointers in code or data space do not point into |
+// new space. |
+class VerifyNonPointerSpacePointersVisitor : public ObjectVisitor { |
+ public: |
+ explicit VerifyNonPointerSpacePointersVisitor(Heap* heap) : heap_(heap) {} |
+ |
+ void VisitPointers(Object** start, Object** end) override { |
+ for (Object** current = start; current < end; current++) { |
+ if ((*current)->IsHeapObject()) { |
+ CHECK(!heap_->InNewSpace(HeapObject::cast(*current))); |
+ } |
+ } |
+ } |
+ |
+ private: |
+ Heap* heap_; |
+}; |
+ |
+ |
+static void VerifyNonPointerSpacePointers(Heap* heap) { |
+ // Verify that there are no pointers to new space in spaces where we |
+ // do not expect them. |
+ VerifyNonPointerSpacePointersVisitor v(heap); |
+ HeapObjectIterator code_it(heap->code_space()); |
+ for (HeapObject* object = code_it.Next(); object != NULL; |
+ object = code_it.Next()) |
+ object->Iterate(&v); |
+} |
+#endif // VERIFY_HEAP |
+ |
+ |
void Heap::CheckNewSpaceExpansionCriteria() { |
if (FLAG_experimental_new_space_growth_heuristic) { |
if (new_space_.TotalCapacity() < new_space_.MaximumCapacity() && |
@@ -1580,6 +1612,10 @@ |
PauseAllocationObserversScope pause_observers(this); |
mark_compact_collector()->sweeper().EnsureNewSpaceCompleted(); |
+ |
+#ifdef VERIFY_HEAP |
+ if (FLAG_verify_heap) VerifyNonPointerSpacePointers(this); |
+#endif |
gc_state_ = SCAVENGE; |
@@ -2823,10 +2859,6 @@ |
*WeakHashTable::New(isolate(), 16, USE_DEFAULT_MINIMUM_CAPACITY, |
TENURED)); |
- set_weak_new_space_object_to_code_list( |
- ArrayList::cast(*(factory->NewFixedArray(16, TENURED)))); |
- weak_new_space_object_to_code_list()->SetLength(0); |
- |
set_script_list(Smi::FromInt(0)); |
Handle<SeededNumberDictionary> slow_element_dictionary = |
@@ -2885,6 +2917,7 @@ |
CreateFixedStubs(); |
} |
+ |
bool Heap::RootCanBeWrittenAfterInitialization(Heap::RootListIndex root_index) { |
switch (root_index) { |
@@ -2900,7 +2933,6 @@ |
case kMicrotaskQueueRootIndex: |
case kDetachedContextsRootIndex: |
case kWeakObjectToCodeTableRootIndex: |
- case kWeakNewSpaceObjectToCodeListRootIndex: |
case kRetainedMapsRootIndex: |
case kNoScriptSharedFunctionInfosRootIndex: |
case kWeakStackTraceListRootIndex: |
@@ -5531,18 +5563,6 @@ |
} |
// TODO(ishell): Find a better place for this. |
-void Heap::AddWeakNewSpaceObjectToCodeDependency(Handle<HeapObject> obj, |
- Handle<WeakCell> code) { |
- DCHECK(InNewSpace(*obj)); |
- DCHECK(!InNewSpace(*code)); |
- Handle<ArrayList> list(weak_new_space_object_to_code_list(), isolate()); |
- list = ArrayList::Add(list, isolate()->factory()->NewWeakCell(obj), code); |
- if (*list != weak_new_space_object_to_code_list()) { |
- set_weak_new_space_object_to_code_list(*list); |
- } |
-} |
- |
-// TODO(ishell): Find a better place for this. |
void Heap::AddWeakObjectToCodeDependency(Handle<HeapObject> obj, |
Handle<DependentCode> dep) { |
DCHECK(!InNewSpace(*obj)); |
@@ -5695,26 +5715,6 @@ |
RememberedSet<OLD_TO_NEW>::RemoveRange(page, start, end); |
RememberedSet<OLD_TO_OLD>::RemoveRange(page, start, end); |
} |
-} |
- |
-void Heap::RecordWriteIntoCodeSlow(Code* host, RelocInfo* rinfo, |
- Object* value) { |
- DCHECK(InNewSpace(value)); |
- Page* source_page = Page::FromAddress(reinterpret_cast<Address>(host)); |
- RelocInfo::Mode rmode = rinfo->rmode(); |
- Address addr = rinfo->pc(); |
- SlotType slot_type = SlotTypeForRelocInfoMode(rmode); |
- if (rinfo->IsInConstantPool()) { |
- addr = rinfo->constant_pool_entry_address(); |
- if (RelocInfo::IsCodeTarget(rmode)) { |
- slot_type = CODE_ENTRY_SLOT; |
- } else { |
- DCHECK(RelocInfo::IsEmbeddedObject(rmode)); |
- slot_type = OBJECT_SLOT; |
- } |
- } |
- RememberedSet<OLD_TO_NEW>::InsertTyped( |
- source_page, reinterpret_cast<Address>(host), slot_type, addr); |
} |
Space* AllSpaces::next() { |