Index: runtime/vm/assembler_x64.cc |
=================================================================== |
--- runtime/vm/assembler_x64.cc (revision 30084) |
+++ runtime/vm/assembler_x64.cc (working copy) |
@@ -2667,17 +2667,11 @@ |
} |
-void Assembler::LeaveFrameWithPP() { |
- movq(PP, Address(RBP, -2 * kWordSize)); |
- LeaveFrame(); |
-} |
- |
- |
void Assembler::ReturnPatchable() { |
// This sequence must have a fixed size so that it can be patched by the |
// debugger. |
intptr_t start = buffer_.GetPosition(); |
- LeaveFrameWithPP(); |
+ LeaveDartFrame(); |
ret(); |
nop(4); |
ASSERT((buffer_.GetPosition() - start) == 13); |
@@ -2825,6 +2819,13 @@ |
} |
+void Assembler::LeaveDartFrame() { |
+ // Restore caller's PP register that was pushed in EnterDartFrame. |
+ movq(PP, Address(RBP, (kSavedCallerPpSlotFromFp * kWordSize))); |
+ LeaveFrame(); |
+} |
+ |
+ |
// On entry to a function compiled for OSR, the caller's frame pointer, the |
// stack locals, and any copied parameters are already in place. The frame |
// pointer is already set up. The PC marker is not correct for the |
@@ -2862,17 +2863,20 @@ |
} |
-void Assembler::EnterStubFrame() { |
+void Assembler::EnterStubFrame(bool load_pp) { |
EnterFrame(0); |
pushq(Immediate(0)); // Push 0 in the saved PC area for stub frames. |
+ pushq(PP); // Save caller's pool pointer |
+ if (load_pp) { |
+ LoadPoolPointer(PP); |
+ } |
} |
-void Assembler::EnterStubFrameWithPP() { |
- EnterFrame(0); |
- pushq(Immediate(0)); // Push 0 in the saved PC area for stub frames. |
- pushq(PP); // Save caller's pool pointer |
- LoadPoolPointer(PP); |
+void Assembler::LeaveStubFrame() { |
+ // Restore caller's PP register that was pushed in EnterStubFrame. |
+ movq(PP, Address(RBP, (kSavedCallerPpSlotFromFp * kWordSize))); |
+ LeaveFrame(); |
} |