From 6a5afd94038ce76cc47cea9d9dde3856de971263 Mon Sep 17 00:00:00 2001 From: "erik.corry@gmail.com" Date: Tue, 10 Jan 2012 13:43:44 +0000 Subject: [PATCH] MIPS: Check that address given to __RecordWrite is correct. ARM: Clean up equivalent functionality on ARM. This subsumes http://codereview.chromium.org/8561001/ Review URL: http://codereview.chromium.org/9168006 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@10368 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/arm/macro-assembler-arm.cc | 11 ++++------- src/mips/macro-assembler-mips.cc | 10 ++++++++-- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc index 1975a13d9d..8d4431cb73 100644 --- a/src/arm/macro-assembler-arm.cc +++ b/src/arm/macro-assembler-arm.cc @@ -496,13 +496,10 @@ void MacroAssembler::RecordWrite(Register object, // 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 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. 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 @@ void MacroAssembler::EnsureNotWhite( 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. diff --git a/src/mips/macro-assembler-mips.cc b/src/mips/macro-assembler-mips.cc index e6567044f8..98b4121ed9 100644 --- a/src/mips/macro-assembler-mips.cc +++ b/src/mips/macro-assembler-mips.cc @@ -252,6 +252,12 @@ void MacroAssembler::RecordWrite(Register object, // 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 @@ void MacroAssembler::RememberedSetHelper(Register object, // For debug tests. 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 @@ void MacroAssembler::EnsureNotWhite( 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.