diff options
author | Jan Kiszka <jan.kiszka@siemens.com> | 2012-03-19 16:16:48 -0400 |
---|---|---|
committer | Jason Wessel <jason.wessel@windriver.com> | 2012-03-22 16:07:15 -0400 |
commit | 639077fb69aec8112e5427210a83d0fb192969f0 (patch) | |
tree | 31513fea8a3a7eaa4d2db10194c0435cf2395d20 | |
parent | c16fa4f2ad19908a47c63d8fa436a1178438c7e7 (diff) |
kgdb: x86: Return all segment registers also in 64-bit mode
Even if the content is always 0, gdb expects us to return also ds,
es, fs, and gs while in x86-64 mode. Do this to avoid ugly errors on
"info registers".
[jason.wessel@windriver.com: adjust NUMREGBYTES for two new regs]
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
-rw-r--r-- | arch/x86/include/asm/kgdb.h | 10 | ||||
-rw-r--r-- | arch/x86/kernel/kgdb.c | 6 |
2 files changed, 11 insertions, 5 deletions
diff --git a/arch/x86/include/asm/kgdb.h b/arch/x86/include/asm/kgdb.h index 77e95f54570a..332f98c9111f 100644 --- a/arch/x86/include/asm/kgdb.h +++ b/arch/x86/include/asm/kgdb.h | |||
@@ -64,11 +64,15 @@ enum regnames { | |||
64 | GDB_PS, /* 17 */ | 64 | GDB_PS, /* 17 */ |
65 | GDB_CS, /* 18 */ | 65 | GDB_CS, /* 18 */ |
66 | GDB_SS, /* 19 */ | 66 | GDB_SS, /* 19 */ |
67 | GDB_DS, /* 20 */ | ||
68 | GDB_ES, /* 21 */ | ||
69 | GDB_FS, /* 22 */ | ||
70 | GDB_GS, /* 23 */ | ||
67 | }; | 71 | }; |
68 | #define GDB_ORIG_AX 57 | 72 | #define GDB_ORIG_AX 57 |
69 | #define DBG_MAX_REG_NUM 20 | 73 | #define DBG_MAX_REG_NUM 24 |
70 | /* 17 64 bit regs and 3 32 bit regs */ | 74 | /* 17 64 bit regs and 5 32 bit regs */ |
71 | #define NUMREGBYTES ((17 * 8) + (3 * 4)) | 75 | #define NUMREGBYTES ((17 * 8) + (5 * 4)) |
72 | #endif /* ! CONFIG_X86_32 */ | 76 | #endif /* ! CONFIG_X86_32 */ |
73 | 77 | ||
74 | static inline void arch_kgdb_breakpoint(void) | 78 | static inline void arch_kgdb_breakpoint(void) |
diff --git a/arch/x86/kernel/kgdb.c b/arch/x86/kernel/kgdb.c index faba5771acad..fdc37b3d0ce3 100644 --- a/arch/x86/kernel/kgdb.c +++ b/arch/x86/kernel/kgdb.c | |||
@@ -67,8 +67,6 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = | |||
67 | { "ss", 4, offsetof(struct pt_regs, ss) }, | 67 | { "ss", 4, offsetof(struct pt_regs, ss) }, |
68 | { "ds", 4, offsetof(struct pt_regs, ds) }, | 68 | { "ds", 4, offsetof(struct pt_regs, ds) }, |
69 | { "es", 4, offsetof(struct pt_regs, es) }, | 69 | { "es", 4, offsetof(struct pt_regs, es) }, |
70 | { "fs", 4, -1 }, | ||
71 | { "gs", 4, -1 }, | ||
72 | #else | 70 | #else |
73 | { "ax", 8, offsetof(struct pt_regs, ax) }, | 71 | { "ax", 8, offsetof(struct pt_regs, ax) }, |
74 | { "bx", 8, offsetof(struct pt_regs, bx) }, | 72 | { "bx", 8, offsetof(struct pt_regs, bx) }, |
@@ -90,7 +88,11 @@ struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] = | |||
90 | { "flags", 4, offsetof(struct pt_regs, flags) }, | 88 | { "flags", 4, offsetof(struct pt_regs, flags) }, |
91 | { "cs", 4, offsetof(struct pt_regs, cs) }, | 89 | { "cs", 4, offsetof(struct pt_regs, cs) }, |
92 | { "ss", 4, offsetof(struct pt_regs, ss) }, | 90 | { "ss", 4, offsetof(struct pt_regs, ss) }, |
91 | { "ds", 4, -1 }, | ||
92 | { "es", 4, -1 }, | ||
93 | #endif | 93 | #endif |
94 | { "fs", 4, -1 }, | ||
95 | { "gs", 4, -1 }, | ||
94 | }; | 96 | }; |
95 | 97 | ||
96 | int dbg_set_reg(int regno, void *mem, struct pt_regs *regs) | 98 | int dbg_set_reg(int regno, void *mem, struct pt_regs *regs) |