[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] x86, vmx: Fix single step on debugger
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1230559526 0 # Node ID e0301796fce82b65411fb543d1d08342755d1efb # Parent d0751463539a47ab617856791a1b1283fa0d3373 x86, vmx: Fix single step on debugger Signed-off-by: Kouya Shimura <kouya@xxxxxxxxxxxxxx> --- xen/arch/x86/hvm/vmx/vmx.c | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+) diff -r d0751463539a -r e0301796fce8 xen/arch/x86/hvm/vmx/vmx.c --- a/xen/arch/x86/hvm/vmx/vmx.c Mon Dec 29 14:03:26 2008 +0000 +++ b/xen/arch/x86/hvm/vmx/vmx.c Mon Dec 29 14:05:26 2008 +0000 @@ -1314,8 +1314,29 @@ static void vmx_set_uc_mode(struct vcpu static void vmx_set_info_guest(struct vcpu *v) { + unsigned long intr_shadow; + vmx_vmcs_enter(v); + __vmwrite(GUEST_DR7, v->arch.guest_context.debugreg[7]); + + /* + * If the interruptibility-state field indicates blocking by STI, + * setting the TF flag in the EFLAGS may cause VM entry to fail + * and crash the guest. See SDM 3B 22.3.1.5. + * Resetting the VMX_INTR_SHADOW_STI flag looks hackish but + * to set the GUEST_PENDING_DBG_EXCEPTIONS.BS here incurs + * immediately vmexit and hence make no progress. + */ + intr_shadow = __vmread(GUEST_INTERRUPTIBILITY_INFO); + if ( v->domain->debugger_attached && + (v->arch.guest_context.user_regs.eflags & X86_EFLAGS_TF) && + (intr_shadow & VMX_INTR_SHADOW_STI) ) + { + intr_shadow &= ~VMX_INTR_SHADOW_STI; + __vmwrite(GUEST_INTERRUPTIBILITY_INFO, intr_shadow); + } + vmx_vmcs_exit(v); } _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |