| Index: runtime/vm/stub_code_x64.cc
|
| ===================================================================
|
| --- runtime/vm/stub_code_x64.cc (revision 43896)
|
| +++ runtime/vm/stub_code_x64.cc (working copy)
|
| @@ -740,11 +740,15 @@
|
| __ movq(Address(kIsolateReg, Isolate::vm_tag_offset()),
|
| Immediate(VMTag::kDartTagId));
|
|
|
| - // Save the top exit frame info. Use RAX as a temporary register.
|
| + // Save top resource and top exit frame info. Use RAX as a temporary register.
|
| // StackFrameIterator reads the top exit frame info saved in this frame.
|
| + __ movq(RAX, Address(kIsolateReg, Isolate::top_resource_offset()));
|
| + __ pushq(RAX);
|
| + __ movq(Address(kIsolateReg, Isolate::top_resource_offset()),
|
| + Immediate(0));
|
| + __ movq(RAX, Address(kIsolateReg, Isolate::top_exit_frame_info_offset()));
|
| // The constant kExitLinkSlotFromEntryFp must be kept in sync with the
|
| // code below.
|
| - __ movq(RAX, Address(kIsolateReg, Isolate::top_exit_frame_info_offset()));
|
| __ pushq(RAX);
|
| #if defined(DEBUG)
|
| {
|
| @@ -756,7 +760,6 @@
|
| __ Bind(&ok);
|
| }
|
| #endif
|
| -
|
| __ movq(Address(kIsolateReg, Isolate::top_exit_frame_info_offset()),
|
| Immediate(0));
|
|
|
| @@ -798,9 +801,11 @@
|
| // Get rid of arguments pushed on the stack.
|
| __ leaq(RSP, Address(RSP, RDX, TIMES_4, 0)); // RDX is a Smi.
|
|
|
| - // Restore the saved top exit frame info back into the Isolate structure.
|
| + // Restore the saved top exit frame info and top resource back into the
|
| + // Isolate structure.
|
| __ LoadIsolate(kIsolateReg);
|
| __ popq(Address(kIsolateReg, Isolate::top_exit_frame_info_offset()));
|
| + __ popq(Address(kIsolateReg, Isolate::top_resource_offset()));
|
|
|
| // Restore the current VMTag from the stack.
|
| __ popq(Address(kIsolateReg, Isolate::vm_tag_offset()));
|
|
|