1/*
2** Trace management.
3** Copyright (C) 2005-2014 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. */
16typedef enum {
17#define TREDEF(name, msg) LJ_TRERR_##name,
18#include "lj_traceerr.h"
19 LJ_TRERR__MAX
20} TraceError;
21
22LJ_FUNC_NORET void lj_trace_err(jit_State *J, TraceError e);
23LJ_FUNC_NORET void lj_trace_err_info(jit_State *J, TraceError e);
24
25/* Trace management. */
26LJ_FUNC void LJ_FASTCALL lj_trace_free(global_State *g, GCtrace *T);
27LJ_FUNC void lj_trace_reenableproto(GCproto *pt);
28LJ_FUNC void lj_trace_flushproto(global_State *g, GCproto *pt);
29LJ_FUNC void lj_trace_flush(jit_State *J, TraceNo traceno);
30LJ_FUNC int lj_trace_flushall(lua_State *L);
31LJ_FUNC void lj_trace_initstate(global_State *g);
32LJ_FUNC void lj_trace_freestate(global_State *g);
33
34/* Event handling. */
35LJ_FUNC void lj_trace_ins(jit_State *J, const BCIns *pc);
36LJ_FUNCA void LJ_FASTCALL lj_trace_hot(jit_State *J, const BCIns *pc);
37LJ_FUNCA int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr);
38
39/* Signal asynchronous abort of trace or end of trace. */
40#define lj_trace_abort(g) (G2J(g)->state &= ~LJ_TRACE_ACTIVE)
41#define lj_trace_end(J) (J->state = LJ_TRACE_END)
42
43#else
44
45#define lj_trace_flushall(L) (UNUSED(L), 0)
46#define lj_trace_initstate(g) UNUSED(g)
47#define lj_trace_freestate(g) UNUSED(g)
48#define lj_trace_abort(g) UNUSED(g)
49#define lj_trace_end(J) UNUSED(J)
50
51#endif
52
53#endif
54