diff --git a/src/arm/macro-assembler-arm.cc b/src/arm/macro-assembler-arm.cc index e56ac6e988..aa6570ce11 100644 --- a/src/arm/macro-assembler-arm.cc +++ b/src/arm/macro-assembler-arm.cc @@ -794,15 +794,13 @@ void MacroAssembler::AllocateInNewSpace(int object_size, mov(scratch1, Operand(new_space_allocation_top)); if ((flags & RESULT_CONTAINS_TOP) == 0) { ldr(result, MemOperand(scratch1)); - } else { -#ifdef DEBUG + } else if (FLAG_debug_code) { // Assert that result actually contains top on entry. scratch2 is used // immediately below so this use of scratch2 does not cause difference with // respect to register content between debug and release mode. ldr(scratch2, MemOperand(scratch1)); cmp(result, scratch2); Check(eq, "Unexpected allocation top"); -#endif } // Calculate new top and bail out if new space is exhausted. Use result @@ -815,7 +813,11 @@ void MacroAssembler::AllocateInNewSpace(int object_size, cmp(result, Operand(scratch2)); b(hi, gc_required); - // Update allocation top. result temporarily holds the new top, + // Update allocation top. result temporarily holds the new top. + if (FLAG_debug_code) { + tst(result, Operand(kObjectAlignmentMask)); + Check(eq, "Unaligned allocation in new space"); + } str(result, MemOperand(scratch1)); // Tag and adjust back to start of new object. @@ -844,15 +846,13 @@ void MacroAssembler::AllocateInNewSpace(Register object_size, mov(scratch1, Operand(new_space_allocation_top)); if ((flags & RESULT_CONTAINS_TOP) == 0) { ldr(result, MemOperand(scratch1)); - } else { -#ifdef DEBUG + } else if (FLAG_debug_code) { // Assert that result actually contains top on entry. scratch2 is used // immediately below so this use of scratch2 does not cause difference with // respect to register content between debug and release mode. ldr(scratch2, MemOperand(scratch1)); cmp(result, scratch2); Check(eq, "Unexpected allocation top"); -#endif } // Calculate new top and bail out if new space is exhausted. Use result @@ -866,7 +866,11 @@ void MacroAssembler::AllocateInNewSpace(Register object_size, cmp(result, Operand(scratch2)); b(hi, gc_required); - // Update allocation top. result temporarily holds the new top, + // Update allocation top. result temporarily holds the new top. + if (FLAG_debug_code) { + tst(result, Operand(kObjectAlignmentMask)); + Check(eq, "Unaligned allocation in new space"); + } str(result, MemOperand(scratch1)); // Adjust back to start of new object. @@ -1162,6 +1166,9 @@ void MacroAssembler::Abort(const char* msg) { RecordComment(msg); } #endif + // Disable stub call restrictions to always allow calls to abort. + set_allow_stub_calls(true); + mov(r0, Operand(p0)); push(r0); mov(r0, Operand(Smi::FromInt(p1 - p0))); diff --git a/src/ia32/macro-assembler-ia32.cc b/src/ia32/macro-assembler-ia32.cc index 1ffab32dc2..b91caa8ccc 100644 --- a/src/ia32/macro-assembler-ia32.cc +++ b/src/ia32/macro-assembler-ia32.cc @@ -1393,7 +1393,7 @@ void MacroAssembler::Abort(const char* msg) { RecordComment(msg); } #endif - // Disable stub call restrictions to always allow cals to abort. + // Disable stub call restrictions to always allow calls to abort. set_allow_stub_calls(true); push(eax); diff --git a/src/x64/macro-assembler-x64.cc b/src/x64/macro-assembler-x64.cc index 16bb7b6d0f..71157914c2 100644 --- a/src/x64/macro-assembler-x64.cc +++ b/src/x64/macro-assembler-x64.cc @@ -288,6 +288,9 @@ void MacroAssembler::Abort(const char* msg) { RecordComment(msg); } #endif + // Disable stub call restrictions to always allow calls to abort. + set_allow_stub_calls(true); + push(rax); movq(kScratchRegister, p0, RelocInfo::NONE); push(kScratchRegister); @@ -297,6 +300,7 @@ void MacroAssembler::Abort(const char* msg) { push(kScratchRegister); CallRuntime(Runtime::kAbort, 2); // will not return here + int3(); } @@ -2094,6 +2098,11 @@ void MacroAssembler::LoadAllocationTopHelper(Register result, void MacroAssembler::UpdateAllocationTopHelper(Register result_end, Register scratch) { + if (FLAG_debug_code) { + testq(result_end, Immediate(kObjectAlignmentMask)); + Check(zero, "Unaligned allocation in new space"); + } + ExternalReference new_space_allocation_top = ExternalReference::new_space_allocation_top_address();