linux/arch/sparc/include/asm/kdebug_32.h
<<
>>
Prefs
   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
  26typedef unsigned int (*debugger_funct)(void);
  27
  28struct 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
  46extern struct kernel_debug *linux_dbvec;
  47
  48/* Use this macro in C-code to enter the debugger. */
  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
  61enum 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