Index: runtime/vm/stub_code_ia32.cc |
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc |
index 33f280392c867923b367e76b3ebb5731da777a25..88fb684abcbc9aa5704ec171d539f9a7238ab236 100644 |
--- a/runtime/vm/stub_code_ia32.cc |
+++ b/runtime/vm/stub_code_ia32.cc |
@@ -1786,15 +1786,22 @@ void StubCode::GenerateGetStackPointerStub(Assembler* assembler) { |
// TOS + 3: frame_pointer |
// TOS + 4: exception object |
// TOS + 5: stacktrace object |
+// TOS + 6: isolate |
// No Result. |
void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) { |
ASSERT(kExceptionObjectReg == EAX); |
ASSERT(kStackTraceObjectReg == EDX); |
+ __ movl(CTX, Address(ESP, 6 * kWordSize)); // Load target isolate. |
__ 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. |
+ // Set tag. |
+ __ movl(Address(CTX, Isolate::vm_tag_offset()), |
+ Immediate(VMTag::kScriptTagId)); |
+ // Clear top exit frame. |
+ __ movl(Address(CTX, Isolate::top_exit_frame_info_offset()), Immediate(0)); |
__ jmp(EBX); // Jump to the exception handler code. |
} |