Reviewers: Yang,

Description:
MIPS: Check that address given to __RecordWrite is correct.
ARM: Clean up equivalent functionality on ARM.
This subsumes http://codereview.chromium.org/8561001/

Please review this at http://codereview.chromium.org/9168006/

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

Affected files:
  M     src/arm/macro-assembler-arm.cc
  M     src/mips/macro-assembler-mips.cc


Index: src/arm/macro-assembler-arm.cc
===================================================================
--- src/arm/macro-assembler-arm.cc      (revision 10367)
+++ src/arm/macro-assembler-arm.cc      (working copy)
@@ -496,13 +496,10 @@
   // registers are cp.
   ASSERT(!address.is(cp) && !value.is(cp));

-  if (FLAG_debug_code) {
-    Label ok;
+  if (emit_debug_code()) {
     ldr(ip, MemOperand(address));
     cmp(ip, value);
-    b(eq, &ok);
-    stop("Wrong address or value passed to RecordWrite");
-    bind(&ok);
+    Check(eq, "Wrong address or value passed to RecordWrite");
   }

   Label done;
@@ -551,7 +548,7 @@
                                          SaveFPRegsMode fp_mode,
RememberedSetFinalAction and_then) {
   Label done;
-  if (FLAG_debug_code) {
+  if (emit_debug_code()) {
     Label ok;
     JumpIfNotInNewSpace(object, scratch, &ok);
     stop("Remembered set pointer is in new space");
@@ -3504,7 +3501,7 @@
   tst(mask_scratch, load_scratch);
   b(ne, &done);

-  if (FLAG_debug_code) {
+  if (emit_debug_code()) {
     // Check for impossible bit pattern.
     Label ok;
     // LSL may overflow, making the check conservative.
Index: src/mips/macro-assembler-mips.cc
===================================================================
--- src/mips/macro-assembler-mips.cc    (revision 10367)
+++ src/mips/macro-assembler-mips.cc    (working copy)
@@ -252,6 +252,12 @@
   // registers are cp.
   ASSERT(!address.is(cp) && !value.is(cp));

+  if (emit_debug_code()) {
+    lw(at, MemOperand(address));
+    Assert(
+ eq, "Wrong address or value passed to RecordWrite", at, Operand(value));
+  }
+
   Label done;

   if (smi_check == INLINE_SMI_CHECK) {
@@ -297,7 +303,7 @@
                                          SaveFPRegsMode fp_mode,
RememberedSetFinalAction and_then) {
   Label done;
-  if (FLAG_debug_code) {
+  if (emit_debug_code()) {
     Label ok;
     JumpIfNotInNewSpace(object, scratch, &ok);
     stop("Remembered set pointer is in new space");
@@ -4838,7 +4844,7 @@
   And(t8, mask_scratch, load_scratch);
   Branch(&done, ne, t8, Operand(zero_reg));

-  if (FLAG_debug_code) {
+  if (emit_debug_code()) {
     // Check for impossible bit pattern.
     Label ok;
     // sll may overflow, making the check conservative.


--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to