]> Git Repo - binutils.git/blob - gdb/tdesc.h
ansi name abuse changes
[binutils.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.041188 seconds and 4 git commands to generate.