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