diff options
Diffstat (limited to 'gdb/tdesc.h')
-rwxr-xr-x | gdb/tdesc.h | 329 |
1 files changed, 329 insertions, 0 deletions
diff --git a/gdb/tdesc.h b/gdb/tdesc.h new file mode 100755 index 0000000..3936330 --- /dev/null +++ b/gdb/tdesc.h @@ -0,0 +1,329 @@ +/* This file has been modified by Data General Corporation, November 1989. */ + +#ifndef _tdesc_h +#define _tdesc_h +#ifdef __STDC__ +#define _ARGS(x) x +#else +#define _ARGS(x) () +#endif + +/* + This file provides an abstract interface to "tdesc" information. + It is designed to be used in a uniform manner by several kinds + of debuggers: + (1) code in live debugged process (e.g., a traceback routine) + (2) a separate-process debugger debugging a live process + (3) a separate-process debugger debugging a memory dump + + Dcontext model notes + * captures machine context + * partial: excludes memory + * frames + * kinds + * make one for starters, chain in reverse order to previous ones + * representation: pointer to opaque + * alloc/free protocol + + Overall model + * access functions + * handle + * error handling +*/ + + + +typedef int dc_boolean_t; /* range 0 .. 1 */ +#define DC_FALSE 0 +#define DC_TRUE 1 + + +typedef int dc_tristate_t; /* range 0 .. 2 */ +#define DC_NO 0 +#define DC_YES 1 +#define DC_MAYBE 2 + + +#define DC_MII_PRECEDING_TDESC_END (1<<0) +#define DC_MII_FOLLOWING_TDESC_START (1<<1) + +#define DC_MIO_ENTRY_POINT (1<< 0) +#define DC_MIO_PROLOGUE_END (1<< 1) +#define DC_MIO_EPILOGUE_START (1<< 2) +#define DC_MIO_IMPLICIT_PROLOGUE_END (1<<16) +#define DC_MIO_LITERAL_ENTRY_POINT (1<<17) +#define DC_MIO_LITERAL_EPILOGUE_START (1<<18) + + +/* + A word is 32 bits of information. In memory, a word is word-aligned. + + A common and important use of word_t is to represent values in the + target process, including (byte) addresses in the target process. + In this case, C arithmetic can be used to simulate machine address + arithmetic on the target. (Unsigned arithmetic is actually modulus + arithmetic.) +*/ +typedef unsigned int dc_word_t; + + +/*----------------*/ + + +/* The exactness of locations may not be certainly known. */ +typedef dc_tristate_t dc_exactness_t; + + +/* + The model includes five kinds of contexts. Because each context + has an associated region and frame, these describe region kinds + and frame kinds as well. + [more description needed] + Currently, only call contexts exist. +*/ + +typedef int dc_kind_t; /* range 0 .. 4 */ +#define DC_CALL_KIND 0 +#define DC_SAVE_KIND 1 +#define DC_EXCEPTION_KIND 2 +#define DC_PROTECTION_KIND 3 +#define DC_SPECIAL_KIND 4 +#define DC_NUM_KINDS 5 + + +typedef struct dc_debug_info { + unsigned int protocol; /* 1 for this structure */ + dc_word_t tdesc_ptr; + unsigned int text_words_count; + dc_word_t text_words_ptr; + unsigned int data_words_count; + dc_word_t data_words_ptr; +} dc_debug_info_t; + + +typedef struct dc_mstate { + dc_word_t reg[32]; /* general registers */ + dc_word_t xip; + dc_word_t nip; + dc_word_t fip; + dc_word_t fpsr; + dc_word_t fpcr; + dc_word_t psr; +} dc_mstate_t; + + + +#if 0 + + void error_fcn (env, continuable, message) + dc_word_t env; /* environment (arbitrary datum) */ + boolean_t continuable; /* whether error function may return */ + char *message; /* string (no trailing newline) */ + + /* In the future, we probably want the error_fcn to be: */ + void error_fcn (env, continuable, code, ...) + dc_word_t env; /* environment (arbitrary datum) */ + boolean_t continuable; /* whether error function may return */ + int code; /* error code */ + ... /* parameters to message associated + with the code */ + + void read_fcn (env, memory, length, buffer) + dc_word_t env; /* environment (arbitrary datum) */ + dc_word_t memory; /* start address in image */ + int length; /* in bytes */ + char *buffer; /* start address of buffer */ + /* There are no alignment assumptions for the read function. */ + + void write_fcn (env, memory, length, buffer) + dc_word_t env; /* environment (arbitrary datum) */ + dc_word_t memory; /* start address in image */ + int length; /* in bytes */ + char *buffer; /* start address of buffer */ + /* There are no alignment assumptions for the write function. */ + /* The write function is optional. It must be provided if changes + to writable registers are to be made. */ + + void exec_fcn (env, mstate) + dc_word_t env; /* environment (arbitrary datum) */ + dc_mstate_t *mstate; /* machine state (read-write) */ + /* The execute function is optional. It would be used (in the future) + by the implementation of a procedurally specified tdesc mechanism. */ + +#endif + +/*----------------*/ + + +typedef struct dc_map_info_in { + dc_word_t flags; + dc_word_t preceding_tdesc_end; + dc_word_t following_tdesc_start; +} dc_map_info_in_t; + + +typedef struct dc_map_info_out { + dc_word_t flags; + dc_word_t entry_point; + dc_word_t prologue_end; + dc_word_t epilogue_start; +} dc_map_info_out_t; + + +typedef void *dc_handle_t; + +typedef void (*tdesc_error_fcn_type) _ARGS(( + dc_word_t env, /* environment (arbitrary datum) */ + dc_boolean_t continuable, /* whether error function may return */ + const char *message /* string (no trailing newline) */ +)); +typedef void (*tdesc_io_fcn_type) _ARGS(( + dc_word_t env, /* environment (arbitrary datum) */ + dc_word_t memory, /* start address in image */ + int length, /* in bytes */ + void *buffer /* start address of buffer */ +)); +typedef void (*tdesc_exec_fcn_type) _ARGS(( + dc_word_t env, /* environment (arbitrary datum) */ + dc_mstate_t *mstate /* machine state (read-write) */ +)); +typedef void (*tdesc_map_fcn_type) _ARGS(( + dc_word_t map_env, + dc_word_t loc, + dc_map_info_in_t map_info_in, + dc_map_info_out_t *map_info_out +)); + + +extern dc_handle_t dc_initiate _ARGS(( + dc_word_t debug_info_ptr, + tdesc_error_fcn_type error_fcn, + dc_word_t error_env, + tdesc_io_fcn_type read_fcn, + dc_word_t read_env, + tdesc_io_fcn_type write_fcn, /* NULL => absent */ + dc_word_t write_env, + tdesc_exec_fcn_type exec_fcn, /* NULL => absent */ + dc_word_t exec_env, + tdesc_map_fcn_type map_fcn, /* NULL => absent */ + dc_word_t map_env +)); +extern void dc_terminate _ARGS(( + dc_handle_t handle +)); + +typedef int dc_register_state_t; /* range 0 to 2 */ + +#define DC_INVALID 0 +#define DC_READABLE 1 +#define DC_WRITABLE 2 + +#define DC_NUM_REG 32 + +#define DC_AUX_LOC 0 +#define DC_AUX_SXIP 1 +#define DC_AUX_SNIP 2 +#define DC_AUX_SFIP 3 +#define DC_AUX_FPSR 4 +#define DC_AUX_FPCR 5 +#define DC_NUM_AUX 6 + + +typedef void *dc_dcontext_t; + +extern dc_dcontext_t dc_make_dcontext _ARGS(( + dc_handle_t handle, + dc_word_t reg_info[DC_NUM_REG], + dc_word_t reg_flags[2], + dc_word_t aux_info[DC_NUM_AUX], + dc_word_t aux_flags[2], + dc_exactness_t loc_exact, + dc_word_t psr_info, + dc_boolean_t psr_ind, + dc_word_t psr_flags[2] +)); +extern void dc_free_dcontext _ARGS(( + dc_dcontext_t dcontext +)); +extern dc_register_state_t dc_location_state _ARGS(( + dc_dcontext_t dcontext +)); +extern dc_exactness_t dc_location_exactness _ARGS(( + dc_dcontext_t dcontext +)); +extern dc_word_t dc_location _ARGS(( + dc_dcontext_t dcontext +)); +extern void dc_set_location _ARGS(( + dc_dcontext_t dcontext, + dc_word_t value +)); +extern dc_register_state_t dc_general_register_state _ARGS(( + dc_dcontext_t dcontext, + int reg +)); +extern dc_word_t dc_general_register _ARGS(( + dc_dcontext_t dcontext, + int reg +)); +extern void dc_set_general_register _ARGS(( + dc_dcontext_t dcontext, + int reg, + dc_word_t value +)); +extern dc_register_state_t dc_auxiliary_register_state _ARGS(( + dc_dcontext_t dcontext, + int reg +)); +extern dc_word_t dc_auxiliary_register _ARGS(( + dc_dcontext_t dcontext, + int reg +)); +extern void dc_set_auxiliary_register _ARGS(( + dc_dcontext_t dcontext, + int reg, + dc_word_t value +)); +extern dc_register_state_t dc_psr_register_bit_state _ARGS(( + dc_dcontext_t dcontext, + int bit +)); +extern dc_word_t dc_psr_register _ARGS(( + dc_dcontext_t dcontext +)); +extern void dc_set_psr_register _ARGS(( + dc_dcontext_t dcontext, + dc_word_t mask, + dc_word_t value +)); +extern dc_word_t dc_frame_address _ARGS(( + dc_dcontext_t dcontext +)); +extern dc_kind_t dc_context_kind _ARGS(( + dc_dcontext_t dcontext +)); +extern dc_register_state_t dc_return_address_state _ARGS(( + dc_dcontext_t dcontext +)); +extern dc_exactness_t dc_return_address_exactness _ARGS(( + dc_dcontext_t dcontext +)); +extern dc_word_t dc_return_address _ARGS(( + dc_dcontext_t dcontext +)); +extern void dc_set_return_address _ARGS(( + dc_dcontext_t dcontext, + dc_word_t value +)); +extern void dc_get_exception_info(); +extern void dc_get_protection_info(); +extern void dc_get_special_info(); +extern dc_dcontext_t dc_previous_dcontext _ARGS(( + dc_dcontext_t dcontext +)); +extern dc_boolean_t dc_location_in_text_chunk _ARGS(( + dc_dcontext_t dcontext, + dc_word_t value +)); + +#endif |