Index: runtime/vm/assembler_x64.h |
diff --git a/runtime/vm/assembler_x64.h b/runtime/vm/assembler_x64.h |
index 6650fd94a7ac57749f942e9dfc534e4b629684f6..a6d64db0dc3f2c5be230533751d6b06868353567 100644 |
--- a/runtime/vm/assembler_x64.h |
+++ b/runtime/vm/assembler_x64.h |
@@ -366,7 +366,7 @@ class Assembler : public ValueObject { |
void call(Label* label); |
void call(const ExternalLabel* label); |
- static const intptr_t kCallExternalLabelSize = 15; |
+ static const intptr_t kCallExternalLabelSize = 7; |
void pushq(Register reg); |
void pushq(const Address& address); |
@@ -770,7 +770,7 @@ class Assembler : public ValueObject { |
const Function& function, |
Register new_pp); |
void JmpPatchable(const StubEntry& stub_entry, Register pp); |
- void Jmp(const StubEntry& stub_entry, Register pp = PP); |
+ void Jmp(const StubEntry& stub_entry, Register pp); |
void J(Condition condition, const StubEntry& stub_entry, Register pp); |
void CallPatchable(const StubEntry& stub_entry); |
void Call(const StubEntry& stub_entry); |
@@ -832,8 +832,6 @@ class Assembler : public ValueObject { |
void PushRegisters(intptr_t cpu_register_set, intptr_t xmm_register_set); |
void PopRegisters(intptr_t cpu_register_set, intptr_t xmm_register_set); |
- void CheckCodePointer(); |
- |
void EnterFrame(intptr_t frame_space); |
void LeaveFrame(); |
void ReserveAlignedFrameSpace(intptr_t frame_space); |
@@ -924,7 +922,6 @@ class Assembler : public ValueObject { |
buffer_.FinalizeInstructions(region); |
} |
- void RestoreCodePointer(); |
void LoadPoolPointer(Register pp = PP); |
// Set up a Dart frame on entry with a frame pointer and PC information to |
@@ -946,13 +943,16 @@ class Assembler : public ValueObject { |
// ... |
// pushq r15 |
// ..... |
- void EnterDartFrame(intptr_t frame_size, Register new_pp); |
- void LeaveDartFrame(RestorePP restore_pp = kRestoreCallerPP); |
+ void EnterDartFrame(intptr_t frame_size, |
+ Register new_pp, |
+ Register pc_marker_override); |
+ void LeaveDartFrame(); |
// Set up a Dart frame for a function compiled for on-stack replacement. |
// The frame layout is a normal Dart frame, but the frame is partially set |
// up on entry (it is the frame of the unoptimized code). |
- void EnterOsrFrame(intptr_t extra_size); |
+ void EnterOsrFrame(intptr_t extra_size, |
+ Register new_pp, Register pc_marker_override); |
// Set up a stub frame so that the stack traversal code can easily identify |
// a stub frame. |
@@ -970,6 +970,19 @@ class Assembler : public ValueObject { |
void EnterStubFrame(); |
void LeaveStubFrame(); |
+ // Instruction pattern from entrypoint is used in dart frame prologues |
+ // to set up the frame and save a PC which can be used to figure out the |
+ // RawInstruction object corresponding to the code running in the frame. |
+ // entrypoint: |
+ // pushq rbp (size is 1 byte) |
+ // movq rbp, rsp (size is 3 bytes) |
+ // call L (size is 5 bytes) |
+ // L: |
+ static const intptr_t kEntryPointToPcMarkerOffset = 0; |
+ static intptr_t EntryPointToPcMarkerOffset() { |
+ return kEntryPointToPcMarkerOffset; |
+ } |
+ |
void UpdateAllocationStats(intptr_t cid, |
Heap::Space space, |
bool inline_isolate = true); |