comparison debug.h @ 2362:b6c5a0fa3dfc

Refactor debugger a bit. Allow types other than integers to be passed in expressions and stored in arrays. Better namespace support
author Michael Pavone <pavone@retrodev.com>
date Mon, 06 Nov 2023 22:41:33 -0800
parents 3350b3c8faa8
children b865f33fd47e
comparison
equal deleted inserted replaced
2361:3350b3c8faa8 2362:b6c5a0fa3dfc
37 EXPR_NONE, 37 EXPR_NONE,
38 EXPR_SCALAR, 38 EXPR_SCALAR,
39 EXPR_UNARY, 39 EXPR_UNARY,
40 EXPR_BINARY, 40 EXPR_BINARY,
41 EXPR_SIZE, 41 EXPR_SIZE,
42 EXPR_MEM 42 EXPR_MEM,
43 EXPR_NAMESPACE
43 } expr_type; 44 } expr_type;
44 45
45 typedef struct expr expr; 46 typedef struct expr expr;
46 47
47 struct expr { 48 struct expr {
49 expr *left; 50 expr *left;
50 expr *right; 51 expr *right;
51 token op; 52 token op;
52 }; 53 };
53 54
55 enum {
56 DBG_VAL_U32,
57 DBG_VAL_F32,
58 DBG_VAL_ARRAY,
59 DBG_VAL_STRING,
60 DBG_VAL_FUNC
61 };
62
54 typedef struct { 63 typedef struct {
55 char *raw; 64 union {
56 expr *parsed; 65 uint32_t u32;
57 uint32_t value; 66 float f32;
67 } v;
68 uint32_t type;
69 } debug_val;
70
71 typedef struct {
72 char *raw;
73 expr *parsed;
74 debug_val value;
58 } command_arg; 75 } command_arg;
59 76
60 typedef struct debug_root debug_root; 77 typedef struct debug_root debug_root;
61 typedef struct parsed_command parsed_command; 78 typedef struct parsed_command parsed_command;
62 typedef uint8_t (*cmd_fun)(debug_root *root, parsed_command *cmd); 79 typedef uint8_t (*cmd_fun)(debug_root *root, parsed_command *cmd);
115 uint32_t mask; 132 uint32_t mask;
116 uint8_t type; 133 uint8_t type;
117 } bp_def; 134 } bp_def;
118 135
119 typedef struct debug_array debug_array; 136 typedef struct debug_array debug_array;
120 typedef uint32_t (*debug_array_get)(debug_root *root, debug_array *array, uint32_t index); 137 typedef debug_val (*debug_array_get)(debug_array *array, uint32_t index);
121 typedef void (*debug_array_set)(debug_root *root, debug_array *array, uint32_t index, uint32_t value); 138 typedef void (*debug_array_set)(debug_array *array, uint32_t index, debug_val value);
122 typedef void (*debug_array_append)(debug_root *root, debug_array *array, uint32_t value); 139 typedef void (*debug_array_append)(debug_array *array, debug_val value);
123 140
124 struct debug_array{ 141 struct debug_array{
125 debug_array_get get; 142 debug_array_get get;
126 debug_array_set set; 143 debug_array_set set;
127 debug_array_append append; 144 debug_array_append append;
128 uint32_t *data; 145 void *base;
129 uint32_t size; 146 uint32_t size;
130 uint32_t storage; 147 uint32_t storage;
131 }; 148 };
132 149
133 typedef uint8_t (*resolver)(debug_root *root, const char *name, uint32_t *out); 150 typedef struct debug_var debug_var;
134 typedef debug_array* (*array_resolver)(debug_root *root, const char *name); 151 typedef debug_val (*debug_var_get)(debug_var *var);
135 typedef uint8_t (*setter)(debug_root *root, const char *name, uint32_t value); 152 typedef void (*debug_var_set)(debug_var *var, debug_val val);
153
154 struct debug_var {
155 debug_var_get get;
156 debug_var_set set;
157 void *ptr;
158 debug_val val;
159 };
160
161 typedef debug_var *(*resolver)(debug_root *root, const char *name);
136 typedef uint8_t (*reader)(debug_root *root, uint32_t *out, char size); 162 typedef uint8_t (*reader)(debug_root *root, uint32_t *out, char size);
137 typedef uint8_t (*writer)(debug_root *root, uint32_t address, uint32_t value, char size); 163 typedef uint8_t (*writer)(debug_root *root, uint32_t address, uint32_t value, char size);
138 164
139 struct debug_root { 165 struct debug_root {
140 void *cpu_context; 166 void *cpu_context;
141 bp_def *breakpoints; 167 bp_def *breakpoints;
142 disp_def *displays; 168 disp_def *displays;
143 tern_node *commands; 169 tern_node *commands;
170 tern_node *variables;
144 tern_node *symbols; 171 tern_node *symbols;
145 tern_node *variables; 172 tern_node *other_roots;
146 tern_node *arrays;
147 disasm_context *disasm; 173 disasm_context *disasm;
148 resolver resolve;
149 array_resolver array_resolve;
150 reader read_mem; 174 reader read_mem;
151 setter set;
152 writer write_mem; 175 writer write_mem;
153 parsed_command last_cmd; 176 parsed_command last_cmd;
154 uint32_t bp_index; 177 uint32_t bp_index;
155 uint32_t disp_index; 178 uint32_t disp_index;
156 uint32_t branch_t; 179 uint32_t branch_t;