Apply PIE to nghttpx
[platform/upstream/nghttp2.git] / third-party / mruby / mrbgems / mruby-bin-debugger / tools / mrdb / mrdb.h
1 /*
2 ** mrdb.h - mruby debugger
3 **
4 */
5
6 #ifndef MRDB_H
7 #define MRDB_H
8
9 #include <mruby.h>
10
11 #include "mrdbconf.h"
12
13 #ifdef _MSC_VER
14 # define __func__ __FUNCTION__
15 #endif
16
17 #define MAX_COMMAND_WORD (16)
18
19 typedef enum debug_command_id {
20   DBGCMD_RUN,
21   DBGCMD_CONTINUE,
22   DBGCMD_NEXT,
23   DBGCMD_STEP,
24   DBGCMD_BREAK,
25   DBGCMD_INFO_BREAK,
26   DBGCMD_INFO_LOCAL,
27   DBGCMD_WATCH,
28   DBGCMD_INFO_WATCH,
29   DBGCMD_ENABLE,
30   DBGCMD_DISABLE,
31   DBGCMD_DELETE,
32   DBGCMD_PRINT,
33   DBGCMD_DISPLAY,
34   DBGCMD_INFO_DISPLAY,
35   DBGCMD_DELETE_DISPLAY,
36   DBGCMD_EVAL,
37   DBGCMD_BACKTRACE,
38   DBGCMD_LIST,
39   DBGCMD_HELP,
40   DBGCMD_QUIT,
41   DBGCMD_UNKNOWN
42 } debug_command_id;
43
44 typedef enum dbgcmd_state {
45   DBGST_CONTINUE,
46   DBGST_PROMPT,
47   DBGST_COMMAND_ERROR,
48   DBGST_MAX,
49   DBGST_RESTART
50 } dbgcmd_state;
51
52 typedef enum mrdb_exemode {
53   DBG_INIT,
54   DBG_RUN,
55   DBG_STEP,
56   DBG_NEXT,
57   DBG_QUIT,
58 } mrdb_exemode;
59
60 typedef enum mrdb_exephase {
61   DBG_PHASE_BEFORE_RUN,
62   DBG_PHASE_RUNNING,
63   DBG_PHASE_AFTER_RUN,
64   DBG_PHASE_RESTART,
65 } mrdb_exephase;
66
67 typedef enum mrdb_brkmode {
68   BRK_INIT,
69   BRK_BREAK,
70   BRK_STEP,
71   BRK_NEXT,
72   BRK_QUIT,
73 } mrdb_brkmode;
74
75 typedef enum {
76   MRB_DEBUG_BPTYPE_NONE,
77   MRB_DEBUG_BPTYPE_LINE,
78   MRB_DEBUG_BPTYPE_METHOD,
79 } mrb_debug_bptype;
80
81 struct mrb_irep;
82 struct mrbc_context;
83 struct mrb_debug_context;
84
85 typedef struct mrb_debug_linepoint {
86   const char *file;
87   uint16_t lineno;
88 } mrb_debug_linepoint;
89
90 typedef struct mrb_debug_methodpoint {
91   const char *class_name;
92   const char *method_name;
93 } mrb_debug_methodpoint;
94
95 typedef struct mrb_debug_breakpoint {
96   uint32_t bpno;
97   uint8_t enable;
98   mrb_debug_bptype type;
99   union point {
100     mrb_debug_linepoint linepoint;
101     mrb_debug_methodpoint methodpoint;
102   } point;
103 } mrb_debug_breakpoint;
104
105 typedef struct mrb_debug_context {
106   struct mrb_irep *root_irep;
107   struct mrb_irep *irep;
108   mrb_code *pc;
109   mrb_value *regs;
110
111   const char *prvfile;
112   int32_t prvline;
113   mrb_callinfo *prvci;
114
115   mrdb_exemode xm;
116   mrdb_exephase xphase;
117   mrdb_brkmode bm;
118   int16_t bmi;
119
120   uint16_t ccnt;
121   uint16_t scnt;
122
123   mrb_debug_breakpoint bp[MAX_BREAKPOINT];
124   uint32_t bpnum;
125   int32_t next_bpno;
126   int32_t method_bpno;
127   int32_t stopped_bpno;
128   mrb_bool isCfunc;
129
130   mrdb_exemode (*break_hook)(mrb_state *mrb, struct mrb_debug_context *dbg);
131
132 } mrb_debug_context;
133
134 typedef struct mrdb_state {
135   char *command;
136   uint8_t wcnt;
137   uint8_t pi;
138   char *words[MAX_COMMAND_WORD];
139   const char *srcpath;
140   uint32_t print_no;
141
142   mrb_debug_context *dbg;
143 } mrdb_state;
144
145 typedef dbgcmd_state (*debug_command_func)(mrb_state*, mrdb_state*);
146
147 /* cmdrun.c */
148 dbgcmd_state dbgcmd_run(mrb_state*, mrdb_state*);
149 dbgcmd_state dbgcmd_continue(mrb_state*, mrdb_state*);
150 dbgcmd_state dbgcmd_step(mrb_state*, mrdb_state*);
151 dbgcmd_state dbgcmd_next(mrb_state*, mrdb_state*);
152 /* cmdbreak.c */
153 dbgcmd_state dbgcmd_break(mrb_state*, mrdb_state*);
154 dbgcmd_state dbgcmd_info_break(mrb_state*, mrdb_state*);
155 dbgcmd_state dbgcmd_info_local(mrb_state*, mrdb_state*);
156 dbgcmd_state dbgcmd_delete(mrb_state*, mrdb_state*);
157 dbgcmd_state dbgcmd_enable(mrb_state*, mrdb_state*);
158 dbgcmd_state dbgcmd_disable(mrb_state*, mrdb_state*);
159 /* cmdprint.c */
160 dbgcmd_state dbgcmd_print(mrb_state*, mrdb_state*);
161 dbgcmd_state dbgcmd_eval(mrb_state*, mrdb_state*);
162 /* cmdmisc.c */
163 dbgcmd_state dbgcmd_list(mrb_state*, mrdb_state*);
164 dbgcmd_state dbgcmd_help(mrb_state*, mrdb_state*);
165 dbgcmd_state dbgcmd_quit(mrb_state*, mrdb_state*);
166
167 #endif