Fix interaction of profiler and ITERN recording.

Reported and analyzed by vfprintf. #754
master
Mike Pall 2021-10-08 16:50:35 +02:00
parent 442eff63ab
commit 05f1984e1a
1 changed files with 3 additions and 1 deletions

View File

@ -663,7 +663,9 @@ static LoopEvent rec_itern(jit_State *J, BCReg ra, BCReg rb)
#else
RecordIndex ix;
/* Since ITERN is recorded at the start, we need our own loop detection. */
if (J->pc == J->startpc && J->cur.nins > REF_FIRST &&
if (J->pc == J->startpc &&
(J->cur.nins > REF_FIRST+1 ||
(J->cur.nins == REF_FIRST+1 && J->cur.ir[REF_FIRST].o != IR_PROF)) &&
J->framedepth + J->retdepth == 0 && J->parent == 0 && J->exitno == 0) {
lj_record_stop(J, LJ_TRLINK_LOOP, J->cur.traceno); /* Looping trace. */
return LOOPEV_ENTER;