aboutsummaryrefslogtreecommitdiff
path: root/src/arch/x86/lib/exception.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86/lib/exception.c')
-rw-r--r--src/arch/x86/lib/exception.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/arch/x86/lib/exception.c b/src/arch/x86/lib/exception.c
index 4721bc8b16..97569493fd 100644
--- a/src/arch/x86/lib/exception.c
+++ b/src/arch/x86/lib/exception.c
@@ -475,6 +475,7 @@ void x86_exception(struct eregs *info)
put_packet(out_buffer);
}
#else /* !CONFIG_GDB_STUB */
+#define MDUMP_SIZE 0x80
printk(BIOS_EMERG,
"Unexpected Exception: %d @ %02x:%08x - Halting\n"
"Code: %d eflags: %08x\n"
@@ -484,6 +485,18 @@ void x86_exception(struct eregs *info)
info->error_code, info->eflags,
info->eax, info->ebx, info->ecx, info->edx,
info->edi, info->esi, info->ebp, info->esp);
+ u8 *code = (u8*)((u32)info->eip - (MDUMP_SIZE >>1));
+ /* Align to 8-byte boundary please, and print eight bytes per row.
+ * This is done to make DRAM burst timing/reordering errors more
+ * evident from the looking at the dump */
+ code = (u8*)((u32)code & ~0x7);
+ int i;
+ for(i = 0; i < MDUMP_SIZE; i++)
+ {
+ if( (i & 0x07) == 0 )
+ printk(BIOS_EMERG, "\n%.8x:\t", (int)code + i );
+ printk(BIOS_EMERG, "%.2x ", code[i]);
+ }
die("");
#endif
}