mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 15:14:08 +00:00
FFI: Don't load PC from non-function object in FFI continuation.
Reported by Yichun Zhang. #743
This commit is contained in:
parent
a622e2eb55
commit
68ffbd318b
@ -524,13 +524,13 @@ static void build_subroutines(BuildCtx *ctx)
|
||||
| cmp CARG1, #1
|
||||
|.endif
|
||||
| ldr PC, [CARG4, #-12] // Restore PC from [cont|PC].
|
||||
| ldr CARG3, LFUNC:CARG3->field_pc
|
||||
| mvn INS, #~LJ_TNIL
|
||||
| add CARG2, RA, RC
|
||||
| str INS, [CARG2, #-4] // Ensure one valid arg.
|
||||
|.if FFI
|
||||
| bls >1
|
||||
|.endif
|
||||
| ldr CARG3, LFUNC:CARG3->field_pc
|
||||
| ldr KBASE, [CARG3, #PC2PROTO(k)]
|
||||
| // BASE = base, RA = resultptr, CARG4 = meta base
|
||||
| bx CARG1
|
||||
|
@ -603,11 +603,11 @@ static void build_subroutines(BuildCtx *ctx)
|
||||
|.endif
|
||||
| lw PC, -16+HI(RB) // Restore PC from [cont|PC].
|
||||
| addu TMP2, RA, RD
|
||||
| lw TMP1, LFUNC:TMP1->pc
|
||||
|.if FFI
|
||||
| bnez AT, >1
|
||||
|.endif
|
||||
|. sw TISNIL, -8+HI(TMP2) // Ensure one valid arg.
|
||||
| lw TMP1, LFUNC:TMP1->pc
|
||||
| // BASE = base, RA = resultptr, RB = meta base
|
||||
| jr TMP0 // Jump to continuation.
|
||||
|. lw KBASE, PC2PROTO(k)(TMP1)
|
||||
|
@ -819,11 +819,11 @@ static void build_subroutines(BuildCtx *ctx)
|
||||
|.endif
|
||||
| lwz PC, -16(RB) // Restore PC from [cont|PC].
|
||||
| subi TMP2, RD, 8
|
||||
| lwz TMP1, LFUNC:TMP1->pc
|
||||
| stwx TISNIL, RA, TMP2 // Ensure one valid arg.
|
||||
|.if FFI
|
||||
| ble >1
|
||||
|.endif
|
||||
| lwz TMP1, LFUNC:TMP1->pc
|
||||
| lwz KBASE, PC2PROTO(k)(TMP1)
|
||||
| // BASE = base, RA = resultptr, RB = meta base
|
||||
| mtctr TMP0
|
||||
|
Loading…
Reference in New Issue
Block a user