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=1fc0b7c43740e6843701ed5b5a670ddacca01f8d;hpb=1730c6edaa4ca2a0e1dfc6d0ec45c15970ed1bff;p=palacios.git diff --git a/palacios/src/palacios/svm_handler.c b/palacios/src/palacios/svm_handler.c index 1fc0b7c..78f62e8 100644 --- a/palacios/src/palacios/svm_handler.c +++ b/palacios/src/palacios/svm_handler.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -34,6 +35,10 @@ #include #include +#ifdef V3_CONFIG_TM_FUNC +#include +#endif + #ifndef V3_CONFIG_DEBUG_SVM #undef PrintDebug #define PrintDebug(fmt, args...) @@ -55,11 +60,10 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i } #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: { + case SVM_EXIT_IOIO: { struct svm_io_info * io_info = (struct svm_io_info *)&(exit_info1); if (io_info->type == 0) { @@ -91,7 +95,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i break; } - case VMEXIT_MSR: + case SVM_EXIT_MSR: if (exit_info1 == 0) { if (v3_handle_msr_read(info) == -1) { @@ -102,73 +106,92 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i return -1; } } else { - PrintError("Invalid MSR Operation\n"); + PrintError(info->vm_info, info, "Invalid MSR Operation\n"); return -1; } break; - case VMEXIT_CPUID: + case SVM_EXIT_CPUID: if (v3_handle_cpuid(info) == -1) { - PrintError("Error handling CPUID\n"); + PrintError(info->vm_info, info, "Error handling CPUID\n"); return -1; } break; - case VMEXIT_CR0_WRITE: + case SVM_EXIT_CR0_WRITE: #ifdef V3_CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR0 Write\n"); + PrintDebug(info->vm_info, info, "CR0 Write\n"); #endif if (v3_handle_cr0_write(info) == -1) { return -1; } break; - case VMEXIT_CR0_READ: + case SVM_EXIT_CR0_READ: #ifdef V3_CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR0 Read\n"); + PrintDebug(info->vm_info, info, "CR0 Read\n"); #endif if (v3_handle_cr0_read(info) == -1) { return -1; } break; - case VMEXIT_CR3_WRITE: + case SVM_EXIT_CR3_WRITE: #ifdef V3_CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR3 Write\n"); + PrintDebug(info->vm_info, info, "CR3 Write\n"); #endif if (v3_handle_cr3_write(info) == -1) { return -1; } break; - case VMEXIT_CR3_READ: + case SVM_EXIT_CR3_READ: #ifdef V3_CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR3 Read\n"); + PrintDebug(info->vm_info, info, "CR3 Read\n"); #endif if (v3_handle_cr3_read(info) == -1) { return -1; } break; - case VMEXIT_CR4_WRITE: + case SVM_EXIT_CR4_WRITE: #ifdef V3_CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR4 Write\n"); + PrintDebug(info->vm_info, info, "CR4 Write\n"); #endif if (v3_handle_cr4_write(info) == -1) { return -1; } break; - case VMEXIT_CR4_READ: + case SVM_EXIT_CR4_READ: #ifdef V3_CONFIG_DEBUG_CTRL_REGS - PrintDebug("CR4 Read\n"); + PrintDebug(info->vm_info, info, "CR4 Read\n"); #endif if (v3_handle_cr4_read(info) == -1) { return -1; } break; - case VMEXIT_EXCP14: { + + 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("PageFault at %p (error=%d)\n", + 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) { @@ -176,36 +199,58 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i 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: { + +#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 V3_CONFIG_DEBUG_SHADOW_PAGING - PrintDebug("Invlpg\n"); + 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 */ @@ -215,62 +260,83 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i info->rip += 3; if (v3_handle_hypercall(info) == -1) { - PrintError("Error handling Hypercall\n"); + PrintError(info->vm_info, info, "Error handling Hypercall\n"); return -1; } break; - case VMEXIT_NMI: + case SVM_EXIT_NMI: // handled by interrupt dispatcher break; - case VMEXIT_INTR: + 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: + case SVM_EXIT_HLT: #ifdef V3_CONFIG_DEBUG_HALT - PrintDebug("Guest halted\n"); + 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: + case SVM_EXIT_WBINVD: #ifdef V3_CONFIG_DEBUG_EMULATOR - PrintDebug("WBINVD\n"); + PrintDebug(info->vm_info, info, "WBINVD\n"); #endif if (v3_handle_svm_wbinvd(info) == -1) { return -1; } break; - case VMEXIT_RDTSC: + case SVM_EXIT_RDTSC: #ifdef V3_CONFIG_DEBUG_TIME - PrintDebug("RDTSC/RDTSCP\n"); + PrintDebug(info->vm_info, info, "RDTSC/RDTSCP\n"); #endif if (v3_handle_rdtsc(info) == -1) { - PrintError("Error Handling RDTSC instruction\n"); + PrintError(info->vm_info, info, "Error Handling RDTSC instruction\n"); return -1; } break; - case VMEXIT_RDTSCP: + case SVM_EXIT_RDTSCP: #ifdef V3_CONFIG_DEBUG_TIME - PrintDebug("RDTSCP\n"); + PrintDebug(info->vm_info, info, "RDTSCP\n"); #endif if (v3_handle_rdtscp(info) == -1) { - PrintError("Error Handling RDTSCP instruction\n"); + PrintError(info->vm_info, info, "Error handling RDTSCP instruction\n"); return -1; } + break; - case VMEXIT_SHUTDOWN: - PrintDebug("Guest-initiated shutdown\n"); + case SVM_EXIT_SHUTDOWN: + PrintDebug(info->vm_info, info, "Guest-initiated shutdown\n"); info->vm_info->run_state = VM_STOPPED; @@ -278,12 +344,12 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i break; #ifdef V3_CONFIG_EXT_SW_INTERRUPTS - case VMEXIT_SWINT: + case SVM_EXIT_SWINT: #ifdef V3_CONFIG_DEBUG_EXT_SW_INTERRUPTS - PrintDebug("Intercepted a software interrupt\n"); + PrintDebug(info->vm_info, info, "Intercepted a software interrupt\n"); #endif if (v3_handle_swintr(info) == -1) { - PrintError("Error handling software interrupt\n"); + PrintError(info->vm_info, info, "Error handling software interrupt\n"); return -1; } break; @@ -297,22 +363,22 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i addr_t rip_addr; - PrintError("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, info->rip, &(info->segments.cs)); - PrintError("SVM Returned:(VMCB=%p)\n", (void *)(info->vmm_data)); - PrintError("RIP: %p\n", (void *)(addr_t)(info->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*)&(exit_info1)); - PrintError("io_info1 high = 0x%.8x\n", *(uint_t *)(((uchar_t *)&(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*)&(exit_info2)); - PrintError("io_info2 high = 0x%.8x\n", *(uint_t *)(((uchar_t *)&(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) { @@ -332,448 +398,448 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i #endif - 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; }