| Index: runtime/vm/stub_code_arm64.cc
|
| diff --git a/runtime/vm/stub_code_arm64.cc b/runtime/vm/stub_code_arm64.cc
|
| index 5a5a156ae600b2c7869668c71dc7b7554e90ee09..71dae4b3b848ddb0cbed4e2f50daf03698713d8d 100644
|
| --- a/runtime/vm/stub_code_arm64.cc
|
| +++ b/runtime/vm/stub_code_arm64.cc
|
| @@ -1902,20 +1902,24 @@ void StubCode::GenerateGetStackPointerStub(Assembler* assembler) {
|
| }
|
|
|
|
|
| -// Jump to a frame on the call stack.
|
| +// Jump to the exception or error handler.
|
| // LR: return address.
|
| // R0: program_counter.
|
| // R1: stack_pointer.
|
| // R2: frame_pointer.
|
| -// R3: thread.
|
| +// R3: error object.
|
| +// R4: address of stacktrace object.
|
| +// R5: thread.
|
| // Does not return.
|
| -void StubCode::GenerateJumpToFrameStub(Assembler* assembler) {
|
| +void StubCode::GenerateJumpToExceptionHandlerStub(Assembler* assembler) {
|
| ASSERT(kExceptionObjectReg == R0);
|
| ASSERT(kStackTraceObjectReg == R1);
|
| __ mov(LR, R0); // Program counter.
|
| __ mov(SP, R1); // Stack pointer.
|
| __ mov(FP, R2); // Frame_pointer.
|
| - __ mov(THR, R3);
|
| + __ mov(R0, R3); // Exception object.
|
| + __ mov(R1, R4); // StackTrace object.
|
| + __ mov(THR, R5);
|
| // Set the tag.
|
| __ LoadImmediate(R2, VMTag::kDartTagId);
|
| __ StoreToOffset(R2, THR, Thread::vm_tag_offset());
|
| @@ -1924,27 +1928,6 @@ void StubCode::GenerateJumpToFrameStub(Assembler* assembler) {
|
| // Restore the pool pointer.
|
| __ RestoreCodePointer();
|
| __ LoadPoolPointer();
|
| - __ ret(); // Jump to continuation point.
|
| -}
|
| -
|
| -
|
| -// Run an exception handler. Execution comes from JumpToFrame
|
| -// stub or from the simulator.
|
| -//
|
| -// The arguments are stored in the Thread object.
|
| -// Does not return.
|
| -void StubCode::GenerateRunExceptionHandlerStub(Assembler* assembler) {
|
| - __ LoadFromOffset(LR, THR, Thread::resume_pc_offset());
|
| - __ LoadImmediate(R2, 0);
|
| -
|
| - // Exception object.
|
| - __ LoadFromOffset(R0, THR, Thread::active_exception_offset());
|
| - __ StoreToOffset(R2, THR, Thread::active_exception_offset());
|
| -
|
| - // Stacktrace object.
|
| - __ LoadFromOffset(R1, THR, Thread::active_stacktrace_offset());
|
| - __ StoreToOffset(R2, THR, Thread::active_stacktrace_offset());
|
| -
|
| __ ret(); // Jump to the exception handler code.
|
| }
|
|
|
|
|