x86, vmx: Fix single step on debugger

Signed-off-by: Kouya Shimura <kouya@jp.fujitsu.com>
This commit is contained in:
Keir Fraser committed 2008-12-29 14:05:26 +00:00
1 parent 846d032508
commit bbdcb2fd41
1 file changed
+21
+21
View File
@@ -1314,8 +1314,29 @@ static void vmx_set_uc_mode(struct vcpu *v)
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);
}
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.