kgdb.h 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. /* $Id: kgdb.h,v 1.8 1998/01/07 06:33:44 baccala Exp $
  2. * kgdb.h: Defines and declarations for serial line source level
  3. * remote debugging of the Linux kernel using gdb.
  4. *
  5. * Copyright (C) 1995 David S. Miller (davem@caip.rutgers.edu)
  6. */
  7. #ifndef _SPARC_KGDB_H
  8. #define _SPARC_KGDB_H
  9. #ifndef __ASSEMBLY__
  10. /* To init the kgdb engine. */
  11. extern void set_debug_traps(void);
  12. /* To enter the debugger explicitly. */
  13. extern void breakpoint(void);
  14. /* For convenience we define the format of a kgdb trap breakpoint
  15. * frame here also.
  16. */
  17. struct kgdb_frame {
  18. unsigned long globals[8];
  19. unsigned long outs[8];
  20. unsigned long locals[8];
  21. unsigned long ins[8];
  22. unsigned long fpregs[32];
  23. unsigned long y;
  24. unsigned long psr;
  25. unsigned long wim;
  26. unsigned long tbr;
  27. unsigned long pc;
  28. unsigned long npc;
  29. unsigned long fpsr;
  30. unsigned long cpsr;
  31. };
  32. #endif /* !(__ASSEMBLY__) */
  33. /* Macros for assembly usage of the kgdb breakpoint frame. */
  34. #define KGDB_G0 0x000
  35. #define KGDB_G1 0x004
  36. #define KGDB_G2 0x008
  37. #define KGDB_G4 0x010
  38. #define KGDB_G6 0x018
  39. #define KGDB_I0 0x020
  40. #define KGDB_I2 0x028
  41. #define KGDB_I4 0x030
  42. #define KGDB_I6 0x038
  43. #define KGDB_Y 0x100
  44. #define KGDB_PSR 0x104
  45. #define KGDB_WIM 0x108
  46. #define KGDB_TBR 0x10c
  47. #define KGDB_PC 0x110
  48. #define KGDB_NPC 0x114
  49. #define SAVE_KGDB_GLOBALS(reg) \
  50. std %g0, [%reg + STACKFRAME_SZ + KGDB_G0]; \
  51. std %g2, [%reg + STACKFRAME_SZ + KGDB_G2]; \
  52. std %g4, [%reg + STACKFRAME_SZ + KGDB_G4]; \
  53. std %g6, [%reg + STACKFRAME_SZ + KGDB_G6];
  54. #define SAVE_KGDB_INS(reg) \
  55. std %i0, [%reg + STACKFRAME_SZ + KGDB_I0]; \
  56. std %i2, [%reg + STACKFRAME_SZ + KGDB_I2]; \
  57. std %i4, [%reg + STACKFRAME_SZ + KGDB_I4]; \
  58. std %i6, [%reg + STACKFRAME_SZ + KGDB_I6];
  59. #define SAVE_KGDB_SREGS(reg, reg_y, reg_psr, reg_wim, reg_tbr, reg_pc, reg_npc) \
  60. st %reg_y, [%reg + STACKFRAME_SZ + KGDB_Y]; \
  61. st %reg_psr, [%reg + STACKFRAME_SZ + KGDB_PSR]; \
  62. st %reg_wim, [%reg + STACKFRAME_SZ + KGDB_WIM]; \
  63. st %reg_tbr, [%reg + STACKFRAME_SZ + KGDB_TBR]; \
  64. st %reg_pc, [%reg + STACKFRAME_SZ + KGDB_PC]; \
  65. st %reg_npc, [%reg + STACKFRAME_SZ + KGDB_NPC];
  66. #define LOAD_KGDB_GLOBALS(reg) \
  67. ld [%reg + STACKFRAME_SZ + KGDB_G1], %g1; \
  68. ldd [%reg + STACKFRAME_SZ + KGDB_G2], %g2; \
  69. ldd [%reg + STACKFRAME_SZ + KGDB_G4], %g4; \
  70. ldd [%reg + STACKFRAME_SZ + KGDB_G6], %g6;
  71. #define LOAD_KGDB_INS(reg) \
  72. ldd [%reg + STACKFRAME_SZ + KGDB_I0], %i0; \
  73. ldd [%reg + STACKFRAME_SZ + KGDB_I2], %i2; \
  74. ldd [%reg + STACKFRAME_SZ + KGDB_I4], %i4; \
  75. ldd [%reg + STACKFRAME_SZ + KGDB_I6], %i6;
  76. #define LOAD_KGDB_SREGS(reg, reg_y, reg_psr, reg_wim, reg_tbr, reg_pc, reg_npc) \
  77. ld [%reg + STACKFRAME_SZ + KGDB_Y], %reg_y; \
  78. ld [%reg + STACKFRAME_SZ + KGDB_PSR], %reg_psr; \
  79. ld [%reg + STACKFRAME_SZ + KGDB_WIM], %reg_wim; \
  80. ld [%reg + STACKFRAME_SZ + KGDB_TBR], %reg_tbr; \
  81. ld [%reg + STACKFRAME_SZ + KGDB_PC], %reg_pc; \
  82. ld [%reg + STACKFRAME_SZ + KGDB_NPC], %reg_npc;
  83. #endif /* !(_SPARC_KGDB_H) */