X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fsvm_handler.c;h=78f62e8cdbfdee224023cef06ec4e48c1c1f8ff9;hb=a4fd5bcc79e7cdf9a3bd879294566bff0666ced7;hp=5736234e2b491475cb08f2bbcec0b292e2c54837;hpb=cfcceed5890430afedcc544bd7dbb69e29dfd65a;p=palacios.git diff --git a/palacios/src/palacios/svm_handler.c b/palacios/src/palacios/svm_handler.c index 5736234..78f62e8 100644 --- a/palacios/src/palacios/svm_handler.c +++ b/palacios/src/palacios/svm_handler.c @@ -25,101 +25,55 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include -#ifdef CONFIG_TELEMETRY -#include +#ifdef V3_CONFIG_TM_FUNC +#include #endif - -int v3_handle_svm_exit(struct guest_info * info) { - vmcb_ctrl_t * guest_ctrl = 0; - vmcb_saved_state_t * guest_state = 0; - ulong_t exit_code = 0; - - guest_ctrl = GET_VMCB_CTRL_AREA((vmcb_t*)(info->vmm_data)); - guest_state = GET_VMCB_SAVE_STATE_AREA((vmcb_t*)(info->vmm_data)); - - // Update the high level state - info->rip = guest_state->rip; - info->vm_regs.rsp = guest_state->rsp; - info->vm_regs.rax = guest_state->rax; - - info->cpl = guest_state->cpl; - - info->ctrl_regs.cr0 = guest_state->cr0; - info->ctrl_regs.cr2 = guest_state->cr2; - info->ctrl_regs.cr3 = guest_state->cr3; - info->ctrl_regs.cr4 = guest_state->cr4; - info->dbg_regs.dr6 = guest_state->dr6; - info->dbg_regs.dr7 = guest_state->dr7; - info->ctrl_regs.cr8 = guest_ctrl->guest_ctrl.V_TPR; - info->ctrl_regs.rflags = guest_state->rflags; - info->ctrl_regs.efer = guest_state->efer; - - v3_get_vmcb_segments((vmcb_t*)(info->vmm_data), &(info->segments)); - info->cpu_mode = v3_get_vm_cpu_mode(info); - info->mem_mode = v3_get_vm_mem_mode(info); - - exit_code = guest_ctrl->exit_code; - - // PrintDebug("SVM Exit: %s (rip=%p) (info1=%p)\n", vmexit_code_to_str(exit_code), - // (void *)(addr_t)info->rip, (void *)(addr_t)guest_ctrl->exit_info1); - - if ((info->intr_state.irq_pending == 1) && (guest_ctrl->guest_ctrl.V_IRQ == 0)) { - -#ifdef CONFIG_DEBUG_INTERRUPTS - PrintDebug("INTAK cycle completed for irq %d\n", info->intr_state.irq_vector); +#ifndef V3_CONFIG_DEBUG_SVM +#undef PrintDebug +#define PrintDebug(fmt, args...) #endif - info->intr_state.irq_started = 1; - info->intr_state.irq_pending = 0; - - v3_injecting_intr(info, info->intr_state.irq_vector, V3_EXTERNAL_IRQ); - } - - if ((info->intr_state.irq_started == 1) && (guest_ctrl->exit_int_info.valid == 0)) { -#ifdef CONFIG_DEBUG_INTERRUPTS - PrintDebug("Interrupt %d taken by guest\n", info->intr_state.irq_vector); +#ifdef V3_CONFIG_TELEMETRY +#include #endif - // Interrupt was taken fully vectored - info->intr_state.irq_started = 0; - - } else { -#ifdef CONFIG_DEBUG_INTERRUPTS - PrintDebug("EXIT INT INFO is set (vec=%d)\n", guest_ctrl->exit_int_info.vector); +#ifdef V3_CONFIG_EXT_SW_INTERRUPTS +#include #endif - } +int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_info1, addr_t exit_info2) { -#ifdef CONFIG_TELEMETRY - if (info->enable_telemetry) { +#ifdef V3_CONFIG_TELEMETRY + if (info->vm_info->enable_telemetry) { v3_telemetry_start_exit(info); } #endif - - //PrintDebug("SVM Returned: Exit Code: %x\n",exit_code); + // PrintDebug(info->vm_info, info, "SVM Returned: Exit Code: %p\n", (void *)exit_code); switch (exit_code) { - case VMEXIT_IOIO: { - struct svm_io_info * io_info = (struct svm_io_info *)&(guest_ctrl->exit_info1); + case SVM_EXIT_IOIO: { + struct svm_io_info * io_info = (struct svm_io_info *)&(exit_info1); if (io_info->type == 0) { if (io_info->str) { - if (v3_handle_svm_io_outs(info) == -1 ) { + if (v3_handle_svm_io_outs(info, io_info) == -1 ) { return -1; } } else { - if (v3_handle_svm_io_out(info) == -1) { + if (v3_handle_svm_io_out(info, io_info) == -1) { return -1; } } @@ -127,85 +81,117 @@ int v3_handle_svm_exit(struct guest_info * info) { } else { if (io_info->str) { - if (v3_handle_svm_io_ins(info) == -1) { + if (v3_handle_svm_io_ins(info, io_info) == -1) { return -1; } } else { - if (v3_handle_svm_io_in(info) == -1) { + if (v3_handle_svm_io_in(info, io_info) == -1) { return -1; } } } + + info->rip = exit_info2; + break; } - case VMEXIT_MSR: - if (guest_ctrl->exit_info1 == 0) { + case SVM_EXIT_MSR: + + if (exit_info1 == 0) { if (v3_handle_msr_read(info) == -1) { return -1; } - } else if (guest_ctrl->exit_info1 == 1) { + } else if (exit_info1 == 1) { if (v3_handle_msr_write(info) == -1) { return -1; } } else { - PrintError("Invalid MSR Operation\n"); + PrintError(info->vm_info, info, "Invalid MSR Operation\n"); return -1; } break; - case VMEXIT_CR0_WRITE: -#ifdef CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR0 Write\n"); + + case SVM_EXIT_CPUID: + if (v3_handle_cpuid(info) == -1) { + PrintError(info->vm_info, info, "Error handling CPUID\n"); + return -1; + } + + break; + case SVM_EXIT_CR0_WRITE: +#ifdef V3_CONFIG_DEBUG_CTRL_REGS + PrintDebug(info->vm_info, info, "CR0 Write\n"); #endif if (v3_handle_cr0_write(info) == -1) { return -1; } break; - case VMEXIT_CR0_READ: -#ifdef CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR0 Read\n"); + case SVM_EXIT_CR0_READ: +#ifdef V3_CONFIG_DEBUG_CTRL_REGS + PrintDebug(info->vm_info, info, "CR0 Read\n"); #endif if (v3_handle_cr0_read(info) == -1) { return -1; } break; - case VMEXIT_CR3_WRITE: -#ifdef CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR3 Write\n"); + case SVM_EXIT_CR3_WRITE: +#ifdef V3_CONFIG_DEBUG_CTRL_REGS + PrintDebug(info->vm_info, info, "CR3 Write\n"); #endif if (v3_handle_cr3_write(info) == -1) { return -1; } + break; - case VMEXIT_CR3_READ: -#ifdef CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR3 Read\n"); + case SVM_EXIT_CR3_READ: +#ifdef V3_CONFIG_DEBUG_CTRL_REGS + PrintDebug(info->vm_info, info, "CR3 Read\n"); #endif if (v3_handle_cr3_read(info) == -1) { return -1; } break; - case VMEXIT_CR4_WRITE: -#ifdef CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR4 Write\n"); + case SVM_EXIT_CR4_WRITE: +#ifdef V3_CONFIG_DEBUG_CTRL_REGS + PrintDebug(info->vm_info, info, "CR4 Write\n"); #endif if (v3_handle_cr4_write(info) == -1) { return -1; } break; - case VMEXIT_CR4_READ: -#ifdef CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR4 Read\n"); + case SVM_EXIT_CR4_READ: +#ifdef V3_CONFIG_DEBUG_CTRL_REGS + PrintDebug(info->vm_info, info, "CR4 Read\n"); #endif if (v3_handle_cr4_read(info) == -1) { return -1; } break; - case VMEXIT_EXCP14: { - addr_t fault_addr = guest_ctrl->exit_info2; - pf_error_t * error_code = (pf_error_t *)&(guest_ctrl->exit_info1); -#ifdef CONFIG_DEBUG_SHADOW_PAGING - PrintDebug("PageFault at %p (error=%d)\n", + + case SVM_EXIT_CR8_WRITE: +#ifdef V3_CONFIG_DEBUG_CTRL_REGS + PrintDebug(info->vm_info, info, "CR8 Read\n"); +#endif + if (v3_handle_cr8_read(info) == -1) { + return -1; + } + break; + + case SVM_EXIT_CR8_READ: +#ifdef V3_CONFIG_DEBUG_CTRL_REGS + PrintDebug(info->vm_info, info, "CR8 Read\n"); +#endif + if (v3_handle_cr8_read(info) == -1) { + return -1; + } + break; + + case SVM_EXIT_EXCP14: { + addr_t fault_addr = exit_info2; + pf_error_t * error_code = (pf_error_t *)&(exit_info1); +#ifdef V3_CONFIG_DEBUG_SHADOW_PAGING + PrintDebug(info->vm_info, info, "PageFault at %p (error=%d)\n", (void *)fault_addr, *(uint_t *)error_code); #endif if (info->shdw_pg_mode == SHADOW_PAGING) { @@ -213,78 +199,161 @@ int v3_handle_svm_exit(struct guest_info * info) { return -1; } } else { - PrintError("Page fault in un implemented paging mode\n"); + PrintError(info->vm_info, info, "Page fault in un implemented paging mode\n"); return -1; } break; } - case VMEXIT_NPF: { - addr_t fault_addr = guest_ctrl->exit_info2; - pf_error_t * error_code = (pf_error_t *)&(guest_ctrl->exit_info1); + +#ifdef V3_CONFIG_TM_FUNC + case SVM_EXIT_EXCP6: + case SVM_EXIT_EXCP0: + case SVM_EXIT_EXCP1: + case SVM_EXIT_EXCP3: + case SVM_EXIT_EXCP4: + case SVM_EXIT_EXCP5: + case SVM_EXIT_EXCP7: + case SVM_EXIT_EXCP10: + case SVM_EXIT_EXCP11: + case SVM_EXIT_EXCP12: + case SVM_EXIT_EXCP13: + case SVM_EXIT_EXCP16: + case SVM_EXIT_EXCP17: + case SVM_EXIT_EXCP19: + if (v3_tm_handle_exception(info, exit_code) == -1) { + return -1; + } + break; +#endif + + case SVM_EXIT_NPF: { + addr_t fault_addr = exit_info2; + pf_error_t * error_code = (pf_error_t *)&(exit_info1); if (info->shdw_pg_mode == NESTED_PAGING) { - if (v3_handle_nested_pagefault(info, fault_addr, *error_code) == -1) { + if (v3_handle_nested_pagefault(info, fault_addr, error_code, NULL, NULL) == -1) { return -1; } } else { - PrintError("Currently unhandled Nested Page Fault\n"); + PrintError(info->vm_info, info, "Currently unhandled Nested Page Fault\n"); return -1; } break; } - case VMEXIT_INVLPG: + case SVM_EXIT_INVLPG: if (info->shdw_pg_mode == SHADOW_PAGING) { -#ifdef CONFIG_DEBUG_SHADOW_PAGING - PrintDebug("Invlpg\n"); +#ifdef V3_CONFIG_DEBUG_SHADOW_PAGING + PrintDebug(info->vm_info, info, "Invlpg\n"); #endif if (v3_handle_shadow_invlpg(info) == -1) { return -1; } } break; - case VMEXIT_VMMCALL: + case SVM_EXIT_VMMCALL: /* * Hypercall */ - + + // VMMCALL is a 3 byte op + // We do this early because some hypercalls can change the rip... + info->rip += 3; + if (v3_handle_hypercall(info) == -1) { + PrintError(info->vm_info, info, "Error handling Hypercall\n"); return -1; } - - // VMMCALL is a 3 byte op - info->rip += 3; - break; - case VMEXIT_INTR: + + break; + case SVM_EXIT_NMI: + // handled by interrupt dispatcher + break; + case SVM_EXIT_INTR: // handled by interrupt dispatch earlier break; - case VMEXIT_SMI: + case SVM_EXIT_SMI: // handle_svm_smi(info); // ignored for now break; - case VMEXIT_HLT: -#ifdef CONFIG_DEBUG_HALT - PrintDebug("Guest halted\n"); + case SVM_EXIT_HLT: +#ifdef V3_CONFIG_DEBUG_HALT + PrintDebug(info->vm_info, info, "Guest halted\n"); #endif if (v3_handle_halt(info) == -1) { return -1; } break; - case VMEXIT_PAUSE: - //PrintDebug("Guest paused\n"); + + case SVM_EXIT_MONITOR: +#ifdef V3_CONFIG_DEBUG_MWAIT + PrintDebug(info->vm_info, info, "Guest issuing MONITOR\n"); +#endif + if (v3_handle_monitor(info) == -1) { + return -1; + } + break; + + case SVM_EXIT_MWAIT: + case SVM_EXIT_MWAIT_CONDITIONAL: +#ifdef V3_CONFIG_DEBUG_MWAIT + PrintDebug(info->vm_info, info, "Guest issuing MWAIT\n"); +#endif + if (v3_handle_mwait(info) == -1) { + return -1; + } + break; + + case SVM_EXIT_PAUSE: + // PrintDebug(info->vm_info, info, "Guest paused\n"); if (v3_handle_svm_pause(info) == -1) { return -1; } break; - case VMEXIT_WBINVD: -#ifdef CONFIG_DEBUG_EMULATOR - PrintDebug("WBINVD\n"); + case SVM_EXIT_WBINVD: +#ifdef V3_CONFIG_DEBUG_EMULATOR + PrintDebug(info->vm_info, info, "WBINVD\n"); #endif if (v3_handle_svm_wbinvd(info) == -1) { return -1; } break; - + case SVM_EXIT_RDTSC: +#ifdef V3_CONFIG_DEBUG_TIME + PrintDebug(info->vm_info, info, "RDTSC/RDTSCP\n"); +#endif + if (v3_handle_rdtsc(info) == -1) { + PrintError(info->vm_info, info, "Error Handling RDTSC instruction\n"); + return -1; + } + break; + case SVM_EXIT_RDTSCP: +#ifdef V3_CONFIG_DEBUG_TIME + PrintDebug(info->vm_info, info, "RDTSCP\n"); +#endif + if (v3_handle_rdtscp(info) == -1) { + PrintError(info->vm_info, info, "Error handling RDTSCP instruction\n"); + return -1; + } + + break; + case SVM_EXIT_SHUTDOWN: + PrintDebug(info->vm_info, info, "Guest-initiated shutdown\n"); + info->vm_info->run_state = VM_STOPPED; + // Force exit on other cores + + break; +#ifdef V3_CONFIG_EXT_SW_INTERRUPTS + case SVM_EXIT_SWINT: +#ifdef V3_CONFIG_DEBUG_EXT_SW_INTERRUPTS + PrintDebug(info->vm_info, info, "Intercepted a software interrupt\n"); +#endif + if (v3_handle_swintr(info) == -1) { + PrintError(info->vm_info, info, "Error handling software interrupt\n"); + return -1; + } + break; +#endif /* Exits Following this line are NOT HANDLED */ @@ -294,22 +363,22 @@ int v3_handle_svm_exit(struct guest_info * info) { addr_t rip_addr; - PrintDebug("Unhandled SVM Exit: %s\n", vmexit_code_to_str(exit_code)); + PrintError(info->vm_info, info, "Unhandled SVM Exit: %s\n", v3_svm_exit_code_to_str(exit_code)); - rip_addr = get_addr_linear(info, guest_state->rip, &(info->segments.cs)); + rip_addr = get_addr_linear(info, info->rip, &(info->segments.cs)); - PrintError("SVM Returned:(VMCB=%p)\n", (void *)(info->vmm_data)); - PrintError("RIP: %p\n", (void *)(addr_t)(guest_state->rip)); - PrintError("RIP Linear: %p\n", (void *)(addr_t)(rip_addr)); + PrintError(info->vm_info, info, "SVM Returned:(VMCB=%p)\n", (void *)(info->vmm_data)); + PrintError(info->vm_info, info, "RIP: %p\n", (void *)(addr_t)(info->rip)); + PrintError(info->vm_info, info, "RIP Linear: %p\n", (void *)(addr_t)(rip_addr)); - PrintError("SVM Returned: Exit Code: %p\n", (void *)(addr_t)exit_code); + PrintError(info->vm_info, info, "SVM Returned: Exit Code: %p\n", (void *)(addr_t)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)); + PrintError(info->vm_info, info, "io_info1 low = 0x%.8x\n", *(uint_t*)&(exit_info1)); + PrintError(info->vm_info, info, "io_info1 high = 0x%.8x\n", *(uint_t *)(((uint8_t *)&(exit_info1)) + 4)); - PrintError("io_info2 low = 0x%.8x\n", *(uint_t*)&(guest_ctrl->exit_info2)); - PrintError("io_info2 high = 0x%.8x\n", *(uint_t *)(((uchar_t *)&(guest_ctrl->exit_info2)) + 4)); + PrintError(info->vm_info, info, "io_info2 low = 0x%.8x\n", *(uint_t*)&(exit_info2)); + PrintError(info->vm_info, info, "io_info2 high = 0x%.8x\n", *(uint_t *)(((uint8_t *)&(exit_info2)) + 4)); if (info->shdw_pg_mode == SHADOW_PAGING) { @@ -322,544 +391,455 @@ int v3_handle_svm_exit(struct guest_info * info) { } // END OF SWITCH (EXIT_CODE) -#ifdef CONFIG_TELEMETRY - if (info->enable_telemetry) { +#ifdef V3_CONFIG_TELEMETRY + if (info->vm_info->enable_telemetry) { v3_telemetry_end_exit(info, exit_code); } #endif - if (v3_excp_pending(info)) { - uint_t excp = v3_get_excp_number(info); - - guest_ctrl->EVENTINJ.type = SVM_INJECTION_EXCEPTION; - - if (info->excp_state.excp_error_code_valid) { - guest_ctrl->EVENTINJ.error_code = info->excp_state.excp_error_code; - guest_ctrl->EVENTINJ.ev = 1; -#ifdef CONFIG_DEBUG_INTERRUPTS - PrintDebug("Injecting exception %d with error code %x\n", excp, guest_ctrl->EVENTINJ.error_code); -#endif - } - - guest_ctrl->EVENTINJ.vector = excp; - - guest_ctrl->EVENTINJ.valid = 1; -#ifdef CONFIG_DEBUG_INTERRUPTS - PrintDebug("Injecting Exception %d (EIP=%p)\n", - guest_ctrl->EVENTINJ.vector, - (void *)(addr_t)info->rip); -#endif - v3_injecting_excp(info, excp); - } else if (info->intr_state.irq_started == 1) { -#ifdef CONFIG_DEBUG_INTERRUPTS - PrintDebug("IRQ pending from previous injection\n"); -#endif - guest_ctrl->guest_ctrl.V_IRQ = 1; - guest_ctrl->guest_ctrl.V_INTR_VECTOR = info->intr_state.irq_vector; - guest_ctrl->guest_ctrl.V_IGN_TPR = 1; - guest_ctrl->guest_ctrl.V_INTR_PRIO = 0xf; - - } else { - switch (v3_intr_pending(info)) { - case V3_EXTERNAL_IRQ: { - uint32_t irq = v3_get_intr(info); - - guest_ctrl->guest_ctrl.V_IRQ = 1; - guest_ctrl->guest_ctrl.V_INTR_VECTOR = irq; - guest_ctrl->guest_ctrl.V_IGN_TPR = 1; - guest_ctrl->guest_ctrl.V_INTR_PRIO = 0xf; - -#ifdef CONFIG_DEBUG_INTERRUPTS - PrintDebug("Injecting Interrupt %d (EIP=%p)\n", - guest_ctrl->guest_ctrl.V_INTR_VECTOR, - (void *)(addr_t)info->rip); -#endif - - info->intr_state.irq_pending = 1; - info->intr_state.irq_vector = irq; - - break; - } - case V3_NMI: - guest_ctrl->EVENTINJ.type = SVM_INJECTION_NMI; - break; - case V3_SOFTWARE_INTR: - guest_ctrl->EVENTINJ.type = SVM_INJECTION_SOFT_INTR; - break; - case V3_VIRTUAL_IRQ: - guest_ctrl->EVENTINJ.type = SVM_INJECTION_IRQ; - break; - - case V3_INVALID_INTR: - default: - break; - } - - } - - - guest_state->cr0 = info->ctrl_regs.cr0; - guest_state->cr2 = info->ctrl_regs.cr2; - guest_state->cr3 = info->ctrl_regs.cr3; - guest_state->cr4 = info->ctrl_regs.cr4; - guest_state->dr6 = info->dbg_regs.dr6; - guest_state->dr7 = info->dbg_regs.dr7; - guest_ctrl->guest_ctrl.V_TPR = info->ctrl_regs.cr8 & 0xff; - guest_state->rflags = info->ctrl_regs.rflags; - guest_state->efer = info->ctrl_regs.efer; - - guest_state->cpl = info->cpl; - - guest_state->rax = info->vm_regs.rax; - guest_state->rip = info->rip; - guest_state->rsp = info->vm_regs.rsp; - - - v3_set_vmcb_segments((vmcb_t*)(info->vmm_data), &(info->segments)); - - if (exit_code == VMEXIT_INTR) { - //PrintDebug("INTR ret IP = %x\n", guest_state->rip); + if (exit_code == SVM_EXIT_INTR) { + //PrintDebug(info->vm_info, info, "INTR ret IP = %x\n", guest_state->rip); } return 0; } -static const char VMEXIT_CR0_READ_STR[] = "VMEXIT_CR0_READ"; -static const char VMEXIT_CR1_READ_STR[] = "VMEXIT_CR1_READ"; -static const char VMEXIT_CR2_READ_STR[] = "VMEXIT_CR2_READ"; -static const char VMEXIT_CR3_READ_STR[] = "VMEXIT_CR3_READ"; -static const char VMEXIT_CR4_READ_STR[] = "VMEXIT_CR4_READ"; -static const char VMEXIT_CR5_READ_STR[] = "VMEXIT_CR5_READ"; -static const char VMEXIT_CR6_READ_STR[] = "VMEXIT_CR6_READ"; -static const char VMEXIT_CR7_READ_STR[] = "VMEXIT_CR7_READ"; -static const char VMEXIT_CR8_READ_STR[] = "VMEXIT_CR8_READ"; -static const char VMEXIT_CR9_READ_STR[] = "VMEXIT_CR9_READ"; -static const char VMEXIT_CR10_READ_STR[] = "VMEXIT_CR10_READ"; -static const char VMEXIT_CR11_READ_STR[] = "VMEXIT_CR11_READ"; -static const char VMEXIT_CR12_READ_STR[] = "VMEXIT_CR12_READ"; -static const char VMEXIT_CR13_READ_STR[] = "VMEXIT_CR13_READ"; -static const char VMEXIT_CR14_READ_STR[] = "VMEXIT_CR14_READ"; -static const char VMEXIT_CR15_READ_STR[] = "VMEXIT_CR15_READ"; -static const char VMEXIT_CR0_WRITE_STR[] = "VMEXIT_CR0_WRITE"; -static const char VMEXIT_CR1_WRITE_STR[] = "VMEXIT_CR1_WRITE"; -static const char VMEXIT_CR2_WRITE_STR[] = "VMEXIT_CR2_WRITE"; -static const char VMEXIT_CR3_WRITE_STR[] = "VMEXIT_CR3_WRITE"; -static const char VMEXIT_CR4_WRITE_STR[] = "VMEXIT_CR4_WRITE"; -static const char VMEXIT_CR5_WRITE_STR[] = "VMEXIT_CR5_WRITE"; -static const char VMEXIT_CR6_WRITE_STR[] = "VMEXIT_CR6_WRITE"; -static const char VMEXIT_CR7_WRITE_STR[] = "VMEXIT_CR7_WRITE"; -static const char VMEXIT_CR8_WRITE_STR[] = "VMEXIT_CR8_WRITE"; -static const char VMEXIT_CR9_WRITE_STR[] = "VMEXIT_CR9_WRITE"; -static const char VMEXIT_CR10_WRITE_STR[] = "VMEXIT_CR10_WRITE"; -static const char VMEXIT_CR11_WRITE_STR[] = "VMEXIT_CR11_WRITE"; -static const char VMEXIT_CR12_WRITE_STR[] = "VMEXIT_CR12_WRITE"; -static const char VMEXIT_CR13_WRITE_STR[] = "VMEXIT_CR13_WRITE"; -static const char VMEXIT_CR14_WRITE_STR[] = "VMEXIT_CR14_WRITE"; -static const char VMEXIT_CR15_WRITE_STR[] = "VMEXIT_CR15_WRITE"; -static const char VMEXIT_DR0_READ_STR[] = "VMEXIT_DR0_READ"; -static const char VMEXIT_DR1_READ_STR[] = "VMEXIT_DR1_READ"; -static const char VMEXIT_DR2_READ_STR[] = "VMEXIT_DR2_READ"; -static const char VMEXIT_DR3_READ_STR[] = "VMEXIT_DR3_READ"; -static const char VMEXIT_DR4_READ_STR[] = "VMEXIT_DR4_READ"; -static const char VMEXIT_DR5_READ_STR[] = "VMEXIT_DR5_READ"; -static const char VMEXIT_DR6_READ_STR[] = "VMEXIT_DR6_READ"; -static const char VMEXIT_DR7_READ_STR[] = "VMEXIT_DR7_READ"; -static const char VMEXIT_DR8_READ_STR[] = "VMEXIT_DR8_READ"; -static const char VMEXIT_DR9_READ_STR[] = "VMEXIT_DR9_READ"; -static const char VMEXIT_DR10_READ_STR[] = "VMEXIT_DR10_READ"; -static const char VMEXIT_DR11_READ_STR[] = "VMEXIT_DR11_READ"; -static const char VMEXIT_DR12_READ_STR[] = "VMEXIT_DR12_READ"; -static const char VMEXIT_DR13_READ_STR[] = "VMEXIT_DR13_READ"; -static const char VMEXIT_DR14_READ_STR[] = "VMEXIT_DR14_READ"; -static const char VMEXIT_DR15_READ_STR[] = "VMEXIT_DR15_READ"; -static const char VMEXIT_DR0_WRITE_STR[] = "VMEXIT_DR0_WRITE"; -static const char VMEXIT_DR1_WRITE_STR[] = "VMEXIT_DR1_WRITE"; -static const char VMEXIT_DR2_WRITE_STR[] = "VMEXIT_DR2_WRITE"; -static const char VMEXIT_DR3_WRITE_STR[] = "VMEXIT_DR3_WRITE"; -static const char VMEXIT_DR4_WRITE_STR[] = "VMEXIT_DR4_WRITE"; -static const char VMEXIT_DR5_WRITE_STR[] = "VMEXIT_DR5_WRITE"; -static const char VMEXIT_DR6_WRITE_STR[] = "VMEXIT_DR6_WRITE"; -static const char VMEXIT_DR7_WRITE_STR[] = "VMEXIT_DR7_WRITE"; -static const char VMEXIT_DR8_WRITE_STR[] = "VMEXIT_DR8_WRITE"; -static const char VMEXIT_DR9_WRITE_STR[] = "VMEXIT_DR9_WRITE"; -static const char VMEXIT_DR10_WRITE_STR[] = "VMEXIT_DR10_WRITE"; -static const char VMEXIT_DR11_WRITE_STR[] = "VMEXIT_DR11_WRITE"; -static const char VMEXIT_DR12_WRITE_STR[] = "VMEXIT_DR12_WRITE"; -static const char VMEXIT_DR13_WRITE_STR[] = "VMEXIT_DR13_WRITE"; -static const char VMEXIT_DR14_WRITE_STR[] = "VMEXIT_DR14_WRITE"; -static const char VMEXIT_DR15_WRITE_STR[] = "VMEXIT_DR15_WRITE"; -static const char VMEXIT_EXCP0_STR[] = "VMEXIT_EXCP0"; -static const char VMEXIT_EXCP1_STR[] = "VMEXIT_EXCP1"; -static const char VMEXIT_EXCP2_STR[] = "VMEXIT_EXCP2"; -static const char VMEXIT_EXCP3_STR[] = "VMEXIT_EXCP3"; -static const char VMEXIT_EXCP4_STR[] = "VMEXIT_EXCP4"; -static const char VMEXIT_EXCP5_STR[] = "VMEXIT_EXCP5"; -static const char VMEXIT_EXCP6_STR[] = "VMEXIT_EXCP6"; -static const char VMEXIT_EXCP7_STR[] = "VMEXIT_EXCP7"; -static const char VMEXIT_EXCP8_STR[] = "VMEXIT_EXCP8"; -static const char VMEXIT_EXCP9_STR[] = "VMEXIT_EXCP9"; -static const char VMEXIT_EXCP10_STR[] = "VMEXIT_EXCP10"; -static const char VMEXIT_EXCP11_STR[] = "VMEXIT_EXCP11"; -static const char VMEXIT_EXCP12_STR[] = "VMEXIT_EXCP12"; -static const char VMEXIT_EXCP13_STR[] = "VMEXIT_EXCP13"; -static const char VMEXIT_EXCP14_STR[] = "VMEXIT_EXCP14"; -static const char VMEXIT_EXCP15_STR[] = "VMEXIT_EXCP15"; -static const char VMEXIT_EXCP16_STR[] = "VMEXIT_EXCP16"; -static const char VMEXIT_EXCP17_STR[] = "VMEXIT_EXCP17"; -static const char VMEXIT_EXCP18_STR[] = "VMEXIT_EXCP18"; -static const char VMEXIT_EXCP19_STR[] = "VMEXIT_EXCP19"; -static const char VMEXIT_EXCP20_STR[] = "VMEXIT_EXCP20"; -static const char VMEXIT_EXCP21_STR[] = "VMEXIT_EXCP21"; -static const char VMEXIT_EXCP22_STR[] = "VMEXIT_EXCP22"; -static const char VMEXIT_EXCP23_STR[] = "VMEXIT_EXCP23"; -static const char VMEXIT_EXCP24_STR[] = "VMEXIT_EXCP24"; -static const char VMEXIT_EXCP25_STR[] = "VMEXIT_EXCP25"; -static const char VMEXIT_EXCP26_STR[] = "VMEXIT_EXCP26"; -static const char VMEXIT_EXCP27_STR[] = "VMEXIT_EXCP27"; -static const char VMEXIT_EXCP28_STR[] = "VMEXIT_EXCP28"; -static const char VMEXIT_EXCP29_STR[] = "VMEXIT_EXCP29"; -static const char VMEXIT_EXCP30_STR[] = "VMEXIT_EXCP30"; -static const char VMEXIT_EXCP31_STR[] = "VMEXIT_EXCP31"; -static const char VMEXIT_INTR_STR[] = "VMEXIT_INTR"; -static const char VMEXIT_NMI_STR[] = "VMEXIT_NMI"; -static const char VMEXIT_SMI_STR[] = "VMEXIT_SMI"; -static const char VMEXIT_INIT_STR[] = "VMEXIT_INIT"; -static const char VMEXIT_VINITR_STR[] = "VMEXIT_VINITR"; -static const char VMEXIT_CR0_SEL_WRITE_STR[] = "VMEXIT_CR0_SEL_WRITE"; -static const char VMEXIT_IDTR_READ_STR[] = "VMEXIT_IDTR_READ"; -static const char VMEXIT_GDTR_READ_STR[] = "VMEXIT_GDTR_READ"; -static const char VMEXIT_LDTR_READ_STR[] = "VMEXIT_LDTR_READ"; -static const char VMEXIT_TR_READ_STR[] = "VMEXIT_TR_READ"; -static const char VMEXIT_IDTR_WRITE_STR[] = "VMEXIT_IDTR_WRITE"; -static const char VMEXIT_GDTR_WRITE_STR[] = "VMEXIT_GDTR_WRITE"; -static const char VMEXIT_LDTR_WRITE_STR[] = "VMEXIT_LDTR_WRITE"; -static const char VMEXIT_TR_WRITE_STR[] = "VMEXIT_TR_WRITE"; -static const char VMEXIT_RDTSC_STR[] = "VMEXIT_RDTSC"; -static const char VMEXIT_RDPMC_STR[] = "VMEXIT_RDPMC"; -static const char VMEXIT_PUSHF_STR[] = "VMEXIT_PUSHF"; -static const char VMEXIT_POPF_STR[] = "VMEXIT_POPF"; -static const char VMEXIT_CPUID_STR[] = "VMEXIT_CPUID"; -static const char VMEXIT_RSM_STR[] = "VMEXIT_RSM"; -static const char VMEXIT_IRET_STR[] = "VMEXIT_IRET"; -static const char VMEXIT_SWINT_STR[] = "VMEXIT_SWINT"; -static const char VMEXIT_INVD_STR[] = "VMEXIT_INVD"; -static const char VMEXIT_PAUSE_STR[] = "VMEXIT_PAUSE"; -static const char VMEXIT_HLT_STR[] = "VMEXIT_HLT"; -static const char VMEXIT_INVLPG_STR[] = "VMEXIT_INVLPG"; -static const char VMEXIT_INVLPGA_STR[] = "VMEXIT_INVLPGA"; -static const char VMEXIT_IOIO_STR[] = "VMEXIT_IOIO"; -static const char VMEXIT_MSR_STR[] = "VMEXIT_MSR"; -static const char VMEXIT_TASK_SWITCH_STR[] = "VMEXIT_TASK_SWITCH"; -static const char VMEXIT_FERR_FREEZE_STR[] = "VMEXIT_FERR_FREEZE"; -static const char VMEXIT_SHUTDOWN_STR[] = "VMEXIT_SHUTDOWN"; -static const char VMEXIT_VMRUN_STR[] = "VMEXIT_VMRUN"; -static const char VMEXIT_VMMCALL_STR[] = "VMEXIT_VMMCALL"; -static const char VMEXIT_VMLOAD_STR[] = "VMEXIT_VMLOAD"; -static const char VMEXIT_VMSAVE_STR[] = "VMEXIT_VMSAVE"; -static const char VMEXIT_STGI_STR[] = "VMEXIT_STGI"; -static const char VMEXIT_CLGI_STR[] = "VMEXIT_CLGI"; -static const char VMEXIT_SKINIT_STR[] = "VMEXIT_SKINIT"; -static const char VMEXIT_RDTSCP_STR[] = "VMEXIT_RDTSCP"; -static const char VMEXIT_ICEBP_STR[] = "VMEXIT_ICEBP"; -static const char VMEXIT_WBINVD_STR[] = "VMEXIT_WBINVD"; -static const char VMEXIT_MONITOR_STR[] = "VMEXIT_MONITOR"; -static const char VMEXIT_MWAIT_STR[] = "VMEXIT_MWAIT"; -static const char VMEXIT_MWAIT_CONDITIONAL_STR[] = "VMEXIT_MWAIT_CONDITIONAL"; -static const char VMEXIT_NPF_STR[] = "VMEXIT_NPF"; -static const char VMEXIT_INVALID_VMCB_STR[] = "VMEXIT_INVALID_VMCB"; - - - -const char * vmexit_code_to_str(uint_t exit_code) { +static const char SVM_EXIT_CR0_READ_STR[] = "SVM_EXIT_CR0_READ"; +static const char SVM_EXIT_CR1_READ_STR[] = "SVM_EXIT_CR1_READ"; +static const char SVM_EXIT_CR2_READ_STR[] = "SVM_EXIT_CR2_READ"; +static const char SVM_EXIT_CR3_READ_STR[] = "SVM_EXIT_CR3_READ"; +static const char SVM_EXIT_CR4_READ_STR[] = "SVM_EXIT_CR4_READ"; +static const char SVM_EXIT_CR5_READ_STR[] = "SVM_EXIT_CR5_READ"; +static const char SVM_EXIT_CR6_READ_STR[] = "SVM_EXIT_CR6_READ"; +static const char SVM_EXIT_CR7_READ_STR[] = "SVM_EXIT_CR7_READ"; +static const char SVM_EXIT_CR8_READ_STR[] = "SVM_EXIT_CR8_READ"; +static const char SVM_EXIT_CR9_READ_STR[] = "SVM_EXIT_CR9_READ"; +static const char SVM_EXIT_CR10_READ_STR[] = "SVM_EXIT_CR10_READ"; +static const char SVM_EXIT_CR11_READ_STR[] = "SVM_EXIT_CR11_READ"; +static const char SVM_EXIT_CR12_READ_STR[] = "SVM_EXIT_CR12_READ"; +static const char SVM_EXIT_CR13_READ_STR[] = "SVM_EXIT_CR13_READ"; +static const char SVM_EXIT_CR14_READ_STR[] = "SVM_EXIT_CR14_READ"; +static const char SVM_EXIT_CR15_READ_STR[] = "SVM_EXIT_CR15_READ"; +static const char SVM_EXIT_CR0_WRITE_STR[] = "SVM_EXIT_CR0_WRITE"; +static const char SVM_EXIT_CR1_WRITE_STR[] = "SVM_EXIT_CR1_WRITE"; +static const char SVM_EXIT_CR2_WRITE_STR[] = "SVM_EXIT_CR2_WRITE"; +static const char SVM_EXIT_CR3_WRITE_STR[] = "SVM_EXIT_CR3_WRITE"; +static const char SVM_EXIT_CR4_WRITE_STR[] = "SVM_EXIT_CR4_WRITE"; +static const char SVM_EXIT_CR5_WRITE_STR[] = "SVM_EXIT_CR5_WRITE"; +static const char SVM_EXIT_CR6_WRITE_STR[] = "SVM_EXIT_CR6_WRITE"; +static const char SVM_EXIT_CR7_WRITE_STR[] = "SVM_EXIT_CR7_WRITE"; +static const char SVM_EXIT_CR8_WRITE_STR[] = "SVM_EXIT_CR8_WRITE"; +static const char SVM_EXIT_CR9_WRITE_STR[] = "SVM_EXIT_CR9_WRITE"; +static const char SVM_EXIT_CR10_WRITE_STR[] = "SVM_EXIT_CR10_WRITE"; +static const char SVM_EXIT_CR11_WRITE_STR[] = "SVM_EXIT_CR11_WRITE"; +static const char SVM_EXIT_CR12_WRITE_STR[] = "SVM_EXIT_CR12_WRITE"; +static const char SVM_EXIT_CR13_WRITE_STR[] = "SVM_EXIT_CR13_WRITE"; +static const char SVM_EXIT_CR14_WRITE_STR[] = "SVM_EXIT_CR14_WRITE"; +static const char SVM_EXIT_CR15_WRITE_STR[] = "SVM_EXIT_CR15_WRITE"; +static const char SVM_EXIT_DR0_READ_STR[] = "SVM_EXIT_DR0_READ"; +static const char SVM_EXIT_DR1_READ_STR[] = "SVM_EXIT_DR1_READ"; +static const char SVM_EXIT_DR2_READ_STR[] = "SVM_EXIT_DR2_READ"; +static const char SVM_EXIT_DR3_READ_STR[] = "SVM_EXIT_DR3_READ"; +static const char SVM_EXIT_DR4_READ_STR[] = "SVM_EXIT_DR4_READ"; +static const char SVM_EXIT_DR5_READ_STR[] = "SVM_EXIT_DR5_READ"; +static const char SVM_EXIT_DR6_READ_STR[] = "SVM_EXIT_DR6_READ"; +static const char SVM_EXIT_DR7_READ_STR[] = "SVM_EXIT_DR7_READ"; +static const char SVM_EXIT_DR8_READ_STR[] = "SVM_EXIT_DR8_READ"; +static const char SVM_EXIT_DR9_READ_STR[] = "SVM_EXIT_DR9_READ"; +static const char SVM_EXIT_DR10_READ_STR[] = "SVM_EXIT_DR10_READ"; +static const char SVM_EXIT_DR11_READ_STR[] = "SVM_EXIT_DR11_READ"; +static const char SVM_EXIT_DR12_READ_STR[] = "SVM_EXIT_DR12_READ"; +static const char SVM_EXIT_DR13_READ_STR[] = "SVM_EXIT_DR13_READ"; +static const char SVM_EXIT_DR14_READ_STR[] = "SVM_EXIT_DR14_READ"; +static const char SVM_EXIT_DR15_READ_STR[] = "SVM_EXIT_DR15_READ"; +static const char SVM_EXIT_DR0_WRITE_STR[] = "SVM_EXIT_DR0_WRITE"; +static const char SVM_EXIT_DR1_WRITE_STR[] = "SVM_EXIT_DR1_WRITE"; +static const char SVM_EXIT_DR2_WRITE_STR[] = "SVM_EXIT_DR2_WRITE"; +static const char SVM_EXIT_DR3_WRITE_STR[] = "SVM_EXIT_DR3_WRITE"; +static const char SVM_EXIT_DR4_WRITE_STR[] = "SVM_EXIT_DR4_WRITE"; +static const char SVM_EXIT_DR5_WRITE_STR[] = "SVM_EXIT_DR5_WRITE"; +static const char SVM_EXIT_DR6_WRITE_STR[] = "SVM_EXIT_DR6_WRITE"; +static const char SVM_EXIT_DR7_WRITE_STR[] = "SVM_EXIT_DR7_WRITE"; +static const char SVM_EXIT_DR8_WRITE_STR[] = "SVM_EXIT_DR8_WRITE"; +static const char SVM_EXIT_DR9_WRITE_STR[] = "SVM_EXIT_DR9_WRITE"; +static const char SVM_EXIT_DR10_WRITE_STR[] = "SVM_EXIT_DR10_WRITE"; +static const char SVM_EXIT_DR11_WRITE_STR[] = "SVM_EXIT_DR11_WRITE"; +static const char SVM_EXIT_DR12_WRITE_STR[] = "SVM_EXIT_DR12_WRITE"; +static const char SVM_EXIT_DR13_WRITE_STR[] = "SVM_EXIT_DR13_WRITE"; +static const char SVM_EXIT_DR14_WRITE_STR[] = "SVM_EXIT_DR14_WRITE"; +static const char SVM_EXIT_DR15_WRITE_STR[] = "SVM_EXIT_DR15_WRITE"; +static const char SVM_EXIT_EXCP0_STR[] = "SVM_EXIT_EXCP0"; +static const char SVM_EXIT_EXCP1_STR[] = "SVM_EXIT_EXCP1"; +static const char SVM_EXIT_EXCP2_STR[] = "SVM_EXIT_EXCP2"; +static const char SVM_EXIT_EXCP3_STR[] = "SVM_EXIT_EXCP3"; +static const char SVM_EXIT_EXCP4_STR[] = "SVM_EXIT_EXCP4"; +static const char SVM_EXIT_EXCP5_STR[] = "SVM_EXIT_EXCP5"; +static const char SVM_EXIT_EXCP6_STR[] = "SVM_EXIT_EXCP6"; +static const char SVM_EXIT_EXCP7_STR[] = "SVM_EXIT_EXCP7"; +static const char SVM_EXIT_EXCP8_STR[] = "SVM_EXIT_EXCP8"; +static const char SVM_EXIT_EXCP9_STR[] = "SVM_EXIT_EXCP9"; +static const char SVM_EXIT_EXCP10_STR[] = "SVM_EXIT_EXCP10"; +static const char SVM_EXIT_EXCP11_STR[] = "SVM_EXIT_EXCP11"; +static const char SVM_EXIT_EXCP12_STR[] = "SVM_EXIT_EXCP12"; +static const char SVM_EXIT_EXCP13_STR[] = "SVM_EXIT_EXCP13"; +static const char SVM_EXIT_EXCP14_STR[] = "SVM_EXIT_EXCP14"; +static const char SVM_EXIT_EXCP15_STR[] = "SVM_EXIT_EXCP15"; +static const char SVM_EXIT_EXCP16_STR[] = "SVM_EXIT_EXCP16"; +static const char SVM_EXIT_EXCP17_STR[] = "SVM_EXIT_EXCP17"; +static const char SVM_EXIT_EXCP18_STR[] = "SVM_EXIT_EXCP18"; +static const char SVM_EXIT_EXCP19_STR[] = "SVM_EXIT_EXCP19"; +static const char SVM_EXIT_EXCP20_STR[] = "SVM_EXIT_EXCP20"; +static const char SVM_EXIT_EXCP21_STR[] = "SVM_EXIT_EXCP21"; +static const char SVM_EXIT_EXCP22_STR[] = "SVM_EXIT_EXCP22"; +static const char SVM_EXIT_EXCP23_STR[] = "SVM_EXIT_EXCP23"; +static const char SVM_EXIT_EXCP24_STR[] = "SVM_EXIT_EXCP24"; +static const char SVM_EXIT_EXCP25_STR[] = "SVM_EXIT_EXCP25"; +static const char SVM_EXIT_EXCP26_STR[] = "SVM_EXIT_EXCP26"; +static const char SVM_EXIT_EXCP27_STR[] = "SVM_EXIT_EXCP27"; +static const char SVM_EXIT_EXCP28_STR[] = "SVM_EXIT_EXCP28"; +static const char SVM_EXIT_EXCP29_STR[] = "SVM_EXIT_EXCP29"; +static const char SVM_EXIT_EXCP30_STR[] = "SVM_EXIT_EXCP30"; +static const char SVM_EXIT_EXCP31_STR[] = "SVM_EXIT_EXCP31"; +static const char SVM_EXIT_INTR_STR[] = "SVM_EXIT_INTR"; +static const char SVM_EXIT_NMI_STR[] = "SVM_EXIT_NMI"; +static const char SVM_EXIT_SMI_STR[] = "SVM_EXIT_SMI"; +static const char SVM_EXIT_INIT_STR[] = "SVM_EXIT_INIT"; +static const char SVM_EXIT_VINITR_STR[] = "SVM_EXIT_VINITR"; +static const char SVM_EXIT_CR0_SEL_WRITE_STR[] = "SVM_EXIT_CR0_SEL_WRITE"; +static const char SVM_EXIT_IDTR_READ_STR[] = "SVM_EXIT_IDTR_READ"; +static const char SVM_EXIT_GDTR_READ_STR[] = "SVM_EXIT_GDTR_READ"; +static const char SVM_EXIT_LDTR_READ_STR[] = "SVM_EXIT_LDTR_READ"; +static const char SVM_EXIT_TR_READ_STR[] = "SVM_EXIT_TR_READ"; +static const char SVM_EXIT_IDTR_WRITE_STR[] = "SVM_EXIT_IDTR_WRITE"; +static const char SVM_EXIT_GDTR_WRITE_STR[] = "SVM_EXIT_GDTR_WRITE"; +static const char SVM_EXIT_LDTR_WRITE_STR[] = "SVM_EXIT_LDTR_WRITE"; +static const char SVM_EXIT_TR_WRITE_STR[] = "SVM_EXIT_TR_WRITE"; +static const char SVM_EXIT_RDTSC_STR[] = "SVM_EXIT_RDTSC"; +static const char SVM_EXIT_RDPMC_STR[] = "SVM_EXIT_RDPMC"; +static const char SVM_EXIT_PUSHF_STR[] = "SVM_EXIT_PUSHF"; +static const char SVM_EXIT_POPF_STR[] = "SVM_EXIT_POPF"; +static const char SVM_EXIT_CPUID_STR[] = "SVM_EXIT_CPUID"; +static const char SVM_EXIT_RSM_STR[] = "SVM_EXIT_RSM"; +static const char SVM_EXIT_IRET_STR[] = "SVM_EXIT_IRET"; +static const char SVM_EXIT_SWINT_STR[] = "SVM_EXIT_SWINT"; +static const char SVM_EXIT_INVD_STR[] = "SVM_EXIT_INVD"; +static const char SVM_EXIT_PAUSE_STR[] = "SVM_EXIT_PAUSE"; +static const char SVM_EXIT_HLT_STR[] = "SVM_EXIT_HLT"; +static const char SVM_EXIT_INVLPG_STR[] = "SVM_EXIT_INVLPG"; +static const char SVM_EXIT_INVLPGA_STR[] = "SVM_EXIT_INVLPGA"; +static const char SVM_EXIT_IOIO_STR[] = "SVM_EXIT_IOIO"; +static const char SVM_EXIT_MSR_STR[] = "SVM_EXIT_MSR"; +static const char SVM_EXIT_TASK_SWITCH_STR[] = "SVM_EXIT_TASK_SWITCH"; +static const char SVM_EXIT_FERR_FREEZE_STR[] = "SVM_EXIT_FERR_FREEZE"; +static const char SVM_EXIT_SHUTDOWN_STR[] = "SVM_EXIT_SHUTDOWN"; +static const char SVM_EXIT_VMRUN_STR[] = "SVM_EXIT_VMRUN"; +static const char SVM_EXIT_VMMCALL_STR[] = "SVM_EXIT_VMMCALL"; +static const char SVM_EXIT_VMLOAD_STR[] = "SVM_EXIT_VMLOAD"; +static const char SVM_EXIT_VMSAVE_STR[] = "SVM_EXIT_VMSAVE"; +static const char SVM_EXIT_STGI_STR[] = "SVM_EXIT_STGI"; +static const char SVM_EXIT_CLGI_STR[] = "SVM_EXIT_CLGI"; +static const char SVM_EXIT_SKINIT_STR[] = "SVM_EXIT_SKINIT"; +static const char SVM_EXIT_RDTSCP_STR[] = "SVM_EXIT_RDTSCP"; +static const char SVM_EXIT_ICEBP_STR[] = "SVM_EXIT_ICEBP"; +static const char SVM_EXIT_WBINVD_STR[] = "SVM_EXIT_WBINVD"; +static const char SVM_EXIT_MONITOR_STR[] = "SVM_EXIT_MONITOR"; +static const char SVM_EXIT_MWAIT_STR[] = "SVM_EXIT_MWAIT"; +static const char SVM_EXIT_MWAIT_CONDITIONAL_STR[] = "SVM_EXIT_MWAIT_CONDITIONAL"; +static const char SVM_EXIT_NPF_STR[] = "SVM_EXIT_NPF"; +static const char SVM_EXIT_INVALID_VMCB_STR[] = "SVM_EXIT_INVALID_VMCB"; + + + +const char * v3_svm_exit_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; + case SVM_EXIT_CR0_READ: + return SVM_EXIT_CR0_READ_STR; + case SVM_EXIT_CR1_READ: + return SVM_EXIT_CR1_READ_STR; + case SVM_EXIT_CR2_READ: + return SVM_EXIT_CR2_READ_STR; + case SVM_EXIT_CR3_READ: + return SVM_EXIT_CR3_READ_STR; + case SVM_EXIT_CR4_READ: + return SVM_EXIT_CR4_READ_STR; + case SVM_EXIT_CR5_READ: + return SVM_EXIT_CR5_READ_STR; + case SVM_EXIT_CR6_READ: + return SVM_EXIT_CR6_READ_STR; + case SVM_EXIT_CR7_READ: + return SVM_EXIT_CR7_READ_STR; + case SVM_EXIT_CR8_READ: + return SVM_EXIT_CR8_READ_STR; + case SVM_EXIT_CR9_READ: + return SVM_EXIT_CR9_READ_STR; + case SVM_EXIT_CR10_READ: + return SVM_EXIT_CR10_READ_STR; + case SVM_EXIT_CR11_READ: + return SVM_EXIT_CR11_READ_STR; + case SVM_EXIT_CR12_READ: + return SVM_EXIT_CR12_READ_STR; + case SVM_EXIT_CR13_READ: + return SVM_EXIT_CR13_READ_STR; + case SVM_EXIT_CR14_READ: + return SVM_EXIT_CR14_READ_STR; + case SVM_EXIT_CR15_READ: + return SVM_EXIT_CR15_READ_STR; + case SVM_EXIT_CR0_WRITE: + return SVM_EXIT_CR0_WRITE_STR; + case SVM_EXIT_CR1_WRITE: + return SVM_EXIT_CR1_WRITE_STR; + case SVM_EXIT_CR2_WRITE: + return SVM_EXIT_CR2_WRITE_STR; + case SVM_EXIT_CR3_WRITE: + return SVM_EXIT_CR3_WRITE_STR; + case SVM_EXIT_CR4_WRITE: + return SVM_EXIT_CR4_WRITE_STR; + case SVM_EXIT_CR5_WRITE: + return SVM_EXIT_CR5_WRITE_STR; + case SVM_EXIT_CR6_WRITE: + return SVM_EXIT_CR6_WRITE_STR; + case SVM_EXIT_CR7_WRITE: + return SVM_EXIT_CR7_WRITE_STR; + case SVM_EXIT_CR8_WRITE: + return SVM_EXIT_CR8_WRITE_STR; + case SVM_EXIT_CR9_WRITE: + return SVM_EXIT_CR9_WRITE_STR; + case SVM_EXIT_CR10_WRITE: + return SVM_EXIT_CR10_WRITE_STR; + case SVM_EXIT_CR11_WRITE: + return SVM_EXIT_CR11_WRITE_STR; + case SVM_EXIT_CR12_WRITE: + return SVM_EXIT_CR12_WRITE_STR; + case SVM_EXIT_CR13_WRITE: + return SVM_EXIT_CR13_WRITE_STR; + case SVM_EXIT_CR14_WRITE: + return SVM_EXIT_CR14_WRITE_STR; + case SVM_EXIT_CR15_WRITE: + return SVM_EXIT_CR15_WRITE_STR; + case SVM_EXIT_DR0_READ: + return SVM_EXIT_DR0_READ_STR; + case SVM_EXIT_DR1_READ: + return SVM_EXIT_DR1_READ_STR; + case SVM_EXIT_DR2_READ: + return SVM_EXIT_DR2_READ_STR; + case SVM_EXIT_DR3_READ: + return SVM_EXIT_DR3_READ_STR; + case SVM_EXIT_DR4_READ: + return SVM_EXIT_DR4_READ_STR; + case SVM_EXIT_DR5_READ: + return SVM_EXIT_DR5_READ_STR; + case SVM_EXIT_DR6_READ: + return SVM_EXIT_DR6_READ_STR; + case SVM_EXIT_DR7_READ: + return SVM_EXIT_DR7_READ_STR; + case SVM_EXIT_DR8_READ: + return SVM_EXIT_DR8_READ_STR; + case SVM_EXIT_DR9_READ: + return SVM_EXIT_DR9_READ_STR; + case SVM_EXIT_DR10_READ: + return SVM_EXIT_DR10_READ_STR; + case SVM_EXIT_DR11_READ: + return SVM_EXIT_DR11_READ_STR; + case SVM_EXIT_DR12_READ: + return SVM_EXIT_DR12_READ_STR; + case SVM_EXIT_DR13_READ: + return SVM_EXIT_DR13_READ_STR; + case SVM_EXIT_DR14_READ: + return SVM_EXIT_DR14_READ_STR; + case SVM_EXIT_DR15_READ: + return SVM_EXIT_DR15_READ_STR; + case SVM_EXIT_DR0_WRITE: + return SVM_EXIT_DR0_WRITE_STR; + case SVM_EXIT_DR1_WRITE: + return SVM_EXIT_DR1_WRITE_STR; + case SVM_EXIT_DR2_WRITE: + return SVM_EXIT_DR2_WRITE_STR; + case SVM_EXIT_DR3_WRITE: + return SVM_EXIT_DR3_WRITE_STR; + case SVM_EXIT_DR4_WRITE: + return SVM_EXIT_DR4_WRITE_STR; + case SVM_EXIT_DR5_WRITE: + return SVM_EXIT_DR5_WRITE_STR; + case SVM_EXIT_DR6_WRITE: + return SVM_EXIT_DR6_WRITE_STR; + case SVM_EXIT_DR7_WRITE: + return SVM_EXIT_DR7_WRITE_STR; + case SVM_EXIT_DR8_WRITE: + return SVM_EXIT_DR8_WRITE_STR; + case SVM_EXIT_DR9_WRITE: + return SVM_EXIT_DR9_WRITE_STR; + case SVM_EXIT_DR10_WRITE: + return SVM_EXIT_DR10_WRITE_STR; + case SVM_EXIT_DR11_WRITE: + return SVM_EXIT_DR11_WRITE_STR; + case SVM_EXIT_DR12_WRITE: + return SVM_EXIT_DR12_WRITE_STR; + case SVM_EXIT_DR13_WRITE: + return SVM_EXIT_DR13_WRITE_STR; + case SVM_EXIT_DR14_WRITE: + return SVM_EXIT_DR14_WRITE_STR; + case SVM_EXIT_DR15_WRITE: + return SVM_EXIT_DR15_WRITE_STR; + case SVM_EXIT_EXCP0: + return SVM_EXIT_EXCP0_STR; + case SVM_EXIT_EXCP1: + return SVM_EXIT_EXCP1_STR; + case SVM_EXIT_EXCP2: + return SVM_EXIT_EXCP2_STR; + case SVM_EXIT_EXCP3: + return SVM_EXIT_EXCP3_STR; + case SVM_EXIT_EXCP4: + return SVM_EXIT_EXCP4_STR; + case SVM_EXIT_EXCP5: + return SVM_EXIT_EXCP5_STR; + case SVM_EXIT_EXCP6: + return SVM_EXIT_EXCP6_STR; + case SVM_EXIT_EXCP7: + return SVM_EXIT_EXCP7_STR; + case SVM_EXIT_EXCP8: + return SVM_EXIT_EXCP8_STR; + case SVM_EXIT_EXCP9: + return SVM_EXIT_EXCP9_STR; + case SVM_EXIT_EXCP10: + return SVM_EXIT_EXCP10_STR; + case SVM_EXIT_EXCP11: + return SVM_EXIT_EXCP11_STR; + case SVM_EXIT_EXCP12: + return SVM_EXIT_EXCP12_STR; + case SVM_EXIT_EXCP13: + return SVM_EXIT_EXCP13_STR; + case SVM_EXIT_EXCP14: + return SVM_EXIT_EXCP14_STR; + case SVM_EXIT_EXCP15: + return SVM_EXIT_EXCP15_STR; + case SVM_EXIT_EXCP16: + return SVM_EXIT_EXCP16_STR; + case SVM_EXIT_EXCP17: + return SVM_EXIT_EXCP17_STR; + case SVM_EXIT_EXCP18: + return SVM_EXIT_EXCP18_STR; + case SVM_EXIT_EXCP19: + return SVM_EXIT_EXCP19_STR; + case SVM_EXIT_EXCP20: + return SVM_EXIT_EXCP20_STR; + case SVM_EXIT_EXCP21: + return SVM_EXIT_EXCP21_STR; + case SVM_EXIT_EXCP22: + return SVM_EXIT_EXCP22_STR; + case SVM_EXIT_EXCP23: + return SVM_EXIT_EXCP23_STR; + case SVM_EXIT_EXCP24: + return SVM_EXIT_EXCP24_STR; + case SVM_EXIT_EXCP25: + return SVM_EXIT_EXCP25_STR; + case SVM_EXIT_EXCP26: + return SVM_EXIT_EXCP26_STR; + case SVM_EXIT_EXCP27: + return SVM_EXIT_EXCP27_STR; + case SVM_EXIT_EXCP28: + return SVM_EXIT_EXCP28_STR; + case SVM_EXIT_EXCP29: + return SVM_EXIT_EXCP29_STR; + case SVM_EXIT_EXCP30: + return SVM_EXIT_EXCP30_STR; + case SVM_EXIT_EXCP31: + return SVM_EXIT_EXCP31_STR; + case SVM_EXIT_INTR: + return SVM_EXIT_INTR_STR; + case SVM_EXIT_NMI: + return SVM_EXIT_NMI_STR; + case SVM_EXIT_SMI: + return SVM_EXIT_SMI_STR; + case SVM_EXIT_INIT: + return SVM_EXIT_INIT_STR; + case SVM_EXIT_VINITR: + return SVM_EXIT_VINITR_STR; + case SVM_EXIT_CR0_SEL_WRITE: + return SVM_EXIT_CR0_SEL_WRITE_STR; + case SVM_EXIT_IDTR_READ: + return SVM_EXIT_IDTR_READ_STR; + case SVM_EXIT_GDTR_READ: + return SVM_EXIT_GDTR_READ_STR; + case SVM_EXIT_LDTR_READ: + return SVM_EXIT_LDTR_READ_STR; + case SVM_EXIT_TR_READ: + return SVM_EXIT_TR_READ_STR; + case SVM_EXIT_IDTR_WRITE: + return SVM_EXIT_IDTR_WRITE_STR; + case SVM_EXIT_GDTR_WRITE: + return SVM_EXIT_GDTR_WRITE_STR; + case SVM_EXIT_LDTR_WRITE: + return SVM_EXIT_LDTR_WRITE_STR; + case SVM_EXIT_TR_WRITE: + return SVM_EXIT_TR_WRITE_STR; + case SVM_EXIT_RDTSC: + return SVM_EXIT_RDTSC_STR; + case SVM_EXIT_RDPMC: + return SVM_EXIT_RDPMC_STR; + case SVM_EXIT_PUSHF: + return SVM_EXIT_PUSHF_STR; + case SVM_EXIT_POPF: + return SVM_EXIT_POPF_STR; + case SVM_EXIT_CPUID: + return SVM_EXIT_CPUID_STR; + case SVM_EXIT_RSM: + return SVM_EXIT_RSM_STR; + case SVM_EXIT_IRET: + return SVM_EXIT_IRET_STR; + case SVM_EXIT_SWINT: + return SVM_EXIT_SWINT_STR; + case SVM_EXIT_INVD: + return SVM_EXIT_INVD_STR; + case SVM_EXIT_PAUSE: + return SVM_EXIT_PAUSE_STR; + case SVM_EXIT_HLT: + return SVM_EXIT_HLT_STR; + case SVM_EXIT_INVLPG: + return SVM_EXIT_INVLPG_STR; + case SVM_EXIT_INVLPGA: + return SVM_EXIT_INVLPGA_STR; + case SVM_EXIT_IOIO: + return SVM_EXIT_IOIO_STR; + case SVM_EXIT_MSR: + return SVM_EXIT_MSR_STR; + case SVM_EXIT_TASK_SWITCH: + return SVM_EXIT_TASK_SWITCH_STR; + case SVM_EXIT_FERR_FREEZE: + return SVM_EXIT_FERR_FREEZE_STR; + case SVM_EXIT_SHUTDOWN: + return SVM_EXIT_SHUTDOWN_STR; + case SVM_EXIT_VMRUN: + return SVM_EXIT_VMRUN_STR; + case SVM_EXIT_VMMCALL: + return SVM_EXIT_VMMCALL_STR; + case SVM_EXIT_VMLOAD: + return SVM_EXIT_VMLOAD_STR; + case SVM_EXIT_VMSAVE: + return SVM_EXIT_VMSAVE_STR; + case SVM_EXIT_STGI: + return SVM_EXIT_STGI_STR; + case SVM_EXIT_CLGI: + return SVM_EXIT_CLGI_STR; + case SVM_EXIT_SKINIT: + return SVM_EXIT_SKINIT_STR; + case SVM_EXIT_RDTSCP: + return SVM_EXIT_RDTSCP_STR; + case SVM_EXIT_ICEBP: + return SVM_EXIT_ICEBP_STR; + case SVM_EXIT_WBINVD: + return SVM_EXIT_WBINVD_STR; + case SVM_EXIT_MONITOR: + return SVM_EXIT_MONITOR_STR; + case SVM_EXIT_MWAIT: + return SVM_EXIT_MWAIT_STR; + case SVM_EXIT_MWAIT_CONDITIONAL: + return SVM_EXIT_MWAIT_CONDITIONAL_STR; + case SVM_EXIT_NPF: + return SVM_EXIT_NPF_STR; + case SVM_EXIT_INVALID_VMCB: + return SVM_EXIT_INVALID_VMCB_STR; } return NULL; }