WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [IA64] debug_op hypercall and debug point

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [IA64] debug_op hypercall and debug points
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 04 Oct 2007 17:40:30 -0700
Delivery-date: Thu, 04 Oct 2007 17:42:58 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Alex Williamson <alex.williamson@xxxxxx>
# Date 1190394234 21600
# Node ID f3173d151e1d330a387b72426f393d105525dae8
# Parent  b2a02f7ed849287da986673a8f2dacaa1671b101
[IA64] debug_op hypercall and debug points

Add debug_op hypercall.
Add many debug points.

Signed-off-by: Tristan Gingold <tgingold@xxxxxxx>
---
 xen/arch/ia64/linux-xen/entry.S   |    2 
 xen/arch/ia64/vmx/vmx_interrupt.c |    4 +
 xen/arch/ia64/vmx/vmx_phy_mode.c  |    2 
 xen/arch/ia64/vmx/vmx_vcpu.c      |    7 +++
 xen/arch/ia64/vmx/vmx_virt.c      |   29 ++++++++++++++
 xen/arch/ia64/xen/faults.c        |   11 +++--
 xen/arch/ia64/xen/fw_emul.c       |    7 +++
 xen/arch/ia64/xen/hypercall.c     |   32 +++++++++++++++
 xen/arch/ia64/xen/mm.c            |    3 +
 xen/arch/ia64/xen/privop.c        |    5 ++
 xen/include/asm-ia64/debugger.h   |   21 ++++++++--
 xen/include/asm-ia64/domain.h     |    6 ++
 xen/include/asm-ia64/vmx.h        |    2 
 xen/include/public/arch-ia64.h    |   78 ++++++++++++++++++++++++++++++++++++++
 14 files changed, 200 insertions(+), 9 deletions(-)

diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/linux-xen/entry.S
--- a/xen/arch/ia64/linux-xen/entry.S   Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/linux-xen/entry.S   Fri Sep 21 11:03:54 2007 -0600
@@ -1535,7 +1535,7 @@ ia64_hypercall_table:
        data8 do_ni_hypercall           /*  */
        data8 do_dom0vp_op              /* dom0vp_op */
        data8 do_pirq_guest_eoi         /* arch_1 */
-       data8 do_ni_hypercall           /* arch_2 */           /* 50 */
+       data8 do_ia64_debug_op          /* arch_2 */           /* 50 */
        data8 do_ni_hypercall           /* arch_3 */
        data8 do_ni_hypercall           /* arch_4 */
        data8 do_ni_hypercall           /* arch_5 */
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/vmx/vmx_interrupt.c
--- a/xen/arch/ia64/vmx/vmx_interrupt.c Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/vmx/vmx_interrupt.c Fri Sep 21 11:03:54 2007 -0600
@@ -24,6 +24,7 @@
 #include <asm/vmx_vcpu.h>
 #include <asm/vmx_mm_def.h>
 #include <asm/vmx_pal_vsa.h>
+#include <asm/debugger.h>
 
 /* SDM vol2 5.5 - IVA based interruption handling */
 #define INITIAL_PSR_VALUE_AT_INTERRUPTION 0x0000001808028034
@@ -107,6 +108,9 @@ inject_guest_interruption(VCPU *vcpu, u6
 
     viva = vmx_vcpu_get_iva(vcpu);
     regs->cr_iip = viva + vec;
+
+    debugger_event(vec == IA64_EXTINT_VECTOR ?
+                   XEN_IA64_DEBUG_ON_EXTINT : XEN_IA64_DEBUG_ON_EXCEPT);
 }
 
 
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/vmx/vmx_phy_mode.c
--- a/xen/arch/ia64/vmx/vmx_phy_mode.c  Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/vmx/vmx_phy_mode.c  Fri Sep 21 11:03:54 2007 -0600
@@ -28,6 +28,7 @@
 #include <xen/sched.h>
 #include <asm/pgtable.h>
 #include <asm/vmmu.h>
