aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGraeme Russ <graeme.russ@gmail.com>2011-02-12 15:11:28 +1100
committerGraeme Russ <graeme.russ@gmail.com>2011-02-12 15:11:28 +1100
commitca56a4ceec47ca4358d99b17d7314042f8411544 (patch)
treeecfec4ea6805e9b52992556c02730562c1833b27
parent9963a8216e12c2978b33ae1dd7233f4f78bfd0d2 (diff)
x86: Add stack dump to register dump
-rw-r--r--arch/i386/cpu/interrupts.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/i386/cpu/interrupts.c b/arch/i386/cpu/interrupts.c
index e4d0868cd..cdff3d934 100644
--- a/arch/i386/cpu/interrupts.c
+++ b/arch/i386/cpu/interrupts.c
@@ -29,6 +29,7 @@
#include <common.h>
#include <asm/interrupt.h>
+#include <asm/io.h>
#define DECLARE_INTERRUPT(x) \
".globl irq_"#x"\n" \
@@ -108,6 +109,7 @@ void dump_regs(struct irq_regs *regs)
{
unsigned long cr0 = 0L, cr2 = 0L, cr3 = 0L, cr4 = 0L;
unsigned long d0, d1, d2, d3, d6, d7;
+ unsigned long sp;
printf("EIP: %04x:[<%08lx>] EFLAGS: %08lx\n",
(u16)regs->xcs, regs->eip, regs->eflags);
@@ -139,6 +141,20 @@ void dump_regs(struct irq_regs *regs)
d7 = get_debugreg(7);
printf("DR6: %08lx DR7: %08lx\n",
d6, d7);
+
+ printf("Stack:\n");
+ sp = regs->esp;
+
+ sp += 64;
+
+ while (sp > (regs->esp - 16)) {
+ if (sp == regs->esp)
+ printf("--->");
+ else
+ printf(" ");
+ printf("0x%8.8lx : 0x%8.8lx\n", sp, (ulong)readl(sp));
+ sp -= 4;
+ }
}
struct idt_entry {