From 003f68565d2f06b2ad2029db002e393d020c034c Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 20 Sep 2021 14:39:26 +0200 Subject: FFI: Don't load PC from non-function object in FFI continuation. Reported by Yichun Zhang. #743 --- src/vm_arm64.dasc | 2 +- src/vm_mips64.dasc | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/vm_arm64.dasc b/src/vm_arm64.dasc index 1abc6ecc..304e4544 100644 --- a/src/vm_arm64.dasc +++ b/src/vm_arm64.dasc @@ -562,12 +562,12 @@ static void build_subroutines(BuildCtx *ctx) | cmp CARG1, #1 |.endif | ldr PC, [CARG4, #-24] // Restore PC from [cont|PC]. - | ldr CARG3, LFUNC:CARG3->pc | add TMP0, RA, RC | str TISNIL, [TMP0, #-8] // Ensure one valid arg. |.if FFI | bls >1 |.endif + | ldr CARG3, LFUNC:CARG3->pc | ldr KBASE, [CARG3, #PC2PROTO(k)] | // BASE = base, RA = resultptr, CARG4 = meta base | br CARG1 diff --git a/src/vm_mips64.dasc b/src/vm_mips64.dasc index 5c5d761c..4ddb2f9c 100644 --- a/src/vm_mips64.dasc +++ b/src/vm_mips64.dasc @@ -728,11 +728,11 @@ static void build_subroutines(BuildCtx *ctx) | ld PC, -24(RB) // Restore PC from [cont|PC]. | cleartp LFUNC:TMP1 | daddu TMP2, RA, RD - | ld TMP1, LFUNC:TMP1->pc |.if FFI | bnez AT, >1 |.endif |. sd TISNIL, -8(TMP2) // Ensure one valid arg. + | ld TMP1, LFUNC:TMP1->pc | // BASE = base, RA = resultptr, RB = meta base | jr TMP0 // Jump to continuation. |. ld KBASE, PC2PROTO(k)(TMP1) -- cgit v1.2.3-55-g6feb