+#include <asm/debugger.h>
 
 static const int valid_mm_mode[8] = {
     GUEST_PHYS, /* (it, dt, rt) -> (0, 0, 0) */
@@ -300,6 +301,7 @@ check_mm_mode_switch (VCPU *vcpu,  IA64_
          (old_psr.rt != new_psr.rt )
          ) {
         switch_mm_mode (vcpu, old_psr, new_psr);
+        debugger_event(XEN_IA64_DEBUG_ON_MMU);
     }
 
     return;
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/vmx/vmx_vcpu.c
--- a/xen/arch/ia64/vmx/vmx_vcpu.c      Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/vmx/vmx_vcpu.c      Fri Sep 21 11:03:54 2007 -0600
@@ -135,6 +135,13 @@ vmx_vcpu_set_psr(VCPU *vcpu, unsigned lo
     if (FP_PSR(vcpu) & IA64_PSR_DFH)
         regs->cr_ipsr |= IA64_PSR_DFH;
 
+    if (unlikely(vcpu->domain->debugger_attached)) {
+        if (vcpu->domain->arch.debug_flags & XEN_IA64_DEBUG_FORCE_SS)
+            regs->cr_ipsr |= IA64_PSR_SS;
+        if (vcpu->domain->arch.debug_flags & XEN_IA64_DEBUG_FORCE_DB)
+            regs->cr_ipsr |= IA64_PSR_DB;
+    }
+
     check_mm_mode_switch(vcpu, old_psr, new_psr);
     return ;
 }
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/vmx/vmx_virt.c
--- a/xen/arch/ia64/vmx/vmx_virt.c      Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/vmx/vmx_virt.c      Fri Sep 21 11:03:54 2007 -0600
@@ -30,6 +30,7 @@
 #include <asm/vmx.h>
 #include <asm/virt_event.h>
 #include <asm/vmx_phy_mode.h>
+#include <asm/debugger.h>
 
 #ifdef BYPASS_VMAL_OPCODE
 static void
@@ -203,6 +204,11 @@ static IA64FAULT vmx_emul_rfi(VCPU *vcpu
     }
 #endif // CHECK_FAULT
 
+    if (debugger_event(XEN_IA64_DEBUG_ON_RFI)) {
+        raise_softirq(SCHEDULE_SOFTIRQ);
+        do_softirq();
+    }
+
     regs=vcpu_regs(vcpu);
     vpsr.val=regs->cr_ipsr;
     if ( vpsr.is == 1 ) {
@@ -279,6 +285,8 @@ static IA64FAULT vmx_emul_ptc_l(VCPU *vc
     }
 #endif // VMAL_NO_FAULT_CHECK
 
+    debugger_event(XEN_IA64_DEBUG_ON_TC);
+
     return vmx_vcpu_ptc_l(vcpu,r3,bits(r2,2,7));
 }
 
@@ -338,6 +346,8 @@ static IA64FAULT vmx_emul_ptc_g(VCPU *vc
     }
 #endif // VMAL_NO_FAULT_CHECK
 
+    debugger_event(XEN_IA64_DEBUG_ON_TC);
+
     return vmx_vcpu_ptc_g(vcpu,r3,bits(r2,2,7));
 }
 
@@ -372,6 +382,8 @@ static IA64FAULT vmx_emul_ptc_ga(VCPU *v
     }
 #endif // VMAL_NO_FAULT_CHECK
 
+    debugger_event(XEN_IA64_DEBUG_ON_TC);
+
     return vmx_vcpu_ptc_ga(vcpu,r3,bits(r2,2,7));
 }
 
@@ -414,6 +426,9 @@ static IA64FAULT vmx_emul_ptr_d(VCPU *vc
     u64 r2,r3;
     if ( ptr_fault_check(vcpu, inst, &r2, &r3 ) == IA64_FAULT )
        return IA64_FAULT;
+
+    debugger_event(XEN_IA64_DEBUG_ON_TR);
+
     return vmx_vcpu_ptr_d(vcpu,r3,bits(r2,2,7));
 }
 
@@ -422,6 +437,9 @@ static IA64FAULT vmx_emul_ptr_i(VCPU *vc
     u64 r2,r3;
     if ( ptr_fault_check(vcpu, inst, &r2, &r3 ) == IA64_FAULT )
        return IA64_FAULT;
+
+    debugger_event(XEN_IA64_DEBUG_ON_TR);
+
     return vmx_vcpu_ptr_i(vcpu,r3,bits(r2,2,7));
 }
 
