Skip to content
This repository was archived by the owner on Nov 1, 2020. It is now read-only.
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 7 additions & 9 deletions src/Native/Runtime/unix/unixasmmacrosamd64.inc
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,9 @@ C_FUNC(\Name):
DEFAULT_FRAME_SAVE_FLAGS = PTFF_SAVE_ALL_PRESERVED + PTFF_SAVE_RSP

.macro PUSH_COOP_PINVOKE_FRAME trashReg
lea \trashReg, [rsp + 8h]
push_nonvol_reg rbp // push RBP frame
mov rbp, rsp
lea \trashReg, [rsp + 10h]
push_register \trashReg // save caller's RSP
push_nonvol_reg r15 // save preserved registers
push_nonvol_reg r14 // ..
Expand All @@ -317,19 +319,14 @@ DEFAULT_FRAME_SAVE_FLAGS = PTFF_SAVE_ALL_PRESERVED + PTFF_SAVE_RSP
push_nonvol_reg rbx // ..
push_imm DEFAULT_FRAME_SAVE_FLAGS // save the register bitmask
push_register \trashReg // Thread * (unused by stackwalker)
push_nonvol_reg rbp // save caller's RBP
mov \trashReg, [rsp + 9*8] // Find the return address
push_register rbp // save caller's RBP
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is not caller's RBP anymore with this change.

mov \trashReg, [rsp + 10*8] // Find the return address
push_register \trashReg // save m_RIP
lea \trashReg, [rsp] // trashReg == address of frame

// stack alignment
alloc_stack 8
.endm

.macro POP_COOP_PINVOKE_FRAME
// Adjust for stack alignment and discard RIP
free_stack 16

pop_register r10 // discard RIP
pop_nonvol_reg rbp // restore RBP
pop_register r10 // discard thread
pop_register r10 // discard bitmask
Expand All @@ -339,4 +336,5 @@ DEFAULT_FRAME_SAVE_FLAGS = PTFF_SAVE_ALL_PRESERVED + PTFF_SAVE_RSP
pop_nonvol_reg r14
pop_nonvol_reg r15
pop_register r10 // discard caller RSP
pop_register r10 // discard RBP frame
.endm