summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2012-03-19 22:50:04 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2020-03-28 16:18:25 +0100
commita063445630a6f26651df53543466a7bfdc44a1f7 (patch)
tree8079dbedd28235d5e721d1d64a7050fba2d5ffc9
parent2c8ccce9d152696613e6a079770749983bf440ff (diff)
db_interface: Add 64bit variant
* i386/i386/db_interface.c (int_regs): Drop edi/esi fields on 64bit. (kdb_kentry): Fix saving rsi/rdi.
-rw-r--r--i386/i386/db_interface.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/i386/i386/db_interface.c b/i386/i386/db_interface.c
index aac29395..2db60b4b 100644
--- a/i386/i386/db_interface.c
+++ b/i386/i386/db_interface.c
@@ -347,8 +347,10 @@ kdb_trap(
* instead of those at its call to KDB.
*/
struct int_regs {
+#ifdef __i386__
long edi;
long esi;
+#endif
long ebp;
long ebx;
struct i386_interrupt_state *is;
@@ -381,8 +383,14 @@ kdb_kentry(
ddb_regs.edx = is->edx;
ddb_regs.ebx = int_regs->ebx;
ddb_regs.ebp = int_regs->ebp;
+#ifdef __i386__
ddb_regs.esi = int_regs->esi;
ddb_regs.edi = int_regs->edi;
+#endif
+#ifdef __x86_64__
+ ddb_regs.esi = is->rsi;
+ ddb_regs.edi = is->rdi;
+#endif
ddb_regs.ds = is->ds;
ddb_regs.es = is->es;
ddb_regs.fs = is->fs;
@@ -404,8 +412,14 @@ kdb_kentry(
is->edx = ddb_regs.edx;
int_regs->ebx = ddb_regs.ebx;
int_regs->ebp = ddb_regs.ebp;
+#ifdef __i386__
int_regs->esi = ddb_regs.esi;
int_regs->edi = ddb_regs.edi;
+#endif
+#ifdef __x86_64__
+ is->rsi = ddb_regs.esi;
+ is->rdi = ddb_regs.edi;
+#endif
is->ds = ddb_regs.ds & 0xffff;
is->es = ddb_regs.es & 0xffff;
is->fs = ddb_regs.fs & 0xffff;