| Index: runtime/vm/stub_code_ia32.cc
|
| diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
|
| index ca70617824bf92fbfc39004256c45e44bdd276ba..1de178a8c7d97d2d5e3fdfadf8d4634a5f18f760 100644
|
| --- a/runtime/vm/stub_code_ia32.cc
|
| +++ b/runtime/vm/stub_code_ia32.cc
|
| @@ -1792,15 +1792,21 @@ void StubCode::GenerateGetStackPointerStub(Assembler* assembler) {
|
| }
|
|
|
|
|
| -// Jump to a frame on the call stack.
|
| +// Jump to the exception or error handler.
|
| // TOS + 0: return address
|
| // TOS + 1: program_counter
|
| // TOS + 2: stack_pointer
|
| // TOS + 3: frame_pointer
|
| -// TOS + 4: thread
|
| +// TOS + 4: exception object
|
| +// TOS + 5: stacktrace object
|
| +// TOS + 6: thread
|
| // No Result.
|
| -void StubCode::GenerateJumpToFrameStub(Assembler* assembler) {
|
| - __ movl(THR, Address(ESP, 4 * kWordSize)); // Load target thread.
|
| +void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) {
|
| + ASSERT(kExceptionObjectReg == EAX);
|
| + ASSERT(kStackTraceObjectReg == EDX);
|
| + __ movl(THR, Address(ESP, 6 * kWordSize)); // Load target thread.
|
| + __ movl(kStackTraceObjectReg, Address(ESP, 5 * kWordSize));
|
| + __ movl(kExceptionObjectReg, Address(ESP, 4 * kWordSize));
|
| __ movl(EBP, Address(ESP, 3 * kWordSize)); // Load target frame_pointer.
|
| __ movl(EBX, Address(ESP, 1 * kWordSize)); // Load target PC into EBX.
|
| __ movl(ESP, Address(ESP, 2 * kWordSize)); // Load target stack_pointer.
|
| @@ -1812,29 +1818,6 @@ void StubCode::GenerateJumpToFrameStub(Assembler* assembler) {
|
| }
|
|
|
|
|
| -// Run an exception handler. Execution comes from JumpToFrame stub.
|
| -//
|
| -// The arguments are stored in the Thread object.
|
| -// No result.
|
| -void StubCode::GenerateRunExceptionHandlerStub(Assembler* assembler) {
|
| - ASSERT(kExceptionObjectReg == EAX);
|
| - ASSERT(kStackTraceObjectReg == EDX);
|
| - __ movl(EBX, Address(THR, Thread::resume_pc_offset()));
|
| -
|
| - // Load the exception from the current thread.
|
| - Address exception_addr(THR, Thread::active_exception_offset());
|
| - __ movl(kExceptionObjectReg, exception_addr);
|
| - __ movl(exception_addr, Immediate(0));
|
| -
|
| - // Load the stacktrace from the current thread.
|
| - Address stacktrace_addr(THR, Thread::active_stacktrace_offset());
|
| - __ movl(kStackTraceObjectReg, stacktrace_addr);
|
| - __ movl(stacktrace_addr, Immediate(0));
|
| -
|
| - __ jmp(EBX); // Jump to continuation point.
|
| -}
|
| -
|
| -
|
| // Calls to the runtime to optimize the given function.
|
| // EBX: function to be reoptimized.
|
| // EDX: argument descriptor (preserved).
|
|
|