diff options
Diffstat (limited to 'libgloss/debug.h')
-rw-r--r-- | libgloss/debug.h | 150 |
1 files changed, 150 insertions, 0 deletions
diff --git a/libgloss/debug.h b/libgloss/debug.h new file mode 100644 index 0000000..9535341 --- /dev/null +++ b/libgloss/debug.h @@ -0,0 +1,150 @@ +/* + * Copyright (c) 1995, 1996 Cygnus Support + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +static const char hexchars[]="0123456789abcdef"; + +typedef void (*exception_t)(int); /* pointer to function with int parm */ + +/* + * This is the default function handler to be called with all exceptions. + */ +extern exception_t default_trap_hook; + +/* this is used to make Unix style signale nukbers to an exception */ +struct trap_info +{ + unsigned char tt; /* exception number */ + unsigned char signo; /* corresponding signal number */ +}; + +/* + * prototypes for the functions in debug.c. As these'll only be used with GCC, + * we don't worry about no stinkin K&R comilers. + */ +extern void exception_handler (int, unsigned long); +extern unsigned char *mem2hex(unsigned char *, unsigned char *, int, int); +extern unsigned char *hex2mem(unsigned char *, unsigned char *, int, int); +extern void getpacket(unsigned char *); +extern void putpacket(unsigned char *); +extern char *make_return_packet(int); +extern void set_debug_traps(); +extern int computeSignal(int); +extern char digit2hex(int); +extern int hex2digit(int); +extern void debuglogs(int level, char *msg); +extern int hex2int(); +extern char *int2hex(int); +extern void gdb_event_loop(int, unsigned long *); + +extern char *gdb_read_registers(); /* g - read registers */ +extern char *gdb_write_registers(char *); /* G - write registers */ +extern char *gdb_read_memory(long, int); /* m - read memory */ +extern char *gdb_write_memory(long, int, char *);/* M write memory */ +extern char *gdb_continue(int, long ); /* c - continue */ +extern char *gdb_step(int, long); /* s - step instruction(s) */ +extern char *gdb_kill(); /* k - kill program */ +extern char *gdb_last_signal(); /* ? - last signal */ +extern char *gdb_baudrate(int); /* b - change baud rate */ +extern char *gdb_dump_state(); /* T - dump state */ +extern char *gdb_set_thread(int, int); /* H - set thread */ +extern char *gdb_detach(); /* D - detach */ +extern char *gdb_read_reg(int); /* p - read one register */ +extern char *gdb_write_reg(int, long); /* P - write one register */ +extern char *gdb_exited(); /* W - process exited */ +extern char *gdb_terminated(); /* X - process terminated */ +extern char *gdb_hex(); /* O - hex encoding */ +extern char *gdb_thread_alive(int); /* A - tread alive request */ +extern char *gdb_extended(); /* ! - extended protocol */ +extern char *gdb_debug(); /* d - toggle stub diagnostics */ +extern char *gdb_toggle(); /* unsupported, toggle stub on/off */ +extern char *gdb_reset(); /* r - reset target */ +extern char *gdb_search(long, long, long); /* t - search backwards */ +extern char *gdb_query(char *); /* q - general query */ +extern char *gdb_set(char *); /* Q - set value */ + +/* + * indicate to caller of mem2hex or hex2mem that there has been an error. + * 0 means ok, 1 means error + */ +extern int mem_err; + +/* + * indicate whether the debug vectors have been initialized + * 0 means not yet, 1 means yep, it's ready. + */ +extern int initialized; + +/* + * 1 means print debugging messages from the target, 0 means be quiet. + */ +extern int remote_debug; + +/* + * Set up the command processing required for GDB + */ + +struct gdb_ops { + /* + * these functions are the most minimal working subset top get full + * functionality for remote debugging + */ + char *(*gdb_read_registers); /* g - read registers */ + char *(*gdb_write_registers)(char *); /* G - write registers */ + char *(*gdb_read_memory)(long, int); /* m - read memory */ + char *(*gdb_write_memory)(long, int, char *);/* M write memory */ + char *(*gdb_continue)(int, long ); /* c - continue */ + char *(*gdb_step)(int, long); /* s - step instruction(s) */ + char *(*gdb_kill); /* k - kill program */ + char *(*gdb_last_signal); /* ? - last signal */ + char *(*gdb_baudrate)(int); /* b - change baud rate */ + char *(*gdb_dump_state); /* T - dump state */ + /* + * these functions are for a more sophisticated target, typically + * running a simple RTOS. + */ + char *(*gdb_set_thread)(int, int); /* H - set thread */ + char *(*gdb_detach); /* D - detach */ + char *(*gdb_read_reg)(int); /* p - read one register */ + char *(*gdb_write_reg)(int, long); /* P - write one register */ + char *(*gdb_exited); /* W - process exited */ + char *(*gdb_terminated); /* X - process terminated */ + char *(*gdb_hex); /* O - hex encoding */ + char *(*gdb_thread_alive)(int); /* A - tread alive request */ + /* FIXME: not standard yet */ + char *(*gdb_extended); /* ! - extended protocol */ + char *(*gdb_debug); /* d - toggle stub diagnostics */ + char *(*gdb_toggle); /* unsupported, toggle stub on/off */ + char *(*gdb_reset); /* r - reset target */ + char *(*gdb_search)(long, long, long); /* t - search backwards */ + char *(*gdb_query)(char *); /* q - general query */ + char *(*gdb_set)(long); /* Q - set value */ +}; + +/* + * BUFMAX defines the maximum number of characters in inbound/outbound buffers + * at least NUMREGBYTES*2 are needed for register packets + */ +#define BUFMAX 2048 +extern char packet_in_buf[BUFMAX]; +extern char packet_out_buf[BUFMAX]; +extern int packet_index; + +#define DEBUG(x, y) debuglog(x, y); +#define set_debug_level(x) remote_debug = x; +#define OK 0 +#define ERROR -1 +#define ENN(x) "x" + +#define MAY_FAULT 1 +#define NO_FAULT 0 |