Commit | Line | Data |
---|---|---|
1da177e4 LT |
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 | ||
16 | #ifndef __KGDB_H | |
17 | #define __KGDB_H | |
18 | ||
19 | #include <asm/ptrace.h> | |
fa5da2f7 | 20 | #include <asm/cacheflush.h> |
1da177e4 LT |
21 | |
22 | struct console; | |
23 | ||
24 | /* Same as pt_regs but has vbr in place of syscall_nr */ | |
25 | struct kgdb_regs { | |
26 | unsigned long regs[16]; | |
27 | unsigned long pc; | |
28 | unsigned long pr; | |
29 | unsigned long sr; | |
30 | unsigned long gbr; | |
31 | unsigned long mach; | |
32 | unsigned long macl; | |
33 | unsigned long vbr; | |
34 | }; | |
35 | ||
36 | /* State info */ | |
37 | extern char kgdb_in_gdb_mode; | |
38 | extern int kgdb_done_init; | |
39 | extern int kgdb_enabled; | |
40 | extern int kgdb_nofault; /* Ignore bus errors (in gdb mem access) */ | |
41 | extern int kgdb_halt; /* Execute initial breakpoint at startup */ | |
42 | extern char in_nmi; /* Debounce flag to prevent NMI reentry*/ | |
43 | ||
44 | /* SCI */ | |
45 | extern int kgdb_portnum; | |
46 | extern int kgdb_baud; | |
47 | extern char kgdb_parity; | |
48 | extern char kgdb_bits; | |
1da177e4 LT |
49 | |
50 | /* Init and interface stuff */ | |
51 | extern int kgdb_init(void); | |
1da177e4 LT |
52 | extern int (*kgdb_getchar)(void); |
53 | extern void (*kgdb_putchar)(int); | |
54 | ||
1da177e4 | 55 | /* Trap functions */ |
fa5da2f7 | 56 | typedef void (kgdb_debug_hook_t)(struct pt_regs *regs); |
1da177e4 LT |
57 | typedef void (kgdb_bus_error_hook_t)(void); |
58 | extern kgdb_debug_hook_t *kgdb_debug_hook; | |
59 | extern kgdb_bus_error_hook_t *kgdb_bus_err_hook; | |
60 | ||
1da177e4 | 61 | /* Console */ |
1da177e4 | 62 | void kgdb_console_write(struct console *co, const char *s, unsigned count); |
fa5da2f7 | 63 | extern int kgdb_console_setup(struct console *, char *); |
1da177e4 LT |
64 | |
65 | /* Prototypes for jmp fns */ | |
66 | #define _JBLEN 9 | |
67 | typedef int jmp_buf[_JBLEN]; | |
68 | extern void longjmp(jmp_buf __jmpb, int __retval); | |
69 | extern int setjmp(jmp_buf __jmpb); | |
70 | ||
1da177e4 | 71 | /* Forced breakpoint */ |
fa5da2f7 | 72 | #define breakpoint() \ |
f413d0d9 PM |
73 | do { \ |
74 | if (kgdb_enabled) \ | |
75 | __asm__ __volatile__("trapa #0x3c"); \ | |
1da177e4 LT |
76 | } while (0) |
77 | ||
78 | /* KGDB should be able to flush all kernel text space */ | |
79 | #if defined(CONFIG_CPU_SH4) | |
80 | #define kgdb_flush_icache_range(start, end) \ | |
81 | { \ | |
1da177e4 LT |
82 | __flush_purge_region((void*)(start), (int)(end) - (int)(start));\ |
83 | flush_icache_range((start), (end)); \ | |
84 | } | |
85 | #else | |
86 | #define kgdb_flush_icache_range(start, end) do { } while (0) | |
87 | #endif | |
88 | ||
56e8d7b5 PM |
89 | /* Taken from sh-stub.c of GDB 4.18 */ |
90 | static const char hexchars[] = "0123456789abcdef"; | |
91 | ||
92 | /* Get high hex bits */ | |
93 | static inline char highhex(const int x) | |
94 | { | |
95 | return hexchars[(x >> 4) & 0xf]; | |
96 | } | |
97 | ||
98 | /* Get low hex bits */ | |
99 | static inline char lowhex(const int x) | |
100 | { | |
101 | return hexchars[x & 0xf]; | |
102 | } | |
1da177e4 | 103 | #endif |