kgdb.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. /*
  2. * May be copied or modified under the terms of the GNU General Public
  3. * License. See linux/COPYING for more information.
  4. *
  5. * Based on original code by Glenn Engel, Jim Kingdon,
  6. * David Grothe <dave@gcom.com>, Tigran Aivazian, <tigran@sco.com> and
  7. * Amit S. Kale <akale@veritas.com>
  8. *
  9. * Super-H port based on sh-stub.c (Ben Lee and Steve Chamberlain) by
  10. * Henry Bell <henry.bell@st.com>
  11. *
  12. * Header file for low-level support for remote debug using GDB.
  13. *
  14. */
  15. #ifndef __KGDB_H
  16. #define __KGDB_H
  17. #include <asm/ptrace.h>
  18. #include <asm/cacheflush.h>
  19. struct console;
  20. /* Same as pt_regs but has vbr in place of syscall_nr */
  21. struct kgdb_regs {
  22. unsigned long regs[16];
  23. unsigned long pc;
  24. unsigned long pr;
  25. unsigned long sr;
  26. unsigned long gbr;
  27. unsigned long mach;
  28. unsigned long macl;
  29. unsigned long vbr;
  30. };
  31. /* State info */
  32. extern char kgdb_in_gdb_mode;
  33. extern int kgdb_done_init;
  34. extern int kgdb_enabled;
  35. extern int kgdb_nofault; /* Ignore bus errors (in gdb mem access) */
  36. extern int kgdb_halt; /* Execute initial breakpoint at startup */
  37. extern char in_nmi; /* Debounce flag to prevent NMI reentry*/
  38. /* SCI */
  39. extern int kgdb_portnum;
  40. extern int kgdb_baud;
  41. extern char kgdb_parity;
  42. extern char kgdb_bits;
  43. /* Init and interface stuff */
  44. extern int kgdb_init(void);
  45. extern int (*kgdb_getchar)(void);
  46. extern void (*kgdb_putchar)(int);
  47. /* Trap functions */
  48. typedef void (kgdb_debug_hook_t)(struct pt_regs *regs);
  49. typedef void (kgdb_bus_error_hook_t)(void);
  50. extern kgdb_debug_hook_t *kgdb_debug_hook;
  51. extern kgdb_bus_error_hook_t *kgdb_bus_err_hook;
  52. /* Console */
  53. void kgdb_console_write(struct console *co, const char *s, unsigned count);
  54. extern int kgdb_console_setup(struct console *, char *);
  55. /* Prototypes for jmp fns */
  56. #define _JBLEN 9
  57. typedef int jmp_buf[_JBLEN];
  58. extern void longjmp(jmp_buf __jmpb, int __retval);
  59. extern int setjmp(jmp_buf __jmpb);
  60. /* Forced breakpoint */
  61. #define breakpoint() \
  62. do { \
  63. if (kgdb_enabled) \
  64. __asm__ __volatile__("trapa #0x3c"); \
  65. } while (0)
  66. /* KGDB should be able to flush all kernel text space */
  67. #if defined(CONFIG_CPU_SH4)
  68. #define kgdb_flush_icache_range(start, end) \
  69. { \
  70. __flush_purge_region((void*)(start), (int)(end) - (int)(start));\
  71. flush_icache_range((start), (end)); \
  72. }
  73. #else
  74. #define kgdb_flush_icache_range(start, end) do { } while (0)
  75. #endif
  76. /* Taken from sh-stub.c of GDB 4.18 */
  77. static const char hexchars[] = "0123456789abcdef";
  78. /* Get high hex bits */
  79. static inline char highhex(const int x)
  80. {
  81. return hexchars[(x >> 4) & 0xf];
  82. }
  83. /* Get low hex bits */
  84. static inline char lowhex(const int x)
  85. {
  86. return hexchars[x & 0xf];
  87. }
  88. #endif