diff options
Diffstat (limited to 'arch/i386')
-rw-r--r-- | arch/i386/cpu/interrupts.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/arch/i386/cpu/interrupts.c b/arch/i386/cpu/interrupts.c index e4d0868cde..cdff3d934d 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 { |