@@ -633,6 +651,8 @@ static IA64FAULT vmx_emul_itr_d(VCPU *vc
         return IA64_FAULT;
     }
 
+    debugger_event(XEN_IA64_DEBUG_ON_TR);
+
     return (vmx_vcpu_itr_d(vcpu, slot, pte, itir, ifa));
 }
 
@@ -699,6 +719,8 @@ static IA64FAULT vmx_emul_itr_i(VCPU *vc
         return IA64_FAULT;
     }
 
+    debugger_event(XEN_IA64_DEBUG_ON_TR);
+
     return vmx_vcpu_itr_i(vcpu, slot, pte, itir, ifa);
 }
 
@@ -760,6 +782,8 @@ static IA64FAULT vmx_emul_itc_d(VCPU *vc
        return IA64_FAULT;
     }
 
+    debugger_event(XEN_IA64_DEBUG_ON_TC);
+    
     return vmx_vcpu_itc_d(vcpu, pte, itir, ifa);
 }
 
@@ -770,6 +794,8 @@ static IA64FAULT vmx_emul_itc_i(VCPU *vc
     if ( itc_fault_check(vcpu, inst, &itir, &ifa, &pte) == IA64_FAULT ) {
        return IA64_FAULT;
     }
+
+    debugger_event(XEN_IA64_DEBUG_ON_TC);
 
     return vmx_vcpu_itc_i(vcpu, pte, itir, ifa);
 }
