[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Add fault debug feature (assuming guest doesn't use kr2), by Tristan Gingold



# HG changeset patch
# User djm@xxxxxxxxxxxxxxx
# Node ID f1dc942257e509b97efe964188d7e8a8d74c2464
# Parent  70de2b71f43923f7fc2698956204cf475e5950be
Add fault debug feature (assuming guest doesn't use kr2), by Tristan Gingold

diff -r 70de2b71f439 -r f1dc942257e5 xen/arch/ia64/xen/ivt.S
--- a/xen/arch/ia64/xen/ivt.S   Fri Oct 14 17:56:18 2005
+++ b/xen/arch/ia64/xen/ivt.S   Fri Oct 14 18:33:37 2005
@@ -484,6 +484,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x1400 Entry 5 (size 64 bundles) Data nested TLB (6,45)
 ENTRY(nested_dtlb_miss)
+       DBG_FAULT(5)
        /*
         * In the absence of kernel bugs, we get here when the virtually mapped 
linear
         * page table is accessed non-speculatively (e.g., in the Dirty-bit, 
Instruction
@@ -552,10 +553,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x1800 Entry 6 (size 64 bundles) Instruction Key Miss (24)
 ENTRY(ikey_miss)
+       DBG_FAULT(6)
 #ifdef XEN
        REFLECT(6)
 #endif
-       DBG_FAULT(6)
        FAULT(6)
 END(ikey_miss)
 
@@ -597,10 +598,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x1c00 Entry 7 (size 64 bundles) Data Key Miss (12,51)
 ENTRY(dkey_miss)
+       DBG_FAULT(7)
 #ifdef XEN
        REFLECT(7)
 #endif
-       DBG_FAULT(7)
        FAULT(7)
 END(dkey_miss)
 
@@ -608,10 +609,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x2000 Entry 8 (size 64 bundles) Dirty-bit (54)
 ENTRY(dirty_bit)
+       DBG_FAULT(8)
 #ifdef XEN
        REFLECT(8)
 #endif
-       DBG_FAULT(8)
        /*
         * What we do here is to simply turn on the dirty bit in the PTE.  We 
need to
         * update both the page-table and the TLB entry.  To efficiently access 
the PTE,
@@ -673,6 +674,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x2400 Entry 9 (size 64 bundles) Instruction Access-bit (27)
 ENTRY(iaccess_bit)
+       DBG_FAULT(9)
 #ifdef XEN
        mov r31=pr;
        mov r16=cr.isr
@@ -681,7 +683,6 @@
        movl r20=0x2400
        br.sptk.many fast_access_reflect;;
 #endif
-       DBG_FAULT(9)
        // Like Entry 8, except for instruction access
        mov r16=cr.ifa                          // get the address that caused 
the fault
        movl r30=1f                             // load continuation point in 
case of nested fault
@@ -746,6 +747,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x2800 Entry 10 (size 64 bundles) Data Access-bit (15,55)
 ENTRY(daccess_bit)
+       DBG_FAULT(10)
 #ifdef XEN
        mov r31=pr;
        mov r16=cr.isr
@@ -754,7 +756,6 @@
        movl r20=0x2800
        br.sptk.many fast_access_reflect;;
 #endif
-       DBG_FAULT(10)
        // Like Entry 8, except for data access
        mov r16=cr.ifa                          // get the address that caused 
the fault
        movl r30=1f                             // load continuation point in 
case of nested fault
@@ -971,8 +972,10 @@
        mov out0=cr.ivr         // pass cr.ivr as first arg
 #endif
        add out1=16,sp          // pass pointer to pt_regs as second arg
+#ifndef XEN
        ;;
        srlz.d                  // make sure we see the effect of cr.ivr
+#endif
        movl r14=ia64_leave_kernel
        ;;
        mov rp=r14
@@ -1363,10 +1366,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5000 Entry 20 (size 16 bundles) Page Not Present (10,22,49)
 ENTRY(page_not_present)
+       DBG_FAULT(20)
 #ifdef XEN
        REFLECT(20)
 #endif
-       DBG_FAULT(20)
        mov r16=cr.ifa
        rsm psr.dt
        /*
@@ -1386,10 +1389,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5100 Entry 21 (size 16 bundles) Key Permission (13,25,52)
 ENTRY(key_permission)
+       DBG_FAULT(21)
 #ifdef XEN
        REFLECT(21)
 #endif
-       DBG_FAULT(21)
        mov r16=cr.ifa
        rsm psr.dt
        mov r31=pr
@@ -1402,10 +1405,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5200 Entry 22 (size 16 bundles) Instruction Access Rights (26)
 ENTRY(iaccess_rights)
+       DBG_FAULT(22)
 #ifdef XEN
        REFLECT(22)
 #endif
-       DBG_FAULT(22)
        mov r16=cr.ifa
        rsm psr.dt
        mov r31=pr
@@ -1418,6 +1421,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5300 Entry 23 (size 16 bundles) Data Access Rights (14,53)
 ENTRY(daccess_rights)
+       DBG_FAULT(23)
 #ifdef XEN
        mov r31=pr;
        mov r16=cr.isr
@@ -1426,7 +1430,6 @@
        movl r20=0x5300
        br.sptk.many fast_access_reflect;;
 #endif
-       DBG_FAULT(23)
        mov r16=cr.ifa
        rsm psr.dt
        mov r31=pr
@@ -1459,6 +1462,7 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5500 Entry 25 (size 16 bundles) Disabled FP-Register (35)
 ENTRY(disabled_fp_reg)
+       DBG_FAULT(25)
 #ifdef XEN
 #if 0
        mov r20=pr
@@ -1483,7 +1487,6 @@
 //     br.sptk.many floating_panic
        ;;
 #endif
-       DBG_FAULT(25)
        rsm psr.dfh             // ensure we can access fph
        ;;
        srlz.d
@@ -1496,10 +1499,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5600 Entry 26 (size 16 bundles) Nat Consumption (11,23,37,50)
 ENTRY(nat_consumption)
+       DBG_FAULT(26)
 #ifdef XEN
        REFLECT(26)
 #endif
-       DBG_FAULT(26)
        FAULT(26)
 END(nat_consumption)
 
@@ -1507,11 +1510,11 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5700 Entry 27 (size 16 bundles) Speculation (40)
 ENTRY(speculation_vector)
+       DBG_FAULT(27)
 #ifdef XEN
        // this probably need not reflect...
        REFLECT(27)
 #endif
-       DBG_FAULT(27)
        /*
         * A [f]chk.[as] instruction needs to take the branch to the recovery 
code but
         * this part of the architecture is not implemented in hardware on some 
CPUs, such
@@ -1554,10 +1557,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5900 Entry 29 (size 16 bundles) Debug (16,28,56)
 ENTRY(debug_vector)
+       DBG_FAULT(29)
 #ifdef XEN
        REFLECT(29)
 #endif
-       DBG_FAULT(29)
        FAULT(29)
 END(debug_vector)
 
@@ -1565,10 +1568,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5a00 Entry 30 (size 16 bundles) Unaligned Reference (57)
 ENTRY(unaligned_access)
+       DBG_FAULT(30)
 #ifdef XEN
        REFLECT(30)
 #endif
-       DBG_FAULT(30)
        mov r16=cr.ipsr
        mov r31=pr              // prepare to save predicates
        ;;
@@ -1579,10 +1582,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5b00 Entry 31 (size 16 bundles) Unsupported Data Reference (57)
 ENTRY(unsupported_data_reference)
+       DBG_FAULT(31)
 #ifdef XEN
        REFLECT(31)
 #endif
-       DBG_FAULT(31)
        FAULT(31)
 END(unsupported_data_reference)
 
@@ -1590,10 +1593,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5c00 Entry 32 (size 16 bundles) Floating-Point Fault (64)
 ENTRY(floating_point_fault)
+       DBG_FAULT(32)
 #ifdef XEN
        REFLECT(32)
 #endif
-       DBG_FAULT(32)
        FAULT(32)
 END(floating_point_fault)
 
@@ -1601,10 +1604,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5d00 Entry 33 (size 16 bundles) Floating Point Trap (66)
 ENTRY(floating_point_trap)
+       DBG_FAULT(33)
 #ifdef XEN
        REFLECT(33)
 #endif
-       DBG_FAULT(33)
        FAULT(33)
 END(floating_point_trap)
 
@@ -1612,10 +1615,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5e00 Entry 34 (size 16 bundles) Lower Privilege Transfer Trap (66)
 ENTRY(lower_privilege_trap)
+       DBG_FAULT(34)
 #ifdef XEN
        REFLECT(34)
 #endif
-       DBG_FAULT(34)
        FAULT(34)
 END(lower_privilege_trap)
 
@@ -1623,10 +1626,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x5f00 Entry 35 (size 16 bundles) Taken Branch Trap (68)
 ENTRY(taken_branch_trap)
+       DBG_FAULT(35)
 #ifdef XEN
        REFLECT(35)
 #endif
-       DBG_FAULT(35)
        FAULT(35)
 END(taken_branch_trap)
 
@@ -1634,10 +1637,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x6000 Entry 36 (size 16 bundles) Single Step Trap (69)
 ENTRY(single_step_trap)
+       DBG_FAULT(36)
 #ifdef XEN
        REFLECT(36)
 #endif
-       DBG_FAULT(36)
        FAULT(36)
 END(single_step_trap)
 
@@ -1693,10 +1696,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x6900 Entry 45 (size 16 bundles) IA-32 Exeception 
(17,18,29,41,42,43,44,58,60,61,62,72,73,75,76,77)
 ENTRY(ia32_exception)
+       DBG_FAULT(45)
 #ifdef XEN
        REFLECT(45)
 #endif
-       DBG_FAULT(45)
        FAULT(45)
 END(ia32_exception)
 
@@ -1704,10 +1707,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x6a00 Entry 46 (size 16 bundles) IA-32 Intercept  (30,31,59,70,71)
 ENTRY(ia32_intercept)
+       DBG_FAULT(46)
 #ifdef XEN
        REFLECT(46)
 #endif
-       DBG_FAULT(46)
 #ifdef CONFIG_IA32_SUPPORT
        mov r31=pr
        mov r16=cr.isr
@@ -1737,10 +1740,10 @@
 
/////////////////////////////////////////////////////////////////////////////////////////
 // 0x6b00 Entry 47 (size 16 bundles) IA-32 Interrupt  (74)
 ENTRY(ia32_interrupt)
+       DBG_FAULT(47)
 #ifdef XEN
        REFLECT(47)
 #endif
-       DBG_FAULT(47)
 #ifdef CONFIG_IA32_SUPPORT
        mov r31=pr
        br.sptk.many dispatch_to_ia32_handler

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.