MIPS: Handle OOM failures correctly in the CEntryStub when embedders set V8::IgnoreOutOfMemoryException()

Port r14279 (81829ab4)

BUG=

Review URL: https://codereview.chromium.org/14299006

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@14294 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
palfia@homejinni.com 2013-04-16 21:35:42 +00:00
parent 091f0b7f35
commit 0400e05938

View File

@ -3454,11 +3454,18 @@ void CEntryStub::GenerateCore(MacroAssembler* masm,
// Special handling of out of memory exceptions. // Special handling of out of memory exceptions.
JumpIfOOM(masm, v0, t0, throw_out_of_memory_exception); JumpIfOOM(masm, v0, t0, throw_out_of_memory_exception);
// Retrieve the pending exception and clear the variable. // Retrieve the pending exception.
__ LoadRoot(a3, Heap::kTheHoleValueRootIndex);
__ li(t0, Operand(ExternalReference(Isolate::kPendingExceptionAddress, __ li(t0, Operand(ExternalReference(Isolate::kPendingExceptionAddress,
isolate))); isolate)));
__ lw(v0, MemOperand(t0)); __ lw(v0, MemOperand(t0));
// See if we just retrieved an OOM exception.
JumpIfOOM(masm, v0, t0, throw_out_of_memory_exception);
// Clear the pending exception.
__ li(a3, Operand(isolate->factory()->the_hole_value()));
__ li(t0, Operand(ExternalReference(Isolate::kPendingExceptionAddress,
isolate)));
__ sw(a3, MemOperand(t0)); __ sw(a3, MemOperand(t0));
// Special handling of termination exceptions which are uncatchable // Special handling of termination exceptions which are uncatchable