| Index: src/ia32/code-stubs-ia32.cc
|
| ===================================================================
|
| --- src/ia32/code-stubs-ia32.cc (revision 7902)
|
| +++ src/ia32/code-stubs-ia32.cc (working copy)
|
| @@ -4197,7 +4197,12 @@
|
| __ cmp(Operand::StaticVariable(js_entry_sp), Immediate(0));
|
| __ j(not_equal, ¬_outermost_js);
|
| __ mov(Operand::StaticVariable(js_entry_sp), ebp);
|
| + __ push(Immediate(Smi::FromInt(StackFrame::OUTERMOST_JSENTRY_FRAME)));
|
| + Label cont;
|
| + __ jmp(&cont);
|
| __ bind(¬_outermost_js);
|
| + __ push(Immediate(Smi::FromInt(StackFrame::INNER_JSENTRY_FRAME)));
|
| + __ bind(&cont);
|
| #endif
|
|
|
| // Call a faked try-block that does the invoke.
|
| @@ -4243,23 +4248,19 @@
|
| __ call(Operand(edx));
|
|
|
| // Unlink this frame from the handler chain.
|
| - __ pop(Operand::StaticVariable(ExternalReference(
|
| - Isolate::k_handler_address,
|
| - masm->isolate())));
|
| - // Pop next_sp.
|
| - __ add(Operand(esp), Immediate(StackHandlerConstants::kSize - kPointerSize));
|
| + __ PopTryHandler();
|
|
|
| + __ bind(&exit);
|
| #ifdef ENABLE_LOGGING_AND_PROFILING
|
| - // If current EBP value is the same as js_entry_sp value, it means that
|
| - // the current function is the outermost.
|
| - __ cmp(ebp, Operand::StaticVariable(js_entry_sp));
|
| + // Check if the current stack frame is marked as the outermost JS frame.
|
| + __ pop(ebx);
|
| + __ cmp(Operand(ebx), Immediate(Smi::FromInt(StackFrame::OUTERMOST_JSENTRY_FRAME)));
|
| __ j(not_equal, ¬_outermost_js_2);
|
| __ mov(Operand::StaticVariable(js_entry_sp), Immediate(0));
|
| __ bind(¬_outermost_js_2);
|
| #endif
|
|
|
| // Restore the top frame descriptor from the stack.
|
| - __ bind(&exit);
|
| __ pop(Operand::StaticVariable(ExternalReference(
|
| Isolate::k_c_entry_fp_address,
|
| masm->isolate())));
|
|
|