mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 15:14:08 +00:00
ARM64: Restore fp before sp in C stack unwinders.
Thanks to Peter Cawley. #1096
This commit is contained in:
parent
becf5cc65d
commit
007e4dce13
@ -373,11 +373,12 @@ void emit_peobj(BuildCtx *ctx)
|
||||
|
||||
/* Unwind codes for .text section with handler. */
|
||||
p = uwc;
|
||||
CADD_FP(192); /* +2 */
|
||||
CSAVE_REGS(19, 28, 176); /* +5*2 */
|
||||
CSAVE_FREGS(8, 15, 96); /* +4*2 */
|
||||
CSAVE_FPLR(192); /* +1 */
|
||||
CALLOC_S(208); /* +1 */
|
||||
CEND_ALIGN; /* +1 +3 -> 24 */
|
||||
CEND_ALIGN; /* +1 +1 -> 24 */
|
||||
|
||||
u32 = ((24u >> 2) << 27) | (1u << 20) | (fcofs >> 2);
|
||||
owrite(ctx, &u32, 4);
|
||||
|
@ -430,6 +430,7 @@ static void build_subroutines(BuildCtx *ctx)
|
||||
|
|
||||
|->vm_unwind_c: // Unwind C stack, return from vm_pcall.
|
||||
| // (void *cframe, int errcode)
|
||||
| add fp, CARG1, # SAVE_FP_LR_
|
||||
| mov sp, CARG1
|
||||
| mov CRET1, CARG2
|
||||
| ldr L, SAVE_L
|
||||
@ -441,7 +442,8 @@ static void build_subroutines(BuildCtx *ctx)
|
||||
|
|
||||
|->vm_unwind_ff: // Unwind C stack, return from ff pcall.
|
||||
| // (void *cframe)
|
||||
| and sp, CARG1, #CFRAME_RAWMASK
|
||||
| add fp, CARG1, # SAVE_FP_LR_
|
||||
| mov sp, CARG1
|
||||
| ldr L, SAVE_L
|
||||
| movz TISNUM, #(LJ_TISNUM>>1)&0xffff, lsl #48
|
||||
| movz TISNUMhi, #(LJ_TISNUM>>1)&0xffff, lsl #16
|
||||
|
Loading…
Reference in New Issue
Block a user