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