# 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
|