summaryrefslogtreecommitdiff
path: root/src/lj_trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_trace.c')
-rw-r--r--src/lj_trace.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/lj_trace.c b/src/lj_trace.c
index cbd7ca6e..5571293e 100644
--- a/src/lj_trace.c
+++ b/src/lj_trace.c
@@ -692,8 +692,12 @@ int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr)
692 ); 692 );
693 693
694 pc = exd.pc; 694 pc = exd.pc;
695 trace_hotside(J, pc);
696 cf = cframe_raw(L->cframe); 695 cf = cframe_raw(L->cframe);
696 setcframe_pc(cf, pc);
697 if (G(L)->gc.state == GCSatomic || G(L)->gc.state == GCSfinalize)
698 lj_gc_step(L); /* Exited because of GC: drive GC forward. */
699 else
700 trace_hotside(J, pc);
697 if (bc_op(*pc) == BC_JLOOP) { 701 if (bc_op(*pc) == BC_JLOOP) {
698 BCIns *retpc = &J->trace[bc_d(*pc)]->startins; 702 BCIns *retpc = &J->trace[bc_d(*pc)]->startins;
699 if (bc_isret(bc_op(*retpc))) { 703 if (bc_isret(bc_op(*retpc))) {
@@ -703,10 +707,10 @@ int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr)
703 *J->patchpc = *retpc; 707 *J->patchpc = *retpc;
704 } else { 708 } else {
705 pc = retpc; 709 pc = retpc;
710 setcframe_pc(cf, pc);
706 } 711 }
707 } 712 }
708 } 713 }
709 setcframe_pc(cf, pc);
710 /* Return MULTRES or 0. */ 714 /* Return MULTRES or 0. */
711 switch (bc_op(*pc)) { 715 switch (bc_op(*pc)) {
712 case BC_CALLM: case BC_CALLMT: 716 case BC_CALLM: case BC_CALLMT: