You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This might be me being very, very stupid, but in patch_frame_allocation we retrospectively make sure rsp is given enough space for all the spills the trace needs:
let stack_size = self.ra.align_stack(SYSV_CALL_STACK_ALIGN) - self.sp_offset;match i32::try_from(stack_size){Ok(asp) => {letmut patchup = self.asm.alter_uncommitted();
patchup.goto(asm_off);dynasm!(patchup ; sub rsp,DWORD asp);
For example for big_loop this inserts:
subrsp,0x30
as the very first instruction of the trace.
However, when a guard fails we seem to pass rsp in without subtracting that offset. Nor, as far as I can see, is that stack offset information available to __yk_deopt. Does this mean we gradually end up with the wrong rsp as we fail from guards?
The text was updated successfully, but these errors were encountered:
This might be me being very, very stupid, but in
patch_frame_allocation
we retrospectively make surersp
is given enough space for all the spills the trace needs:For example for big_loop this inserts:
as the very first instruction of the trace.
However, when a guard fails we seem to pass
rsp
in without subtracting that offset. Nor, as far as I can see, is that stack offset information available to__yk_deopt
. Does this mean we gradually end up with the wrongrsp
as we fail from guards?The text was updated successfully, but these errors were encountered: