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

Unified Diff: src/heap/heap.cc

Issue 2090983002: Revert of Reland [heap] Avoid the use of cells to point from code to new-space objects. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/heap-inl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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() {
« no previous file with comments | « src/heap/heap.h ('k') | src/heap/heap-inl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698