Reviewers: ,

Message:
Thanks for finding the InvalidateEmbeddedObjects fix Ulan! There were a couple
of other things which needed fixing.  The logs for the failing builds which
these changes fix are:

http://build.chromium.org/p/client.v8/builders/V8%20Arm%20GC%20Stress/builds/598/steps/Mjsunit/logs/regress-2185

http://build.chromium.org/p/client.v8/builders/V8%20Linux%20-%20arm%20-%20sim%20-%20debug%20-%20novfp3/builds/1384/steps/Mozilla/logs/regress-159334

http://build.chromium.org/p/client.v8/builders/V8%20Arm%20-%20debug/builds/1268/steps/Webkit/logs/deep-recursion-test

PTAL, thanks.


https://codereview.chromium.org/385163005/diff/1/src/flag-definitions.h
File src/flag-definitions.h (right):

https://codereview.chromium.org/385163005/diff/1/src/flag-definitions.h#newcode461
src/flag-definitions.h:461: DEFINE_INT(stack_size, 984,
Note: this could be lower for 32bit, but I would still need to be larger
than 512KB, which would mean that 64bit would be larger than 1MB if
calculated based on kPointerSize, so I have just set it to be the same
as the existing 64bit limit.  Let me know if you would prefer it set
differently.

Description:
Some fixes to avoid breakages when enabling out-of-line constant pools.

Three fixes which are required to pass all the tests when out-of-line constant
pools are enabled for Arm:

 - Invalidate embedded objects in optimized code when it is deoptimized such
that the weak pointers in the constant pool array are cleared. This prevents
   a CHECK(heap_->mark_compact_collector()->IsMarked(object)) error when a
   verifying weak pointers in a deoptimized code object's constant pool.
 - Modify LargeObjectSpace::Verify to allow constant pool arrays in the
   large object space.
 - Increase the 32bit stack size limit, since the constant pool pointer
   is now on every stack frame, causing the size of each stack frame to
   increase by one word, and causing deep-recursion-test to fail.

Please review this at https://codereview.chromium.org/385163005/

SVN Base: https://v8.googlecode.com/svn/branches/bleeding_edge

Affected files (+8, -5 lines):
  M src/flag-definitions.h
  M src/objects.cc
  M src/spaces.cc


Index: src/flag-definitions.h
diff --git a/src/flag-definitions.h b/src/flag-definitions.h
index b6f858d9406d17c2fa0c407505609d1aa0b979d5..f0cf47289ec35a6cf39ea8edc164f3adf494f34b 100644
--- a/src/flag-definitions.h
+++ b/src/flag-definitions.h
@@ -456,9 +456,9 @@ DEFINE_BOOL(enable_liveedit, true, "enable liveedit experimental feature")
 DEFINE_BOOL(hard_abort, true, "abort by crashing")

 // execution.cc
-// Slightly less than 1MB on 64-bit, since Windows' default stack size for
+// Slightly less than 1MB, since Windows' default stack size for
 // the main execution thread is 1MB for both 32 and 64-bit.
-DEFINE_INT(stack_size, kPointerSize * 123,
+DEFINE_INT(stack_size, 984,
            "default size of stack region v8 is allowed to use (in kBytes)")

 // frames.cc
Index: src/objects.cc
diff --git a/src/objects.cc b/src/objects.cc
index ad066af921bf961ac99b57fc3ddf89dd6e653d51..1081a3fb92e72e07156da085784d37a701df335b 100644
--- a/src/objects.cc
+++ b/src/objects.cc
@@ -10709,6 +10709,7 @@ void ObjectVisitor::VisitExternalReference(RelocInfo* rinfo) {


 void Code::InvalidateRelocation() {
+  InvalidateEmbeddedObjects();
   set_relocation_info(GetHeap()->empty_byte_array());
 }

Index: src/spaces.cc
diff --git a/src/spaces.cc b/src/spaces.cc
index e7cb8ccf85254003af635e44c2fe81d582e2b926..2ca315eedcb685212e50f0421bb9d05a6e81f628 100644
--- a/src/spaces.cc
+++ b/src/spaces.cc
@@ -3062,10 +3062,12 @@ void LargeObjectSpace::Verify() {

     // We have only code, sequential strings, external strings
     // (sequential strings that have been morphed into external
-    // strings), fixed arrays, and byte arrays in large object space.
+    // strings), fixed arrays, byte arrays and constant pool arrays in the
+    // large object space.
     CHECK(object->IsCode() || object->IsSeqString() ||
-           object->IsExternalString() || object->IsFixedArray() ||
-           object->IsFixedDoubleArray() || object->IsByteArray());
+          object->IsExternalString() || object->IsFixedArray() ||
+          object->IsFixedDoubleArray() || object->IsByteArray() ||
+          object->IsConstantPoolArray());

     // The object itself should look OK.
     object->ObjectVerify();


--
--
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to