* stabs.texinfo: Document the format for C++ nested types.
[deliverable/binutils-gdb.git] / gdb / tdesc.h
1 /* This file has been modified by Data General Corporation, November 1989. */
2
3 #ifndef _tdesc_h
4 #define _tdesc_h
5 #ifdef __STDC__
6 #define _ARGS(x) x
7 #else
8 #define _ARGS(x) ()
9 #endif
10
11 /*
12 This file provides an abstract interface to "tdesc" information.
13 It is designed to be used in a uniform manner by several kinds
14 of debuggers:
15 (1) code in live debugged process (e.g., a traceback routine)
16 (2) a separate-process debugger debugging a live process
17 (3) a separate-process debugger debugging a memory dump
18
19 Dcontext model notes
20 * captures machine context
21 * partial: excludes memory
22 * frames
23 * kinds
24 * make one for starters, chain in reverse order to previous ones
25 * representation: pointer to opaque
26 * alloc/free protocol
27
28 Overall model
29 * access functions
30 * handle
31 * error handling
32 */
33
34
35
36 typedef int dc_boolean_t; /* range 0 .. 1 */
37 #define DC_FALSE 0
38 #define DC_TRUE 1
39
40
41 typedef int dc_tristate_t; /* range 0 .. 2 */
42 #define DC_NO 0
43 #define DC_YES 1
44 #define DC_MAYBE 2
45
46
47 #define DC_MII_PRECEDING_TDESC_END (1<<0)
48 #define DC_MII_FOLLOWING_TDESC_START (1<<1)
49
50 #define DC_MIO_ENTRY_POINT (1<< 0)
51 #define DC_MIO_PROLOGUE_END (1<< 1)
52 #define DC_MIO_EPILOGUE_START (1<< 2)
53 #define DC_MIO_IMPLICIT_PROLOGUE_END (1<<16)
54 #define DC_MIO_LITERAL_ENTRY_POINT (1<<17)
55 #define DC_MIO_LITERAL_EPILOGUE_START (1<<18)
56
57
58 /*
59 A word is 32 bits of information. In memory, a word is word-aligned.
60
61 A common and important use of word_t is to represent values in the
62 target process, including (byte) addresses in the target process.
63 In this case, C arithmetic can be used to simulate machine address
64 arithmetic on the target. (Unsigned arithmetic is actually modulus
65 arithmetic.)
66 */
67 typedef unsigned int dc_word_t;
68
69
70 /*----------------*/
71
72
73 /* The exactness of locations may not be certainly known. */
74 typedef dc_tristate_t dc_exactness_t;
75
76
77 /*
78 The model includes five kinds of contexts. Because each context
79 has an associated region and frame, these describe region kinds
80 and frame kinds as well.
81 [more description needed]
82 Currently, only call contexts exist.
83 */
84
85 typedef int dc_kind_t; /* range 0 .. 4 */
86 #define DC_CALL_KIND 0
87 #define DC_SAVE_KIND 1
88 #define DC_EXCEPTION_KIND 2
89 #define DC_PROTECTION_KIND 3
90 #define DC_SPECIAL_KIND 4
91 #define DC_NUM_KINDS 5
92
93
94 typedef struct dc_debug_info {
95 unsigned int protocol; /* 1 for this structure */
96 dc_word_t tdesc_ptr;
97 unsigned int text_words_count;
98 dc_word_t text_words_ptr;
99 unsigned int data_words_count;
100 dc_word_t data_words_ptr;
101 } dc_debug_info_t;
102
103
104 typedef struct dc_mstate {
105 dc_word_t reg[32]; /* general registers */
106 dc_word_t xip;
107 dc_word_t nip;
108 dc_word_t fip;
109 dc_word_t fpsr;
110 dc_word_t fpcr;
111 dc_word_t psr;
112 } dc_mstate_t;
113
114
115
116 #if 0
117
118 void error_fcn (env, continuable, message)
119 dc_word_t env; /* environment (arbitrary datum) */
120 boolean_t continuable; /* whether error function may return */
121 char *message; /* string (no trailing newline) */
122
123 /* In the future, we probably want the error_fcn to be: */
124 void error_fcn (env, continuable, code, ...)
125 dc_word_t env; /* environment (arbitrary datum) */
126 boolean_t continuable; /* whether error function may return */
127 int code; /* error code */
128 ... /* parameters to message associated
129 with the code */
130
131 void read_fcn (env, memory, length, buffer)
132 dc_word_t env; /* environment (arbitrary datum) */
133 dc_word_t memory; /* start address in image */
134 int length; /* in bytes */
135 char *buffer; /* start address of buffer */
136 /* There are no alignment assumptions for the read function. */
137
138 void write_fcn (env, memory, length, buffer)
139 dc_word_t env; /* environment (arbitrary datum) */
140 dc_word_t memory; /* start address in image */
141 int length; /* in bytes */
142 char *buffer; /* start address of buffer */
143 /* There are no alignment assumptions for the write function. */
144 /* The write function is optional. It must be provided if changes
145 to writable registers are to be made. */
146
147 void exec_fcn (env, mstate)
148 dc_word_t env; /* environment (arbitrary datum) */
149 dc_mstate_t *mstate; /* machine state (read-write) */
150 /* The execute function is optional. It would be used (in the future)
151 by the implementation of a procedurally specified tdesc mechanism. */
152
153 #endif
154
155 /*----------------*/
156
157
158 typedef struct dc_map_info_in {
159 dc_word_t flags;
160 dc_word_t preceding_tdesc_end;
161 dc_word_t following_tdesc_start;
162 } dc_map_info_in_t;
163
164
165 typedef struct dc_map_info_out {
166 dc_word_t flags;
167 dc_word_t entry_point;
168 dc_word_t prologue_end;
169 dc_word_t epilogue_start;
170 } dc_map_info_out_t;
171
172
173 typedef void *dc_handle_t;
174
175 typedef void (*tdesc_error_fcn_type) _ARGS((
176 dc_word_t env, /* environment (arbitrary datum) */
177 dc_boolean_t continuable, /* whether error function may return */
178 const char *message /* string (no trailing newline) */
179 ));
180 typedef void (*tdesc_io_fcn_type) _ARGS((
181 dc_word_t env, /* environment (arbitrary datum) */
182 dc_word_t memory, /* start address in image */
183 int length, /* in bytes */
184 void *buffer /* start address of buffer */
185 ));
186 typedef void (*tdesc_exec_fcn_type) _ARGS((
187 dc_word_t env, /* environment (arbitrary datum) */
188 dc_mstate_t *mstate /* machine state (read-write) */
189 ));
190 typedef void (*tdesc_map_fcn_type) _ARGS((
191 dc_word_t map_env,
192 dc_word_t loc,
193 dc_map_info_in_t map_info_in,
194 dc_map_info_out_t *map_info_out
195 ));
196
197
198 extern dc_handle_t dc_initiate _ARGS((
199 dc_word_t debug_info_ptr,
200 tdesc_error_fcn_type error_fcn,
201 dc_word_t error_env,
202 tdesc_io_fcn_type read_fcn,
203 dc_word_t read_env,
204 tdesc_io_fcn_type write_fcn, /* NULL => absent */
205 dc_word_t write_env,
206 tdesc_exec_fcn_type exec_fcn, /* NULL => absent */
207 dc_word_t exec_env,
208 tdesc_map_fcn_type map_fcn, /* NULL => absent */
209 dc_word_t map_env
210 ));
211 extern void dc_terminate _ARGS((
212 dc_handle_t handle
213 ));
214
215 typedef int dc_register_state_t; /* range 0 to 2 */
216
217 #define DC_INVALID 0
218 #define DC_READABLE 1
219 #define DC_WRITABLE 2
220
221 #define DC_NUM_REG 32
222
223 #define DC_AUX_LOC 0
224 #define DC_AUX_SXIP 1
225 #define DC_AUX_SNIP 2
226 #define DC_AUX_SFIP 3
227 #define DC_AUX_FPSR 4
228 #define DC_AUX_FPCR 5
229 #define DC_NUM_AUX 6
230
231
232 typedef void *dc_dcontext_t;
233
234 extern dc_dcontext_t dc_make_dcontext _ARGS((
235 dc_handle_t handle,
236 dc_word_t reg_info[DC_NUM_REG],
237 dc_word_t reg_flags[2],
238 dc_word_t aux_info[DC_NUM_AUX],
239 dc_word_t aux_flags[2],
240 dc_exactness_t loc_exact,
241 dc_word_t psr_info,
242 dc_boolean_t psr_ind,
243 dc_word_t psr_flags[2]
244 ));
245 extern void dc_free_dcontext _ARGS((
246 dc_dcontext_t dcontext
247 ));
248 extern dc_register_state_t dc_location_state _ARGS((
249 dc_dcontext_t dcontext
250 ));
251 extern dc_exactness_t dc_location_exactness _ARGS((
252 dc_dcontext_t dcontext
253 ));
254 extern dc_word_t dc_location _ARGS((
255 dc_dcontext_t dcontext
256 ));
257 extern void dc_set_location _ARGS((
258 dc_dcontext_t dcontext,
259 dc_word_t value
260 ));
261 extern dc_register_state_t dc_general_register_state _ARGS((
262 dc_dcontext_t dcontext,
263 int reg
264 ));
265 extern dc_word_t dc_general_register _ARGS((
266 dc_dcontext_t dcontext,
267 int reg
268 ));
269 extern void dc_set_general_register _ARGS((
270 dc_dcontext_t dcontext,
271 int reg,
272 dc_word_t value
273 ));
274 extern dc_register_state_t dc_auxiliary_register_state _ARGS((
275 dc_dcontext_t dcontext,
276 int reg
277 ));
278 extern dc_word_t dc_auxiliary_register _ARGS((
279 dc_dcontext_t dcontext,
280 int reg
281 ));
282 extern void dc_set_auxiliary_register _ARGS((
283 dc_dcontext_t dcontext,
284 int reg,
285 dc_word_t value
286 ));
287 extern dc_register_state_t dc_psr_register_bit_state _ARGS((
288 dc_dcontext_t dcontext,
289 int bit
290 ));
291 extern dc_word_t dc_psr_register _ARGS((
292 dc_dcontext_t dcontext
293 ));
294 extern void dc_set_psr_register _ARGS((
295 dc_dcontext_t dcontext,
296 dc_word_t mask,
297 dc_word_t value
298 ));
299 extern dc_word_t dc_frame_address _ARGS((
300 dc_dcontext_t dcontext
301 ));
302 extern dc_kind_t dc_context_kind _ARGS((
303 dc_dcontext_t dcontext
304 ));
305 extern dc_register_state_t dc_return_address_state _ARGS((
306 dc_dcontext_t dcontext
307 ));
308 extern dc_exactness_t dc_return_address_exactness _ARGS((
309 dc_dcontext_t dcontext
310 ));
311 extern dc_word_t dc_return_address _ARGS((
312 dc_dcontext_t dcontext
313 ));
314 extern void dc_set_return_address _ARGS((
315 dc_dcontext_t dcontext,
316 dc_word_t value
317 ));
318 extern void dc_get_exception_info();
319 extern void dc_get_protection_info();
320 extern void dc_get_special_info();
321 extern dc_dcontext_t dc_previous_dcontext _ARGS((
322 dc_dcontext_t dcontext
323 ));
324 extern dc_boolean_t dc_location_in_text_chunk _ARGS((
325 dc_dcontext_t dcontext,
326 dc_word_t value
327 ));
328
329 #endif
This page took 0.046378 seconds and 4 git commands to generate.