diff options
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/x86/lib/exception.c | 13 |
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 } |