Index: runtime/vm/stub_code_ia32.cc |
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc |
index fc1ef63cfc60f758f2f5e84ea4d14f9b5fd1d635..d7df34721e345215603ad43e2714c2fee21f8eb7 100644 |
--- a/runtime/vm/stub_code_ia32.cc |
+++ b/runtime/vm/stub_code_ia32.cc |
@@ -1753,15 +1753,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. |
regis
2014/07/14 20:00:34
You could use EAX instead of CTX.
Cutch
2014/07/14 21:32:07
Can't use EAX because it is the same askExceptionO
|
__ 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. |
} |