Skip to contentSkip to conversation

x86: early exception enhancement

PATCH New Jan Beulich 1 participant 1 message Jun 19, 2007

lore
Share & tools
lore
#0 lore raw

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.

xen/arch/x86/boot/x86_32.S +16 -1
Index: 2007-06-18/xen/arch/x86/boot/x86_32.S
===================================================================
@@ -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
Index: 2007-06-18/xen/arch/x86/boot/x86_64.S
===================================================================
@@ -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