/* * include/asm-m68k/kgdb.h * * Copyright (C) 1996 Roman Hodek */ #ifndef __ASM_M68k_KGDB_H #define __ASM_M68k_KGDB_H /* * Structure to save all register values in, already in the order gdb wants * it. Note that the upper half of the SR field is recycled for the FORMAT and * VECTOR fields. Hope that doesn't confuse gdb... That upper half is ignored * on exiting the stub, so gdb can modify it as it likes. */ #define GDBREG_A6 14 #define GDBREG_A7 15 #define GDBREG_SP 15 #define GDBREG_SR 16 #define GDBREG_PC 17 #define GDBREG_FP0 18 #define GDBREG_FP7 25 #define GDBREG_FPCR 26 #define GDBREG_FPIAR 28 #define GDBOFFA_D6 (6*4) #define GDBOFFA_A3 (11*4) #define NUMREGSBYTES 180 #ifndef __ASSEMBLY__ struct gdb_regs { long regs[16]; /* d0-a7 */ unsigned format : 4; /* frame format specifier */ unsigned vector : 12; /* vector offset */ unsigned short sr; /* status register */ unsigned long pc; /* program counter */ unsigned long fpregs[8*3]; /* fp0-fp7 */ unsigned long fpcntl[3]; /* fpcr, fpsr, fpiar */ }; extern struct gdb_regs kgdb_registers; extern void kgdb_init( void ); struct frame; extern asmlinkage void enter_kgdb( struct pt_regs *fp ); extern int kgdb_initialized; /* * This function will generate a breakpoint exception. It is used at the * beginning of a program to sync up with a debugger and can be used * otherwise as a quick means to stop program execution and "break" into * the debugger. */ extern inline void breakpoint( void ) { if (!kgdb_initialized) /* if kgdb not inited, do nothing */ return; /* breakpoint instruction is TRAP #15 */ __asm__ __volatile__ ( "trap #15" ); } /* * This function will report a SIGABORT to gdb. */ extern inline void kgdb_abort( void ) { if (!kgdb_initialized) /* if kgdb not inited, do nothing */ return; /* TRAP #14 is reported as SIGABORT */ __asm__ __volatile__ ( "trap #14" ); } #endif /* __ASSEMBLY__ */ #endif /* __ASM_M68k_KGDB_H */