@@ -1425,6 +1451,9 @@ if ( (cause == 0xff && opcode == 0x1e000
 #else
     inst.inst=opcode;
 #endif /* BYPASS_VMAL_OPCODE */
+
+    debugger_event(XEN_IA64_DEBUG_ON_PRIVOP);
+
     /*
      * Switch to actual virtual rid in rr0 and rr4,
      * which is required by some tlb related instructions.
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/xen/faults.c
--- a/xen/arch/ia64/xen/faults.c        Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/xen/faults.c        Fri Sep 21 11:03:54 2007 -0600
@@ -104,6 +104,9 @@ static void reflect_interruption(unsigne
        PSCB(v, interrupt_collection_enabled) = 0;
 
        perfc_incra(slow_reflect, vector >> 8);
+
+       debugger_event(vector == IA64_EXTINT_VECTOR ?
+                      XEN_IA64_DEBUG_ON_EXTINT : XEN_IA64_DEBUG_ON_EXCEPT);
 }
 
 void reflect_event(void)
@@ -151,6 +154,8 @@ void reflect_event(void)
        PSCB(v, vpsr_dfh) = 0;
        v->vcpu_info->evtchn_upcall_mask = 1;
        PSCB(v, interrupt_collection_enabled) = 0;
+
+       debugger_event(XEN_IA64_DEBUG_ON_EVENT);
 }
 
 static int handle_lazy_cover(struct vcpu *v, struct pt_regs *regs)
@@ -670,7 +675,7 @@ ia64_handle_reflection(unsigned long ifa
                break;
        case 29:
                vector = IA64_DEBUG_VECTOR;
-               if (debugger_trap_entry(vector,regs))
+               if (debugger_kernel_event(regs, XEN_IA64_DEBUG_ON_KERN_DEBUG))
                        return;
                break;
        case 30:
@@ -708,12 +713,12 @@ ia64_handle_reflection(unsigned long ifa
                break;
        case 35:
                vector = IA64_TAKEN_BRANCH_TRAP_VECTOR;
-               if (debugger_trap_entry(vector,regs))
+               if (debugger_kernel_event(regs, XEN_IA64_DEBUG_ON_KERN_TBRANCH))
                        return;
                break;
        case 36:
                vector = IA64_SINGLE_STEP_TRAP_VECTOR;
-               if (debugger_trap_entry(vector,regs))
+               if (debugger_kernel_event(regs, XEN_IA64_DEBUG_ON_KERN_SSTEP))
                        return;
                break;
 
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/xen/fw_emul.c
--- a/xen/arch/ia64/xen/fw_emul.c       Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/xen/fw_emul.c       Fri Sep 21 11:03:54 2007 -0600
@@ -36,6 +36,7 @@
 #include <xen/hypercall.h>
 #include <xen/softirq.h>
 #include <xen/time.h>
+#include <asm/debugger.h>
 
 static DEFINE_SPINLOCK(efi_time_services_lock);
 
@@ -136,6 +137,8 @@ sal_emulator (long index, unsigned long 
        unsigned long r10 = 0;
        long r11 = 0;
        long status;
+
+       debugger_event(XEN_IA64_DEBUG_ON_SAL);
 
        status = 0;
        switch (index) {
@@ -594,6 +597,8 @@ xen_pal_emulator(unsigned long index, u6
 
        if (unlikely(running_on_sim))
                return pal_emulator_static(index);
+
+       debugger_event(XEN_IA64_DEBUG_ON_PAL);
 
        // pal code must be mapped by a TR when pal is called, however
        // calls are rare enough that we will map it lazily rather than
@@ -1241,6 +1246,8 @@ efi_emulator (struct pt_regs *regs, IA64
        struct vcpu *v = current;
        efi_status_t status;
 
+       debugger_event(XEN_IA64_DEBUG_ON_EFI);
+
        *fault = IA64_NO_FAULT;
 
        switch (regs->r2) {
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/xen/hypercall.c
--- a/xen/arch/ia64/xen/hypercall.c     Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/xen/hypercall.c     Fri Sep 21 11:03:54 2007 -0600
@@ -493,3 +493,35 @@ long do_callback_op(int cmd, XEN_GUEST_H
 
     return ret;
 }
+
+unsigned long
+do_ia64_debug_op(unsigned long cmd, unsigned long domain,
+                XEN_GUEST_HANDLE(xen_ia64_debug_op_t) u_debug_op)
+{
+    xen_ia64_debug_op_t curop, *op = &curop;
+    struct domain *d;
+    long ret = 0;
+
+    if (!IS_PRIV(current->domain))
+        return -EPERM;
+    if (copy_from_guest(op, u_debug_op, 1))
+        return -EFAULT;
+    d = rcu_lock_domain_by_id(domain);
+    if (d == NULL)
+        return -ESRCH;
+
+    switch (cmd) {
+    case XEN_IA64_DEBUG_OP_SET_FLAGS:
+        d->arch.debug_flags = op->flags;
+        break;
+    case XEN_IA64_DEBUG_OP_GET_FLAGS:
+        op->flags = d->arch.debug_flags;
+        if (copy_to_guest(u_debug_op, op, 1))
+            ret = -EFAULT;
+        break;
+    default:
+        ret = -ENOSYS;
+    }
+    rcu_unlock_domain(d);
+    return ret;
+}
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/xen/mm.c
--- a/xen/arch/ia64/xen/mm.c    Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/xen/mm.c    Fri Sep 21 11:03:54 2007 -0600
@@ -181,6 +181,7 @@
 #include <asm/dom_fw_common.h>
 #include <public/memory.h>
 #include <asm/event.h>
+#include <asm/debugger.h>
 
 static void domain_page_flush_and_put(struct domain* d, unsigned long mpaddr,
                                       volatile pte_t* ptep, pte_t old_pte, 
@@ -762,6 +763,8 @@ unsigned long lookup_domain_mpa(struct d
                  current->vcpu_id, PSCB(current, iip),
                  d->domain_id, mpaddr, d->arch.convmem_end);
     }
+
+    debugger_event (XEN_IA64_DEBUG_ON_BAD_MPA);
 
     if (entry != NULL)
         p2m_entry_set(entry, NULL, __pte(0));
diff -r b2a02f7ed849 -r f3173d151e1d xen/arch/ia64/xen/privop.c
--- a/xen/arch/ia64/xen/privop.c        Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/arch/ia64/xen/privop.c        Fri Sep 21 11:03:54 2007 -0600
@@ -622,6 +622,8 @@ static IA64FAULT priv_handle_op(VCPU * v
        } else if (ia64_get_cpl(ipsr) > CONFIG_CPL0_EMUL)
                return IA64_ILLOP_FAULT;
 
+       debugger_event(XEN_IA64_DEBUG_ON_PRIVOP);
+
        switch (slot_type) {
        case M:
                if (inst.generic.major == 0) {
@@ -785,6 +787,9 @@ int ia64_hyperprivop(unsigned long iim, 
                return 1;
        }
        perfc_incra(slow_hyperprivop, iim);
+
+       debugger_event(XEN_IA64_DEBUG_ON_PRIVOP);
+
        switch (iim) {
        case HYPERPRIVOP_RFI:
                vcpu_rfi(v);
diff -r b2a02f7ed849 -r f3173d151e1d xen/include/asm-ia64/debugger.h
--- a/xen/include/asm-ia64/debugger.h   Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/include/asm-ia64/debugger.h   Fri Sep 21 11:03:54 2007 -0600
@@ -83,16 +83,31 @@ static inline int debugger_trap_fatal(
 #define debugger_trap_immediate()              ((void)0)
 #endif
 
-static inline int debugger_trap_entry(
-    unsigned int vector, struct cpu_user_regs *regs)
+static inline int debugger_event(unsigned long event)
 {
     struct vcpu *v = current;
+    struct domain *d = v->domain;
 
-    if (guest_kernel_mode(regs) && v->domain->debugger_attached) {
+    if (unlikely (d->debugger_attached && (d->arch.debug_flags & event))) {
+        d->arch.debug_event = event;
         domain_pause_for_debugger();
         return 1;
     }
+    return 0;
+}
 
+static inline int debugger_kernel_event(
+    struct cpu_user_regs *regs, unsigned long event)
+{
+    struct vcpu *v = current;
+    struct domain *d = v->domain;
+
+    if (unlikely(d->debugger_attached && (d->arch.debug_flags & event)
+                 && guest_kernel_mode(regs))) {
+        d->arch.debug_event = event;
+        domain_pause_for_debugger();
+        return 1;
+    }
     return 0;
 }
 
diff -r b2a02f7ed849 -r f3173d151e1d xen/include/asm-ia64/domain.h
--- a/xen/include/asm-ia64/domain.h     Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/include/asm-ia64/domain.h     Fri Sep 21 11:03:54 2007 -0600
@@ -181,6 +181,12 @@ struct arch_domain {
 
     struct opt_feature opt_feature;
 
+    /* Debugging flags.  See arch-ia64.h for bits definition.  */
+    unsigned int debug_flags;
+
+    /* Reason of debugging break.  */
+    unsigned int debug_event;
+
 #ifdef CONFIG_XEN_IA64_TLB_TRACK
     struct tlb_track*   tlb_track;
 #endif
diff -r b2a02f7ed849 -r f3173d151e1d xen/include/asm-ia64/vmx.h
--- a/xen/include/asm-ia64/vmx.h        Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/include/asm-ia64/vmx.h        Fri Sep 21 11:03:54 2007 -0600
@@ -39,8 +39,6 @@ extern int ia64_hypercall (struct pt_reg
 extern int ia64_hypercall (struct pt_regs *regs);
 extern void vmx_save_state(struct vcpu *v);
 extern void vmx_load_state(struct vcpu *v);
-extern void show_registers(struct pt_regs *regs);
-#define show_execution_state show_registers
 extern unsigned long __gpfn_to_mfn_foreign(struct domain *d, unsigned long 
gpfn);
 extern void sync_split_caches(void);
 extern void set_privileged_operation_isr (struct vcpu *vcpu,int inst);
diff -r b2a02f7ed849 -r f3173d151e1d xen/include/public/arch-ia64.h
--- a/xen/include/public/arch-ia64.h    Mon Sep 17 13:38:25 2007 -0600
+++ b/xen/include/public/arch-ia64.h    Fri Sep 21 11:03:54 2007 -0600
@@ -293,6 +293,8 @@ struct ia64_tr_entry {
     unsigned long vadr;
     unsigned long rid;
 };
+typedef struct ia64_tr_entry ia64_tr_entry_t;
+DEFINE_XEN_GUEST_HANDLE(ia64_tr_entry_t);
 
 struct vcpu_tr_regs {
     struct ia64_tr_entry itrs[8];
@@ -556,6 +558,82 @@ struct xen_ia64_boot_param {
 /* Fast and light hypercalls.  */
 #define __HYPERVISOR_ia64_fast_eoi     __HYPERVISOR_arch_1
 
+/* Extra debug features.  */
+#define __HYPERVISOR_ia64_debug_op  __HYPERVISOR_arch_2
+
+/* Set/Get extra conditions to break.  */
+#define XEN_IA64_DEBUG_OP_SET_FLAGS 1
+#define XEN_IA64_DEBUG_OP_GET_FLAGS 2
+
+/* Break on kernel single step.  */
+#define XEN_IA64_DEBUG_ON_KERN_SSTEP   (1 << 0)
+
+/* Break on kernel debug (breakpoint or watch point).  */
+#define XEN_IA64_DEBUG_ON_KERN_DEBUG   (1 << 1)
+
+/* Break on kernel taken branch.  */
+#define XEN_IA64_DEBUG_ON_KERN_TBRANCH (1 << 2)
+
+/* Break on interrupt injection.  */
+#define XEN_IA64_DEBUG_ON_EXTINT       (1 << 3)
+
+/* Break on interrupt injection.  */
+#define XEN_IA64_DEBUG_ON_EXCEPT       (1 << 4)
+
+/* Break on event injection.  */
+#define XEN_IA64_DEBUG_ON_EVENT        (1 << 5)
+
+/* Break on privop/virtualized instruction (slow path only).  */
+#define XEN_IA64_DEBUG_ON_PRIVOP       (1 << 6)
+
+/* Break on emulated PAL call (at entry).  */
+#define XEN_IA64_DEBUG_ON_PAL          (1 << 7)
+
+/* Break on emulated SAL call (at entry).  */
+#define XEN_IA64_DEBUG_ON_SAL          (1 << 8)
+
+/* Break on emulated EFI call (at entry).  */
+#define XEN_IA64_DEBUG_ON_EFI          (1 << 9)
+
+/* Break on rfi emulation (slow path only, before exec).  */
+#define XEN_IA64_DEBUG_ON_RFI          (1 << 10)
+
+/* Break on address translation switch.  */
+#define XEN_IA64_DEBUG_ON_MMU          (1 << 11)
+
+/* Break on bad guest physical address.  */
+#define XEN_IA64_DEBUG_ON_BAD_MPA      (1 << 12)
+
+/* Force psr.ss bit.  */
+#define XEN_IA64_DEBUG_FORCE_SS        (1 << 13)
+
+/* Force psr.db bit.  */
+#define XEN_IA64_DEBUG_FORCE_DB        (1 << 14)
+
+/* Break on ITR/PTR.  */
+#define XEN_IA64_DEBUG_ON_TR           (1 << 15)
+
+/* Break on ITC/PTC.L/PTC.G/PTC.GA.  */
+#define XEN_IA64_DEBUG_ON_TC           (1 << 16)
+
+/* Get translation cache.  */
+#define XEN_IA64_DEBUG_OP_GET_TC   3
+
+/* Translate virtual address to guest physical address.  */
+#define XEN_IA64_DEBUG_OP_TRANSLATE 4
+
+#ifndef __ASSEMBLY__
+union xen_ia64_debug_op {
+    uint64_t flags;
+    struct xen_ia64_debug_vtlb {
+        uint64_t nbr;                             /* IN/OUT */
+        XEN_GUEST_HANDLE_64(ia64_tr_entry_t) tr;  /* IN/OUT */
+    } vtlb;
+};
+typedef union xen_ia64_debug_op xen_ia64_debug_op_t;
+DEFINE_XEN_GUEST_HANDLE(xen_ia64_debug_op_t);
+#endif /* __ASSEMBLY__ */
+
 /* Xencomm macros.  */
 #define XENCOMM_INLINE_MASK 0xf800000000000000UL
 #define XENCOMM_INLINE_FLAG 0x8000000000000000UL

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [IA64] debug_op hypercall and debug points, Xen patchbot-unstable <=