diff --git a/src/lj_snap.c b/src/lj_snap.c index 9858c110..0c317b52 100644 --- a/src/lj_snap.c +++ b/src/lj_snap.c @@ -873,7 +873,8 @@ const BCIns *lj_snap_restore(jit_State *J, void *exptr) lua_State *L = J->L; /* Set interpreter PC to the next PC to get correct error messages. */ - setcframe_pc(cframe_raw(L->cframe), pc+1); + setcframe_pc(L->cframe, pc+1); + setcframe_pc(cframe_raw(cframe_prev(L->cframe)), pc); /* Make sure the stack is big enough for the slots from the snapshot. */ if (LJ_UNLIKELY(L->base + snap->topslot >= tvref(L->maxstack))) { diff --git a/src/lj_trace.c b/src/lj_trace.c index 8385f3d1..d015f2ab 100644 --- a/src/lj_trace.c +++ b/src/lj_trace.c @@ -788,10 +788,8 @@ int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr) exd.J = J; exd.exptr = exptr; errcode = lj_vm_cpcall(L, NULL, &exd, trace_exit_cp); - if (errcode) { - setcframe_pc(cframe_raw(L->cframe), L); /* Point to any valid memory. */ + if (errcode) return -errcode; /* Return negated error code. */ - } lj_vmevent_send(L, TEXIT, lj_state_checkstack(L, 4+RID_NUM_GPR+RID_NUM_FPR+LUA_MINSTACK);