diff options
Diffstat (limited to 'arch/x86/include/asm/kgdb.h')
-rw-r--r-- | arch/x86/include/asm/kgdb.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/arch/x86/include/asm/kgdb.h b/arch/x86/include/asm/kgdb.h new file mode 100644 index 00000000000..e6c6c808489 --- /dev/null +++ b/arch/x86/include/asm/kgdb.h | |||
@@ -0,0 +1,79 @@ | |||
1 | #ifndef _ASM_X86_KGDB_H | ||
2 | #define _ASM_X86_KGDB_H | ||
3 | |||
4 | /* | ||
5 | * Copyright (C) 2001-2004 Amit S. Kale | ||
6 | * Copyright (C) 2008 Wind River Systems, Inc. | ||
7 | */ | ||
8 | |||
9 | /* | ||
10 | * BUFMAX defines the maximum number of characters in inbound/outbound | ||
11 | * buffers at least NUMREGBYTES*2 are needed for register packets | ||
12 | * Longer buffer is needed to list all threads | ||
13 | */ | ||
14 | #define BUFMAX 1024 | ||
15 | |||
16 | /* | ||
17 | * Note that this register image is in a different order than | ||
18 | * the register image that Linux produces at interrupt time. | ||
19 | * | ||
20 | * Linux's register image is defined by struct pt_regs in ptrace.h. | ||
21 | * Just why GDB uses a different order is a historical mystery. | ||
22 | */ | ||
23 | #ifdef CONFIG_X86_32 | ||
24 | enum regnames { | ||
25 | GDB_AX, /* 0 */ | ||
26 | GDB_CX, /* 1 */ | ||
27 | GDB_DX, /* 2 */ | ||
28 | GDB_BX, /* 3 */ | ||
29 | GDB_SP, /* 4 */ | ||
30 | GDB_BP, /* 5 */ | ||
31 | GDB_SI, /* 6 */ | ||
32 | GDB_DI, /* 7 */ | ||
33 | GDB_PC, /* 8 also known as eip */ | ||
34 | GDB_PS, /* 9 also known as eflags */ | ||
35 | GDB_CS, /* 10 */ | ||
36 | GDB_SS, /* 11 */ | ||
37 | GDB_DS, /* 12 */ | ||
38 | GDB_ES, /* 13 */ | ||
39 | GDB_FS, /* 14 */ | ||
40 | GDB_GS, /* 15 */ | ||
41 | }; | ||
42 | #define NUMREGBYTES ((GDB_GS+1)*4) | ||
43 | #else /* ! CONFIG_X86_32 */ | ||
44 | enum regnames64 { | ||
45 | GDB_AX, /* 0 */ | ||
46 | GDB_BX, /* 1 */ | ||
47 | GDB_CX, /* 2 */ | ||
48 | GDB_DX, /* 3 */ | ||
49 | GDB_SI, /* 4 */ | ||
50 | GDB_DI, /* 5 */ | ||
51 | GDB_BP, /* 6 */ | ||
52 | GDB_SP, /* 7 */ | ||
53 | GDB_R8, /* 8 */ | ||
54 | GDB_R9, /* 9 */ | ||
55 | GDB_R10, /* 10 */ | ||
56 | GDB_R11, /* 11 */ | ||
57 | GDB_R12, /* 12 */ | ||
58 | GDB_R13, /* 13 */ | ||
59 | GDB_R14, /* 14 */ | ||
60 | GDB_R15, /* 15 */ | ||
61 | GDB_PC, /* 16 */ | ||
62 | }; | ||
63 | |||
64 | enum regnames32 { | ||
65 | GDB_PS = 34, | ||
66 | GDB_CS, | ||
67 | GDB_SS, | ||
68 | }; | ||
69 | #define NUMREGBYTES ((GDB_SS+1)*4) | ||
70 | #endif /* CONFIG_X86_32 */ | ||
71 | |||
72 | static inline void arch_kgdb_breakpoint(void) | ||
73 | { | ||
74 | asm(" int $3"); | ||
75 | } | ||
76 | #define BREAK_INSTR_SIZE 1 | ||
77 | #define CACHE_FLUSH_IS_SAFE 1 | ||
78 | |||
79 | #endif /* _ASM_X86_KGDB_H */ | ||