mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
Treat extra exit from stack check like a parent exit.
This commit is contained in:
parent
625ef8626f
commit
4057620bf5
@ -714,9 +714,15 @@ static TraceNo trace_exit_find(jit_State *J, MCode *pc)
|
||||
TraceNo traceno;
|
||||
for (traceno = 1; traceno < J->sizetrace; traceno++) {
|
||||
GCtrace *T = traceref(J, traceno);
|
||||
if (T && pc >= T->mcode && pc < (MCode *)((char *)T->mcode + T->szmcode))
|
||||
if (T && pc >= T->mcode && pc < (MCode *)((char *)T->mcode + T->szmcode)) {
|
||||
if (J->exitno == T->nsnap) { /* Treat stack check like a parent exit. */
|
||||
lua_assert(T->root != 0);
|
||||
traceno = T->ir[REF_BASE].op1;
|
||||
J->exitno = T->ir[REF_BASE].op2;
|
||||
}
|
||||
return traceno;
|
||||
}
|
||||
}
|
||||
lua_assert(0);
|
||||
return 0;
|
||||
}
|
||||
@ -735,6 +741,8 @@ int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr)
|
||||
#ifdef EXITSTATE_PCREG
|
||||
J->parent = trace_exit_find(J, (MCode *)(intptr_t)ex->gpr[EXITSTATE_PCREG]);
|
||||
#endif
|
||||
lua_assert(traceref(J, J->parent) != NULL &&
|
||||
J->exitno < traceref(J, J->parent)->nsnap);
|
||||
exd.J = J;
|
||||
exd.exptr = exptr;
|
||||
errcode = lj_vm_cpcall(L, NULL, &exd, trace_exit_cp);
|
||||
|
Loading…
Reference in New Issue
Block a user