1 /* 2 * kdebug.h: Defines and definitions for debugging the Linux kernel 3 * under various kernel debuggers. 4 * 5 * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) 6 */ 7 #ifndef _SPARC_KDEBUG_H 8 #define _SPARC_KDEBUG_H 9 10 #include <asm/openprom.h> 11 #include <asm/vaddrs.h> 12 13 /* Breakpoints are enter through trap table entry 126. So in sparc assembly 14 * if you want to drop into the debugger you do: 15 * 16 * t DEBUG_BP_TRAP 17 */ 18 19 #define DEBUG_BP_TRAP 126 20 21 #ifndef __ASSEMBLY__ 22 /* The debug vector is passed in %o1 at boot time. It is a pointer to 23 * a structure in the debuggers address space. Here is its format. 24 */ 25 26 typedef unsigned int (*debugger_funct)(void); 27 28 struct kernel_debug { 29 /* First the entry point into the debugger. You jump here 30 * to give control over to the debugger. 31 */ 32 unsigned long kdebug_entry; 33 unsigned long kdebug_trapme; /* Figure out later... */ 34 /* The following is the number of pages that the debugger has 35 * taken from to total pool. 36 */ 37 unsigned long *kdebug_stolen_pages; 38 /* Ok, after you remap yourself and/or change the trap table 39 * from what you were left with at boot time you have to call 40 * this synchronization function so the debugger can check out 41 * what you have done. 42 */ 43 debugger_funct teach_debugger; 44 }; /* I think that is it... */ 45 46 extern struct kernel_debug *linux_dbvec; 47 48 /* Use this macro in C-code to enter the debugger. */ sp_enter_debugger(void)49static inline void sp_enter_debugger(void) 50 { 51 __asm__ __volatile__("jmpl %0, %%o7\n\t" 52 "nop\n\t" : : 53 "r" (linux_dbvec) : "o7", "memory"); 54 } 55 56 #define SP_ENTER_DEBUGGER do { \ 57 if((linux_dbvec!=0) && ((*(short *)linux_dbvec)!=-1)) \ 58 sp_enter_debugger(); \ 59 } while(0) 60 61 enum die_val { 62 DIE_UNUSED, 63 DIE_OOPS, 64 }; 65 66 #endif /* !(__ASSEMBLY__) */ 67 68 /* Some nice offset defines for assembler code. */ 69 #define KDEBUG_ENTRY_OFF 0x0 70 #define KDEBUG_DUNNO_OFF 0x4 71 #define KDEBUG_DUNNO2_OFF 0x8 72 #define KDEBUG_TEACH_OFF 0xc 73 74 #endif /* !(_SPARC_KDEBUG_H) */ 75