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;
|
TraceNo traceno;
|
||||||
for (traceno = 1; traceno < J->sizetrace; traceno++) {
|
for (traceno = 1; traceno < J->sizetrace; traceno++) {
|
||||||
GCtrace *T = traceref(J, 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;
|
return traceno;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
lua_assert(0);
|
lua_assert(0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -735,6 +741,8 @@ int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr)
|
|||||||
#ifdef EXITSTATE_PCREG
|
#ifdef EXITSTATE_PCREG
|
||||||
J->parent = trace_exit_find(J, (MCode *)(intptr_t)ex->gpr[EXITSTATE_PCREG]);
|
J->parent = trace_exit_find(J, (MCode *)(intptr_t)ex->gpr[EXITSTATE_PCREG]);
|
||||||
#endif
|
#endif
|
||||||
|
lua_assert(traceref(J, J->parent) != NULL &&
|
||||||
|
J->exitno < traceref(J, J->parent)->nsnap);
|
||||||
exd.J = J;
|
exd.J = J;
|
||||||
exd.exptr = exptr;
|
exd.exptr = exptr;
|
||||||
errcode = lj_vm_cpcall(L, NULL, &exd, trace_exit_cp);
|
errcode = lj_vm_cpcall(L, NULL, &exd, trace_exit_cp);
|
||||||
|
Loading…
Reference in New Issue
Block a user