| 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 | |