Add alignment check to object allocated in generated code for x64 and ARM
Review URL: http://codereview.chromium.org/460068 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3418 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
parent
cbce986ff0
commit
eabf5c89a9
@ -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)));
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user