From: Jack Lange Date: Mon, 11 Aug 2008 17:55:23 +0000 (+0000) Subject: cleaned up handler code X-Git-Tag: vmmhack1-ramdisk-boot-iso-puppy~4 X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=191587141ec414547ca95a7eb134a8cbb1b2a292 cleaned up handler code --- diff --git a/palacios/src/palacios/svm_handler.c b/palacios/src/palacios/svm_handler.c index bd99a44..8a1a32f 100644 --- a/palacios/src/palacios/svm_handler.c +++ b/palacios/src/palacios/svm_handler.c @@ -231,717 +231,65 @@ int handle_svm_exit(struct guest_info * info) { } break; - case VMEXIT_EXCP1: { + case VMEXIT_EXCP1: + { #ifdef DEBUG_EMULATOR - PrintDebug("DEBUG EXCEPTION\n"); + PrintDebug("DEBUG EXCEPTION\n"); #endif - if (info->run_state == VM_EMULATING) { - if (v3_emulation_exit_handler(info) == -1) { + if (info->run_state == VM_EMULATING) { + if (v3_emulation_exit_handler(info) == -1) { + return -1; + } + } else { + PrintError("VMMCALL with not emulator...\n"); return -1; } - } else { - PrintError("VMMCALL with not emulator...\n"); - return -1; - } - } - break; + break; + } - case VMEXIT_VMMCALL: { + + case VMEXIT_VMMCALL: + { #ifdef DEBUG_EMULATOR - PrintDebug("VMMCALL\n"); + PrintDebug("VMMCALL\n"); #endif - if (info->run_state == VM_EMULATING) { - if (v3_emulation_exit_handler(info) == -1) { + if (info->run_state == VM_EMULATING) { + if (v3_emulation_exit_handler(info) == -1) { + return -1; + } + } else { + PrintError("VMMCALL with not emulator...\n"); return -1; } - } else { - PrintError("VMMCALL with not emulator...\n"); - return -1; - } + break; + } - } - break; - case VMEXIT_WBINVD: { + case VMEXIT_WBINVD: + { #ifdef DEBUG_EMULATOR - PrintDebug("WBINVD\n"); + PrintDebug("WBINVD\n"); #endif - if (!handle_svm_wbinvd(info)) { - return -1; + if (!handle_svm_wbinvd(info)) { + return -1; + } + break; } - } - break; + /* Exits Following this line are NOT HANDLED */ /*=======================================================================*/ - case VMEXIT_CR_READ_MASK: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR_READ_MASK\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR_WRITE_MASK: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR_WRITE_MASK\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR1_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR1_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR1_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR1_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR2_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR2_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR2_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR2_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR4_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR4_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR4_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR4_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR5_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR5_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR5_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR5_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR6_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR6_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR6_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR6_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR7_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR7_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR7_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR7_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR8_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR8_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR8_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR8_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR9_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR9_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR9_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR9_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR10_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR10_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR10_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR10_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR11_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR11_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR11_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR11_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR12_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR12_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR12_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR12_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR13_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR13_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR13_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR13_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR14_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR14_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR14_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR14_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR15_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR15_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR15_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR15_WRITE\n"); - goto unhandled_exit; - break; - - - case VMEXIT_DR_READ_MASK: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR_READ_MASK\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR_WRITE_MASK: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR_WRITE_MASK\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR0_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR0_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR0_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR0_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR1_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR1_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR1_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR1_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR2_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR2_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR2_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR2_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR3_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR3_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR3_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR3_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR4_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR4_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR4_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR4_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR5_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR5_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR5_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR5_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR6_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR6_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR6_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR6_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR7_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR7_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR7_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR7_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR8_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR8_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR8_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR8_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR9_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR9_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR9_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR9_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR10_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR10_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR10_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR10_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR11_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR11_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR11_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR11_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR12_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR12_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR12_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR12_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR13_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR13_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR13_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR13_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR14_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR14_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR14_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR14_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR15_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR15_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_DR15_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_DR15_WRITE\n"); - goto unhandled_exit; - break; - - - case VMEXIT_EXCP_MASK: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP_MASK\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP0: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP0\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP2: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP2\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP3: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP3\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP4: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP4\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP5: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP5\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP6: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP6\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP7: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP7\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP8: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP8\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP9: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP9\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP10: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP10\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP11: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP11\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP12: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP12\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP13: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP13\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP15: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP15\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP16: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP16\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP17: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP17\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP18: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP18\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP19: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP19\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP20: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP20\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP21: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP21\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP22: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP22\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP23: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP23\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP24: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP24\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP25: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP25\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP26: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP26\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP27: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP27\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP28: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP28\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP29: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP29\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP30: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP30\n"); - goto unhandled_exit; - break; - - case VMEXIT_EXCP31: - PrintDebug("Unhandled SVM Exit: VMEXIT_EXCP31\n"); - goto unhandled_exit; - break; - - - case VMEXIT_NMI: - PrintDebug("Unhandled SVM Exit: VMEXIT_NMI\n"); - goto unhandled_exit; - break; - - case VMEXIT_INIT: - PrintDebug("Unhandled SVM Exit: VMEXIT_INIT\n"); - goto unhandled_exit; - break; - - case VMEXIT_VINITR: - PrintDebug("Unhandled SVM Exit: VMEXIT_VINITR\n"); - goto unhandled_exit; - break; - - case VMEXIT_CR0_SEL_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_CR0_SEL_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_IDTR_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_IDTR_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_IDTR_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_IDTR_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_GDTR_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_GDTR_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_GDTR_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_GDTR_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_LDTR_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_LDTR_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_LDTR_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_LDTR_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_TR_READ: - PrintDebug("Unhandled SVM Exit: VMEXIT_TR_READ\n"); - goto unhandled_exit; - break; - - case VMEXIT_TR_WRITE: - PrintDebug("Unhandled SVM Exit: VMEXIT_TR_WRITE\n"); - goto unhandled_exit; - break; - - case VMEXIT_RDTSC: - PrintDebug("Unhandled SVM Exit: VMEXIT_RDTSC\n"); - goto unhandled_exit; - break; - - case VMEXIT_RDPMC: - PrintDebug("Unhandled SVM Exit: VMEXIT_RDPMC\n"); - goto unhandled_exit; - break; - - case VMEXIT_PUSHF: - PrintDebug("Unhandled SVM Exit: VMEXIT_PUSHF\n"); - goto unhandled_exit; - break; - - case VMEXIT_POPF: - PrintDebug("Unhandled SVM Exit: VMEXIT_POPF\n"); - goto unhandled_exit; - break; - - case VMEXIT_CPUID: - PrintDebug("Unhandled SVM Exit: VMEXIT_CPUID\n"); - goto unhandled_exit; - break; - - case VMEXIT_RSM: - PrintDebug("Unhandled SVM Exit: VMEXIT_RSM\n"); - goto unhandled_exit; - break; - - case VMEXIT_IRET: - PrintDebug("Unhandled SVM Exit: VMEXIT_IRET\n"); - goto unhandled_exit; - break; - - case VMEXIT_SWINT: - PrintDebug("Unhandled SVM Exit: VMEXIT_SWINT\n"); - goto unhandled_exit; - break; - - case VMEXIT_INVD: - PrintDebug("Unhandled SVM Exit: VMEXIT_INVD\n"); - goto unhandled_exit; - break; - - case VMEXIT_INVLPGA: - PrintDebug("Unhandled SVM Exit: VMEXIT_INVLPGA\n"); - goto unhandled_exit; - break; - - case VMEXIT_TASK_SWITCH: - PrintDebug("Unhandled SVM Exit: VMEXIT_TASK_SWITCH\n"); - goto unhandled_exit; - break; - - case VMEXIT_FERR_FREEZE: - PrintDebug("Unhandled SVM Exit: VMEXIT_FERR_FREEZE\n"); - goto unhandled_exit; - break; - - case VMEXIT_SHUTDOWN: - PrintDebug("Unhandled SVM Exit: VMEXIT_SHUTDOWN\n"); - goto unhandled_exit; - break; - - case VMEXIT_VMRUN: - PrintDebug("Unhandled SVM Exit: VMEXIT_VMRUN\n"); - goto unhandled_exit; - break; - - - case VMEXIT_STGI: - PrintDebug("Unhandled SVM Exit: VMEXIT_STGI\n"); - goto unhandled_exit; - break; - - case VMEXIT_CLGI: - PrintDebug("Unhandled SVM Exit: VMEXIT_CLGI\n"); - goto unhandled_exit; - break; - - case VMEXIT_SKINIT: - PrintDebug("Unhandled SVM Exit: VMEXIT_SKINIT\n"); - goto unhandled_exit; - break; - - case VMEXIT_RDTSCP: - PrintDebug("Unhandled SVM Exit: VMEXIT_RDTSCP\n"); - goto unhandled_exit; - break; - - case VMEXIT_ICEBP: - PrintDebug("Unhandled SVM Exit: VMEXIT_ICEBP\n"); - goto unhandled_exit; - break; - - case VMEXIT_MONITOR: - PrintDebug("Unhandled SVM Exit: VMEXIT_MONITOR\n"); - goto unhandled_exit; - break; - - case VMEXIT_MWAIT: - PrintDebug("Unhandled SVM Exit: VMEXIT_MWAIT\n"); - goto unhandled_exit; - break; - - case VMEXIT_MWAIT_CONDITIONAL: - PrintDebug("Unhandled SVM Exit: VMEXIT_MWAIT_CONDITIONAL\n"); - goto unhandled_exit; - break; - - - case VMEXIT_INVALID_VMCB: - PrintDebug("Unhandled SVM Exit: VMEXIT_INVALID_VMCB\n"); - goto unhandled_exit; - break; - - - unhandled_exit: - default: { - + addr_t rip_addr; char buf[15]; addr_t host_addr; + PrintDebug("Unhandled SVM Exit: %s\n", vmexit_code_to_str(exit_code)); rip_addr = get_addr_linear(info, guest_state->rip, &(info->segments.cs)); @@ -950,7 +298,7 @@ int handle_svm_exit(struct guest_info * info) { PrintError("RIP: %x\n", guest_state->rip); PrintError("RIP Linear: %x\n", rip_addr); - PrintError("SVM Returned: Exit Code: %x\n",exit_code); + PrintError("SVM Returned: Exit Code: %x\n", exit_code); PrintError("io_info1 low = 0x%.8x\n", *(uint_t*)&(guest_ctrl->exit_info1)); PrintError("io_info1 high = 0x%.8x\n", *(uint_t *)(((uchar_t *)&(guest_ctrl->exit_info1)) + 4)); @@ -1100,3 +448,298 @@ int handle_svm_exit(struct guest_info * info) { return 0; } + + + +const uchar_t * vmexit_code_to_str(uint_t exit_code) { + + switch(exit_code) { + case VMEXIT_CR0_READ: + return VMEXIT_CR0_READ_STR; + case VMEXIT_CR1_READ: + return VMEXIT_CR1_READ_STR; + case VMEXIT_CR2_READ: + return VMEXIT_CR2_READ_STR; + case VMEXIT_CR3_READ: + return VMEXIT_CR3_READ_STR; + case VMEXIT_CR4_READ: + return VMEXIT_CR4_READ_STR; + case VMEXIT_CR5_READ: + return VMEXIT_CR5_READ_STR; + case VMEXIT_CR6_READ: + return VMEXIT_CR6_READ_STR; + case VMEXIT_CR7_READ: + return VMEXIT_CR7_READ_STR; + case VMEXIT_CR8_READ: + return VMEXIT_CR8_READ_STR; + case VMEXIT_CR9_READ: + return VMEXIT_CR9_READ_STR; + case VMEXIT_CR10_READ: + return VMEXIT_CR10_READ_STR; + case VMEXIT_CR11_READ: + return VMEXIT_CR11_READ_STR; + case VMEXIT_CR12_READ: + return VMEXIT_CR12_READ_STR; + case VMEXIT_CR13_READ: + return VMEXIT_CR13_READ_STR; + case VMEXIT_CR14_READ: + return VMEXIT_CR14_READ_STR; + case VMEXIT_CR15_READ: + return VMEXIT_CR15_READ_STR; + case VMEXIT_CR0_WRITE: + return VMEXIT_CR0_WRITE_STR; + case VMEXIT_CR1_WRITE: + return VMEXIT_CR1_WRITE_STR; + case VMEXIT_CR2_WRITE: + return VMEXIT_CR2_WRITE_STR; + case VMEXIT_CR3_WRITE: + return VMEXIT_CR3_WRITE_STR; + case VMEXIT_CR4_WRITE: + return VMEXIT_CR4_WRITE_STR; + case VMEXIT_CR5_WRITE: + return VMEXIT_CR5_WRITE_STR; + case VMEXIT_CR6_WRITE: + return VMEXIT_CR6_WRITE_STR; + case VMEXIT_CR7_WRITE: + return VMEXIT_CR7_WRITE_STR; + case VMEXIT_CR8_WRITE: + return VMEXIT_CR8_WRITE_STR; + case VMEXIT_CR9_WRITE: + return VMEXIT_CR9_WRITE_STR; + case VMEXIT_CR10_WRITE: + return VMEXIT_CR10_WRITE_STR; + case VMEXIT_CR11_WRITE: + return VMEXIT_CR11_WRITE_STR; + case VMEXIT_CR12_WRITE: + return VMEXIT_CR12_WRITE_STR; + case VMEXIT_CR13_WRITE: + return VMEXIT_CR13_WRITE_STR; + case VMEXIT_CR14_WRITE: + return VMEXIT_CR14_WRITE_STR; + case VMEXIT_CR15_WRITE: + return VMEXIT_CR15_WRITE_STR; + case VMEXIT_DR0_READ: + return VMEXIT_DR0_READ_STR; + case VMEXIT_DR1_READ: + return VMEXIT_DR1_READ_STR; + case VMEXIT_DR2_READ: + return VMEXIT_DR2_READ_STR; + case VMEXIT_DR3_READ: + return VMEXIT_DR3_READ_STR; + case VMEXIT_DR4_READ: + return VMEXIT_DR4_READ_STR; + case VMEXIT_DR5_READ: + return VMEXIT_DR5_READ_STR; + case VMEXIT_DR6_READ: + return VMEXIT_DR6_READ_STR; + case VMEXIT_DR7_READ: + return VMEXIT_DR7_READ_STR; + case VMEXIT_DR8_READ: + return VMEXIT_DR8_READ_STR; + case VMEXIT_DR9_READ: + return VMEXIT_DR9_READ_STR; + case VMEXIT_DR10_READ: + return VMEXIT_DR10_READ_STR; + case VMEXIT_DR11_READ: + return VMEXIT_DR11_READ_STR; + case VMEXIT_DR12_READ: + return VMEXIT_DR12_READ_STR; + case VMEXIT_DR13_READ: + return VMEXIT_DR13_READ_STR; + case VMEXIT_DR14_READ: + return VMEXIT_DR14_READ_STR; + case VMEXIT_DR15_READ: + return VMEXIT_DR15_READ_STR; + case VMEXIT_DR0_WRITE: + return VMEXIT_DR0_WRITE_STR; + case VMEXIT_DR1_WRITE: + return VMEXIT_DR1_WRITE_STR; + case VMEXIT_DR2_WRITE: + return VMEXIT_DR2_WRITE_STR; + case VMEXIT_DR3_WRITE: + return VMEXIT_DR3_WRITE_STR; + case VMEXIT_DR4_WRITE: + return VMEXIT_DR4_WRITE_STR; + case VMEXIT_DR5_WRITE: + return VMEXIT_DR5_WRITE_STR; + case VMEXIT_DR6_WRITE: + return VMEXIT_DR6_WRITE_STR; + case VMEXIT_DR7_WRITE: + return VMEXIT_DR7_WRITE_STR; + case VMEXIT_DR8_WRITE: + return VMEXIT_DR8_WRITE_STR; + case VMEXIT_DR9_WRITE: + return VMEXIT_DR9_WRITE_STR; + case VMEXIT_DR10_WRITE: + return VMEXIT_DR10_WRITE_STR; + case VMEXIT_DR11_WRITE: + return VMEXIT_DR11_WRITE_STR; + case VMEXIT_DR12_WRITE: + return VMEXIT_DR12_WRITE_STR; + case VMEXIT_DR13_WRITE: + return VMEXIT_DR13_WRITE_STR; + case VMEXIT_DR14_WRITE: + return VMEXIT_DR14_WRITE_STR; + case VMEXIT_DR15_WRITE: + return VMEXIT_DR15_WRITE_STR; + case VMEXIT_EXCP0: + return VMEXIT_EXCP0_STR; + case VMEXIT_EXCP1: + return VMEXIT_EXCP1_STR; + case VMEXIT_EXCP2: + return VMEXIT_EXCP2_STR; + case VMEXIT_EXCP3: + return VMEXIT_EXCP3_STR; + case VMEXIT_EXCP4: + return VMEXIT_EXCP4_STR; + case VMEXIT_EXCP5: + return VMEXIT_EXCP5_STR; + case VMEXIT_EXCP6: + return VMEXIT_EXCP6_STR; + case VMEXIT_EXCP7: + return VMEXIT_EXCP7_STR; + case VMEXIT_EXCP8: + return VMEXIT_EXCP8_STR; + case VMEXIT_EXCP9: + return VMEXIT_EXCP9_STR; + case VMEXIT_EXCP10: + return VMEXIT_EXCP10_STR; + case VMEXIT_EXCP11: + return VMEXIT_EXCP11_STR; + case VMEXIT_EXCP12: + return VMEXIT_EXCP12_STR; + case VMEXIT_EXCP13: + return VMEXIT_EXCP13_STR; + case VMEXIT_EXCP14: + return VMEXIT_EXCP14_STR; + case VMEXIT_EXCP15: + return VMEXIT_EXCP15_STR; + case VMEXIT_EXCP16: + return VMEXIT_EXCP16_STR; + case VMEXIT_EXCP17: + return VMEXIT_EXCP17_STR; + case VMEXIT_EXCP18: + return VMEXIT_EXCP18_STR; + case VMEXIT_EXCP19: + return VMEXIT_EXCP19_STR; + case VMEXIT_EXCP20: + return VMEXIT_EXCP20_STR; + case VMEXIT_EXCP21: + return VMEXIT_EXCP21_STR; + case VMEXIT_EXCP22: + return VMEXIT_EXCP22_STR; + case VMEXIT_EXCP23: + return VMEXIT_EXCP23_STR; + case VMEXIT_EXCP24: + return VMEXIT_EXCP24_STR; + case VMEXIT_EXCP25: + return VMEXIT_EXCP25_STR; + case VMEXIT_EXCP26: + return VMEXIT_EXCP26_STR; + case VMEXIT_EXCP27: + return VMEXIT_EXCP27_STR; + case VMEXIT_EXCP28: + return VMEXIT_EXCP28_STR; + case VMEXIT_EXCP29: + return VMEXIT_EXCP29_STR; + case VMEXIT_EXCP30: + return VMEXIT_EXCP30_STR; + case VMEXIT_EXCP31: + return VMEXIT_EXCP31_STR; + case VMEXIT_INTR: + return VMEXIT_INTR_STR; + case VMEXIT_NMI: + return VMEXIT_NMI_STR; + case VMEXIT_SMI: + return VMEXIT_SMI_STR; + case VMEXIT_INIT: + return VMEXIT_INIT_STR; + case VMEXIT_VINITR: + return VMEXIT_VINITR_STR; + case VMEXIT_CR0_SEL_WRITE: + return VMEXIT_CR0_SEL_WRITE_STR; + case VMEXIT_IDTR_READ: + return VMEXIT_IDTR_READ_STR; + case VMEXIT_GDTR_READ: + return VMEXIT_GDTR_READ_STR; + case VMEXIT_LDTR_READ: + return VMEXIT_LDTR_READ_STR; + case VMEXIT_TR_READ: + return VMEXIT_TR_READ_STR; + case VMEXIT_IDTR_WRITE: + return VMEXIT_IDTR_WRITE_STR; + case VMEXIT_GDTR_WRITE: + return VMEXIT_GDTR_WRITE_STR; + case VMEXIT_LDTR_WRITE: + return VMEXIT_LDTR_WRITE_STR; + case VMEXIT_TR_WRITE: + return VMEXIT_TR_WRITE_STR; + case VMEXIT_RDTSC: + return VMEXIT_RDTSC_STR; + case VMEXIT_RDPMC: + return VMEXIT_RDPMC_STR; + case VMEXIT_PUSHF: + return VMEXIT_PUSHF_STR; + case VMEXIT_POPF: + return VMEXIT_POPF_STR; + case VMEXIT_CPUID: + return VMEXIT_CPUID_STR; + case VMEXIT_RSM: + return VMEXIT_RSM_STR; + case VMEXIT_IRET: + return VMEXIT_IRET_STR; + case VMEXIT_SWINT: + return VMEXIT_SWINT_STR; + case VMEXIT_INVD: + return VMEXIT_INVD_STR; + case VMEXIT_PAUSE: + return VMEXIT_PAUSE_STR; + case VMEXIT_HLT: + return VMEXIT_HLT_STR; + case VMEXIT_INVLPG: + return VMEXIT_INVLPG_STR; + case VMEXIT_INVLPGA: + return VMEXIT_INVLPGA_STR; + case VMEXIT_IOIO: + return VMEXIT_IOIO_STR; + case VMEXIT_MSR: + return VMEXIT_MSR_STR; + case VMEXIT_TASK_SWITCH: + return VMEXIT_TASK_SWITCH_STR; + case VMEXIT_FERR_FREEZE: + return VMEXIT_FERR_FREEZE_STR; + case VMEXIT_SHUTDOWN: + return VMEXIT_SHUTDOWN_STR; + case VMEXIT_VMRUN: + return VMEXIT_VMRUN_STR; + case VMEXIT_VMMCALL: + return VMEXIT_VMMCALL_STR; + case VMEXIT_VMLOAD: + return VMEXIT_VMLOAD_STR; + case VMEXIT_VMSAVE: + return VMEXIT_VMSAVE_STR; + case VMEXIT_STGI: + return VMEXIT_STGI_STR; + case VMEXIT_CLGI: + return VMEXIT_CLGI_STR; + case VMEXIT_SKINIT: + return VMEXIT_SKINIT_STR; + case VMEXIT_RDTSCP: + return VMEXIT_RDTSCP_STR; + case VMEXIT_ICEBP: + return VMEXIT_ICEBP_STR; + case VMEXIT_WBINVD: + return VMEXIT_WBINVD_STR; + case VMEXIT_MONITOR: + return VMEXIT_MONITOR_STR; + case VMEXIT_MWAIT: + return VMEXIT_MWAIT_STR; + case VMEXIT_MWAIT_CONDITIONAL: + return VMEXIT_MWAIT_CONDITIONAL_STR; + case VMEXIT_NPF: + return VMEXIT_NPF_STR; + case VMEXIT_INVALID_VMCB: + return VMEXIT_INVALID_VMCB_STR; + } + return NULL; +}