1 /* 2 ** Trace management. 3 ** Copyright (C) 2005-2021 Mike Pall. See Copyright Notice in luajit.h 4 */ 5 6 #ifndef _LJ_TRACE_H 7 #define _LJ_TRACE_H 8 9 #include "lj_obj.h" 10 11 #if LJ_HASJIT 12 #include "lj_jit.h" 13 #include "lj_dispatch.h" 14 15 /* Trace errors. */ 16 typedef enum { 17 #define TREDEF(name, msg) LJ_TRERR_##name, 18 #include "lj_traceerr.h" 19 LJ_TRERR__MAX 20 } TraceError; 21 22 LJ_FUNC_NORET void lj_trace_err(jit_State *J, TraceError e); 23 LJ_FUNC_NORET void lj_trace_err_info(jit_State *J, TraceError e); 24 25 /* Trace management. */ 26 LJ_FUNC GCtrace * LJ_FASTCALL lj_trace_alloc(lua_State *L, GCtrace *T); 27 LJ_FUNC void LJ_FASTCALL lj_trace_free(global_State *g, GCtrace *T); 28 LJ_FUNC void lj_trace_reenableproto(GCproto *pt); 29 LJ_FUNC void lj_trace_flushproto(global_State *g, GCproto *pt); 30 LJ_FUNC void lj_trace_flush(jit_State *J, TraceNo traceno); 31 LJ_FUNC int lj_trace_flushall(lua_State *L); 32 LJ_FUNC void lj_trace_initstate(global_State *g); 33 LJ_FUNC void lj_trace_freestate(global_State *g); 34 35 /* Event handling. */ 36 LJ_FUNC void lj_trace_ins(jit_State *J, const BCIns *pc); 37 LJ_FUNCA void LJ_FASTCALL lj_trace_hot(jit_State *J, const BCIns *pc); 38 LJ_FUNCA void LJ_FASTCALL lj_trace_stitch(jit_State *J, const BCIns *pc); 39 LJ_FUNCA int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr); 40 #if LJ_UNWIND_EXT 41 LJ_FUNC uintptr_t LJ_FASTCALL lj_trace_unwind(jit_State *J, uintptr_t addr, ExitNo *ep); 42 #endif 43 44 /* Signal asynchronous abort of trace or end of trace. */ 45 #define lj_trace_abort(g) (G2J(g)->state &= ~LJ_TRACE_ACTIVE) 46 #define lj_trace_end(J) (J->state = LJ_TRACE_END) 47 48 #else 49 50 #define lj_trace_flushall(L) (UNUSED(L), 0) 51 #define lj_trace_initstate(g) UNUSED(g) 52 #define lj_trace_freestate(g) UNUSED(g) 53 #define lj_trace_abort(g) UNUSED(g) 54 #define lj_trace_end(J) UNUSED(J) 55 56 #endif 57 58 #endif 59