x86: early exception enhancement
PATCH 1/1 x86: early exception enhancement
In order to at least have some minimal debuging capabilities when Xen crashes really early, dump out registers and stack contents in a raw form.
Signed-off-by Jan Beulich <[email protected]>
xen/arch/x86/boot/x86_32.S +16 -1
@@ -38,15 +38,30 @@ /* This is the default interrupt handler. */ int_msg: - .asciz "Unknown interrupt\n" + .asciz "Unknown interrupt (cr2=%08x)\n" +hex_msg: + .asciz " %08x" ALIGN ignore_int: + pusha cld mov $(__HYPERVISOR_DS),%eax mov %eax,%ds mov %eax,%es + mov %cr2,%eax + push %eax pushl $int_msg call printk + add $8,%esp + mov %esp,%ebp +0: + pushl (%ebp) + add $4,%ebp + pushl $hex_msg + call printk + add $8,%esp + test $0xffc,%ebp + jnz 0b 1: jmp 1b ENTRY(stack_start)
xen/arch/x86/boot/x86_64.S +29 -1
@@ -58,12 +58,40 @@ /* This is the default interrupt handler. */ int_msg: - .asciz "Unknown interrupt\n" + .asciz "Unknown interrupt (cr2=%016lx)\n" +hex_msg: + .asciz " %016lx" ignore_int: + pushq %r15 + pushq %r14 + pushq %r13 + pushq %r12 + pushq %r11 + pushq %r10 + pushq %r9 + pushq %r8 + pushq %rdi + pushq %rsi + pushq %rbp + pushq %rsp + pushq %rbx + pushq %rcx + pushq %rdx + pushq %rax cld + movq %cr2,%rsi leaq int_msg(%rip),%rdi xorl %eax,%eax call printk + movq %rsp,%rbp +0: + movq (%rbp),%rsi + addq $8,%rbp + leaq hex_msg(%rip),%rdi + xorl %eax,%eax + call printk + testq $0xff8,%rbp + jnz 0b 1: jmp 1b