|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH] Fix the mistake for #BP and #OF exception handler
Fix the mistake for breakpoint exception(#BP; generated by INT3), overflow
exception(#OF; generated by INTO) and int n instruction emulation.
#BP and #OF should use software exception, which int n instruction should use
software interrupt.
Signed-off-by: Eddie Dong<eddie.dong@xxxxxxxxx>
Signed-off-by: Xudong Hao <xudong.hao@xxxxxxxxx>
diff -r 98fe3b2a572d xen/arch/x86/hvm/vmx/vmx.c
--- a/xen/arch/x86/hvm/vmx/vmx.c Tue May 01 14:20:37 2012 +0100
+++ b/xen/arch/x86/hvm/vmx/vmx.c Sun May 12 03:14:04 2013 +0800
@@ -1350,6 +1350,15 @@ static void __vmx_inject_exception(int t
curr->arch.hvm_vmx.vmx_emulate = 1;
}
+/*
+ * Generate the virtual event to guest.
+ * NOTE:
+ * This is for processor execution generated exceptions,
+ * and INT 3(CC), INTO (CE) instruction emulation. It is
+ * not intended for the delivery of event due to emulation
+ * of INT nn (CD nn) instruction, which should use
+ * X86_EVENTTYPE_SW_INTERRUPT as interrupt type.
+ */
void vmx_inject_hw_exception(int trap, int error_code)
{
unsigned long intr_info;
@@ -1365,7 +1374,6 @@ void vmx_inject_hw_exception(int trap, i
switch ( trap )
{
case TRAP_debug:
- type = X86_EVENTTYPE_SW_EXCEPTION;
if ( guest_cpu_user_regs()->eflags & X86_EFLAGS_TF )
{
__restore_debug_registers(curr);
@@ -1387,10 +1395,15 @@ void vmx_inject_hw_exception(int trap, i
__vmwrite(VM_ENTRY_INSTRUCTION_LEN, 1); /* int3 */
break;
+ case TRAP_overflow:
+ type = X86_EVENTTYPE_SW_EXCEPTION;
+ __vmwrite(VM_ENTRY_INSTRUCTION_LEN, 1); /* into */
+ break;
+
default:
if ( trap > TRAP_last_reserved )
{
- type = X86_EVENTTYPE_SW_EXCEPTION;
+ type = X86_EVENTTYPE_SW_INTERRUPT;
__vmwrite(VM_ENTRY_INSTRUCTION_LEN, 2); /* int imm8 */
}
break;
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |