1*4882a593Smuzhiyun #ifndef __KGDB_H__ 2*4882a593Smuzhiyun #define __KGDB_H__ 3*4882a593Smuzhiyun 4*4882a593Smuzhiyun #include <asm/ptrace.h> 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #define KGDBERR_BADPARAMS 1 7*4882a593Smuzhiyun #define KGDBERR_NOTHEXDIG 2 8*4882a593Smuzhiyun #define KGDBERR_MEMFAULT 3 9*4882a593Smuzhiyun #define KGDBERR_NOSPACE 4 10*4882a593Smuzhiyun #define KGDBERR_ALIGNFAULT 5 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define KGDBDATA_MAXREGS 8 13*4882a593Smuzhiyun #define KGDBDATA_MAXPRIV 8 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun #define KGDBEXIT_TYPEMASK 0xff 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun #define KGDBEXIT_KILL 0 18*4882a593Smuzhiyun #define KGDBEXIT_CONTINUE 1 19*4882a593Smuzhiyun #define KGDBEXIT_SINGLE 2 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun #define KGDBEXIT_WITHADDR 0x100 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun typedef 24*4882a593Smuzhiyun struct { 25*4882a593Smuzhiyun int num; 26*4882a593Smuzhiyun unsigned long val; 27*4882a593Smuzhiyun } 28*4882a593Smuzhiyun kgdb_reg; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun typedef 31*4882a593Smuzhiyun struct { 32*4882a593Smuzhiyun int sigval; 33*4882a593Smuzhiyun int extype; 34*4882a593Smuzhiyun unsigned long exaddr; 35*4882a593Smuzhiyun int nregs; 36*4882a593Smuzhiyun kgdb_reg regs[KGDBDATA_MAXREGS]; 37*4882a593Smuzhiyun unsigned long private[KGDBDATA_MAXPRIV]; 38*4882a593Smuzhiyun } 39*4882a593Smuzhiyun kgdb_data; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun /* these functions are provided by the generic kgdb support */ 42*4882a593Smuzhiyun extern void kgdb_init(void); 43*4882a593Smuzhiyun extern void kgdb_error(int); 44*4882a593Smuzhiyun extern int kgdb_output_string(const char *, unsigned int); 45*4882a593Smuzhiyun extern void breakpoint(void); 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun /* these functions are provided by the platform specific kgdb support */ 48*4882a593Smuzhiyun extern void kgdb_flush_cache_range(void *, void *); 49*4882a593Smuzhiyun extern void kgdb_flush_cache_all(void); 50*4882a593Smuzhiyun extern int kgdb_setjmp(long *); 51*4882a593Smuzhiyun extern void kgdb_longjmp(long *, int); 52*4882a593Smuzhiyun extern void kgdb_enter(struct pt_regs *, kgdb_data *); 53*4882a593Smuzhiyun extern void kgdb_exit(struct pt_regs *, kgdb_data *); 54*4882a593Smuzhiyun extern int kgdb_getregs(struct pt_regs *, char *, int); 55*4882a593Smuzhiyun extern void kgdb_putreg(struct pt_regs *, int, char *, int); 56*4882a593Smuzhiyun extern void kgdb_putregs(struct pt_regs *, char *, int); 57*4882a593Smuzhiyun extern int kgdb_trap(struct pt_regs *); 58*4882a593Smuzhiyun extern void kgdb_breakpoint(int argc, char * const argv[]); 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun /* these functions are provided by the platform serial driver */ 61*4882a593Smuzhiyun extern void kgdb_serial_init(void); 62*4882a593Smuzhiyun extern int getDebugChar(void); 63*4882a593Smuzhiyun extern void putDebugChar(int); 64*4882a593Smuzhiyun extern void putDebugStr(const char *); 65*4882a593Smuzhiyun extern void kgdb_interruptible(int); 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun /* this is referenced in the trap handler for the platform */ 68*4882a593Smuzhiyun extern int (*debugger_exception_handler)(struct pt_regs *); 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #endif /* __KGDB_H__ */ 71