| /* |
| * kdebug.h: Defines and definitions for debugging the Linux kernel |
| * under various kernel debuggers. |
| * |
| * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu) |
| */ |
| #ifndef _SPARC_KDEBUG_H |
| #define _SPARC_KDEBUG_H |
| |
| #include <asm/openprom.h> |
| #include <asm/vaddrs.h> |
| |
| /* Breakpoints are enter through trap table entry 126. So in sparc assembly |
| * if you want to drop into the debugger you do: |
| * |
| * t DEBUG_BP_TRAP |
| */ |
| |
| #define DEBUG_BP_TRAP 126 |
| |
| #ifndef __ASSEMBLY__ |
| /* The debug vector is passed in %o1 at boot time. It is a pointer to |
| * a structure in the debuggers address space. Here is its format. |
| */ |
| |
| typedef unsigned int (*debugger_funct)(void); |
| |
| struct kernel_debug { |
| /* First the entry point into the debugger. You jump here |
| * to give control over to the debugger. |
| */ |
| unsigned long kdebug_entry; |
| unsigned long kdebug_trapme; /* Figure out later... */ |
| /* The following is the number of pages that the debugger has |
| * taken from to total pool. |
| */ |
| unsigned long *kdebug_stolen_pages; |
| /* Ok, after you remap yourself and/or change the trap table |
| * from what you were left with at boot time you have to call |
| * this synchronization function so the debugger can check out |
| * what you have done. |
| */ |
| debugger_funct teach_debugger; |
| }; /* I think that is it... */ |
| |
| extern struct kernel_debug *linux_dbvec; |
| |
| /* Use this macro in C-code to enter the debugger. */ |
| static inline void sp_enter_debugger(void) |
| { |
| __asm__ __volatile__("jmpl %0, %%o7\n\t" |
| "nop\n\t" : : |
| "r" (linux_dbvec) : "o7", "memory"); |
| } |
| |
| #define SP_ENTER_DEBUGGER do { \ |
| if((linux_dbvec!=0) && ((*(short *)linux_dbvec)!=-1)) \ |
| sp_enter_debugger(); \ |
| } while(0) |
| |
| enum die_val { |
| DIE_UNUSED, |
| DIE_OOPS, |
| }; |
| |
| #endif /* !(__ASSEMBLY__) */ |
| |
| /* Some nice offset defines for assembler code. */ |
| #define KDEBUG_ENTRY_OFF 0x0 |
| #define KDEBUG_DUNNO_OFF 0x4 |
| #define KDEBUG_DUNNO2_OFF 0x8 |
| #define KDEBUG_TEACH_OFF 0xc |
| |
| #endif /* !(_SPARC_KDEBUG_H) */ |