MIPS: Fix an invalid stack-check in the simulator.

This fixes mjsunit regress-1132.

BUG=
TEST=

Review URL: http://codereview.chromium.org/7781002

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9059 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
yangguo@chromium.org 2011-08-29 13:29:55 +00:00
parent 596daba583
commit a2f1431aff

View File

@ -1409,20 +1409,11 @@ void Simulator::SoftwareInterrupt(Instruction* instr) {
int32_t arg1 = get_register(a1);
int32_t arg2 = get_register(a2);
int32_t arg3 = get_register(a3);
int32_t arg4 = 0;
int32_t arg5 = 0;
// Need to check if sp is valid before assigning arg4, arg5.
// This is a fix for cctest test-api/CatchStackOverflow which causes
// the stack to overflow. For some reason arm doesn't need this
// stack check here.
int32_t* stack_pointer = reinterpret_cast<int32_t*>(get_register(sp));
int32_t* stack = reinterpret_cast<int32_t*>(stack_);
if (stack_pointer >= stack && stack_pointer < stack + stack_size_ - 5) {
// Args 4 and 5 are on the stack after the reserved space for args 0..3.
arg4 = stack_pointer[4];
arg5 = stack_pointer[5];
}
// Args 4 and 5 are on the stack after the reserved space for args 0..3.
int32_t arg4 = stack_pointer[4];
int32_t arg5 = stack_pointer[5];
bool fp_call =
(redirection->type() == ExternalReference::BUILTIN_FP_FP_CALL) ||