Put making embedded maps in optimized code weak behind a flag.
authorulan@chromium.org <ulan@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 28 Jan 2013 10:25:38 +0000 (10:25 +0000)
committerulan@chromium.org <ulan@chromium.org@ce2b1a6d-e550-0410-aec6-3dcde31c8c00>
Mon, 28 Jan 2013 10:25:38 +0000 (10:25 +0000)
Disable the flag by default because of Chrome crashes.

BUG=172488,172489
R=mstarzinger@chromium.org

Review URL: https://chromiumcodereview.appspot.com/12091018

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13523 ce2b1a6d-e550-0410-aec6-3dcde31c8c00

src/flag-definitions.h
src/lithium.cc
src/mark-compact.cc
src/objects-visiting-inl.h

index 3bf32a9..0b0332a 100644 (file)
@@ -402,6 +402,8 @@ DEFINE_bool(trace_external_memory, false,
             "it is adjusted.")
 DEFINE_bool(collect_maps, true,
             "garbage collect maps from which no objects can be reached")
+DEFINE_bool(weak_embedded_maps_in_optimized_code, false,
+            "make maps embedded in optimized code weak")
 DEFINE_bool(flush_code, true,
             "flush code that we expect not to use again (during full gc)")
 DEFINE_bool(flush_code_incrementally, true,
index 81944b2..108eb7f 100644 (file)
@@ -429,7 +429,9 @@ Handle<Code> LChunk::Codegen(Code::Kind kind) {
     Handle<Code> code =
         CodeGenerator::MakeCodeEpilogue(&assembler, flags, info());
     generator.FinishCode(code);
-    RegisterDependentCodeForEmbeddedMaps(code);
+    if (FLAG_weak_embedded_maps_in_optimized_code) {
+      RegisterDependentCodeForEmbeddedMaps(code);
+    }
     CodeGenerator::PrintCode(code, info());
     return code;
   }
index 7d611c1..bfb4031 100644 (file)
@@ -85,7 +85,8 @@ class VerifyMarkingVisitor: public ObjectVisitor {
 
   void VisitEmbeddedPointer(RelocInfo* rinfo) {
     ASSERT(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT);
-    if (rinfo->host()->kind() != Code::OPTIMIZED_FUNCTION ||
+    if (!FLAG_weak_embedded_maps_in_optimized_code ||
+        rinfo->host()->kind() != Code::OPTIMIZED_FUNCTION ||
         !rinfo->target_object()->IsMap() ||
         !Map::cast(rinfo->target_object())->CanTransition()) {
       VisitPointer(rinfo->target_object_address());
index e2b0e25..7332a0c 100644 (file)
@@ -175,7 +175,8 @@ void StaticMarkingVisitor<StaticVisitor>::VisitEmbeddedPointer(
   ASSERT(rinfo->rmode() == RelocInfo::EMBEDDED_OBJECT);
   ASSERT(!rinfo->target_object()->IsConsString());
   HeapObject* object = HeapObject::cast(rinfo->target_object());
-  if (!FLAG_collect_maps || rinfo->host()->kind() != Code::OPTIMIZED_FUNCTION ||
+  if (!FLAG_weak_embedded_maps_in_optimized_code ||
+      !FLAG_collect_maps || rinfo->host()->kind() != Code::OPTIMIZED_FUNCTION ||
       !object->IsMap() || !Map::cast(object)->CanTransition()) {
     heap->mark_compact_collector()->RecordRelocSlot(rinfo, object);
     StaticVisitor::MarkObject(heap, object);