From: Jack Lange Date: Thu, 26 Apr 2012 02:29:38 +0000 (-0400) Subject: rename exit codes to avoid namespace collisions X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?p=palacios.git;a=commitdiff_plain;h=164bd99da7605dfb5f8a56338e54c924b2a583a6 rename exit codes to avoid namespace collisions --- diff --git a/palacios/include/palacios/svm_handler.h b/palacios/include/palacios/svm_handler.h index 0cca1b1..a01de25 100644 --- a/palacios/include/palacios/svm_handler.h +++ b/palacios/include/palacios/svm_handler.h @@ -32,169 +32,169 @@ /* SVM Intercept Exit Codes */ /* AMD Arch Vol 3, Appendix C, pg 477-478 */ /******************************************/ -#define VMEXIT_CR_READ_MASK 0xfffffff0 -#define VMEXIT_CR0_READ 0x00000000 -#define VMEXIT_CR1_READ 0x00000001 -#define VMEXIT_CR2_READ 0x00000002 -#define VMEXIT_CR3_READ 0x00000003 -#define VMEXIT_CR4_READ 0x00000004 -#define VMEXIT_CR5_READ 0x00000005 -#define VMEXIT_CR6_READ 0x00000006 -#define VMEXIT_CR7_READ 0x00000007 -#define VMEXIT_CR8_READ 0x00000008 -#define VMEXIT_CR9_READ 0x00000009 -#define VMEXIT_CR10_READ 0x0000000a -#define VMEXIT_CR11_READ 0x0000000b -#define VMEXIT_CR12_READ 0x0000000c -#define VMEXIT_CR13_READ 0x0000000d -#define VMEXIT_CR14_READ 0x0000000e -#define VMEXIT_CR15_READ 0x0000000f - -#define VMEXIT_CR_WRITE_MASK 0xffffffe0 -#define VMEXIT_CR0_WRITE 0x00000010 -#define VMEXIT_CR1_WRITE 0x00000011 -#define VMEXIT_CR2_WRITE 0x00000012 -#define VMEXIT_CR3_WRITE 0x00000013 -#define VMEXIT_CR4_WRITE 0x00000014 -#define VMEXIT_CR5_WRITE 0x00000015 -#define VMEXIT_CR6_WRITE 0x00000016 -#define VMEXIT_CR7_WRITE 0x00000017 -#define VMEXIT_CR8_WRITE 0x00000018 -#define VMEXIT_CR9_WRITE 0x00000019 -#define VMEXIT_CR10_WRITE 0x0000001a -#define VMEXIT_CR11_WRITE 0x0000001b -#define VMEXIT_CR12_WRITE 0x0000001c -#define VMEXIT_CR13_WRITE 0x0000001d -#define VMEXIT_CR14_WRITE 0x0000001e -#define VMEXIT_CR15_WRITE 0x0000001f - -#define VMEXIT_DR_READ_MASK 0xffffffd0 -#define VMEXIT_DR0_READ 0x00000020 -#define VMEXIT_DR1_READ 0x00000021 -#define VMEXIT_DR2_READ 0x00000022 -#define VMEXIT_DR3_READ 0x00000023 -#define VMEXIT_DR4_READ 0x00000024 -#define VMEXIT_DR5_READ 0x00000025 -#define VMEXIT_DR6_READ 0x00000026 -#define VMEXIT_DR7_READ 0x00000027 -#define VMEXIT_DR8_READ 0x00000028 -#define VMEXIT_DR9_READ 0x00000029 -#define VMEXIT_DR10_READ 0x0000002a -#define VMEXIT_DR11_READ 0x0000002b -#define VMEXIT_DR12_READ 0x0000002c -#define VMEXIT_DR13_READ 0x0000002d -#define VMEXIT_DR14_READ 0x0000002e -#define VMEXIT_DR15_READ 0x0000002f - -#define VMEXIT_DR_WRITE_MASK 0xffffffc0 -#define VMEXIT_DR0_WRITE 0x00000030 // ? this was previously 3f -#define VMEXIT_DR1_WRITE 0x00000031 -#define VMEXIT_DR2_WRITE 0x00000032 -#define VMEXIT_DR3_WRITE 0x00000033 -#define VMEXIT_DR4_WRITE 0x00000034 -#define VMEXIT_DR5_WRITE 0x00000035 -#define VMEXIT_DR6_WRITE 0x00000036 -#define VMEXIT_DR7_WRITE 0x00000037 -#define VMEXIT_DR8_WRITE 0x00000038 -#define VMEXIT_DR9_WRITE 0x00000039 -#define VMEXIT_DR10_WRITE 0x0000003a -#define VMEXIT_DR11_WRITE 0x0000003b -#define VMEXIT_DR12_WRITE 0x0000003c -#define VMEXIT_DR13_WRITE 0x0000003d -#define VMEXIT_DR14_WRITE 0x0000003e -#define VMEXIT_DR15_WRITE 0x0000003f - -#define VMEXIT_EXCP_MASK 0xffffffa0 -#define VMEXIT_EXCP0 0x00000040 -#define VMEXIT_EXCP1 0x00000041 -#define VMEXIT_EXCP2 0x00000042 -#define VMEXIT_EXCP3 0x00000043 -#define VMEXIT_EXCP4 0x00000044 -#define VMEXIT_EXCP5 0x00000045 -#define VMEXIT_EXCP6 0x00000046 -#define VMEXIT_EXCP7 0x00000047 -#define VMEXIT_EXCP8 0x00000048 -#define VMEXIT_EXCP9 0x00000049 -#define VMEXIT_EXCP10 0x0000004a -#define VMEXIT_EXCP11 0x0000004b -#define VMEXIT_EXCP12 0x0000004c -#define VMEXIT_EXCP13 0x0000004d -#define VMEXIT_EXCP14 0x0000004e -#define VMEXIT_EXCP15 0x0000004f -#define VMEXIT_EXCP16 0x00000050 -#define VMEXIT_EXCP17 0x00000051 -#define VMEXIT_EXCP18 0x00000052 -#define VMEXIT_EXCP19 0x00000053 -#define VMEXIT_EXCP20 0x00000054 -#define VMEXIT_EXCP21 0x00000055 -#define VMEXIT_EXCP22 0x00000056 -#define VMEXIT_EXCP23 0x00000057 -#define VMEXIT_EXCP24 0x00000058 -#define VMEXIT_EXCP25 0x00000059 -#define VMEXIT_EXCP26 0x0000005a -#define VMEXIT_EXCP27 0x0000005b -#define VMEXIT_EXCP28 0x0000005c -#define VMEXIT_EXCP29 0x0000005d -#define VMEXIT_EXCP30 0x0000005e -#define VMEXIT_EXCP31 0x0000005f - - -#define VMEXIT_INTR 0x00000060 -#define VMEXIT_NMI 0x00000061 -#define VMEXIT_SMI 0x00000062 -#define VMEXIT_INIT 0x00000063 -#define VMEXIT_VINITR 0x00000064 -#define VMEXIT_CR0_SEL_WRITE 0x00000065 -#define VMEXIT_IDTR_READ 0x00000066 -#define VMEXIT_GDTR_READ 0x00000067 -#define VMEXIT_LDTR_READ 0x00000068 -#define VMEXIT_TR_READ 0x00000069 -#define VMEXIT_IDTR_WRITE 0x0000006a -#define VMEXIT_GDTR_WRITE 0x0000006b -#define VMEXIT_LDTR_WRITE 0x0000006c -#define VMEXIT_TR_WRITE 0x0000006d -#define VMEXIT_RDTSC 0x0000006e -#define VMEXIT_RDPMC 0x0000006f -#define VMEXIT_PUSHF 0x00000070 -#define VMEXIT_POPF 0x00000071 -#define VMEXIT_CPUID 0x00000072 -#define VMEXIT_RSM 0x00000073 -#define VMEXIT_IRET 0x00000074 -#define VMEXIT_SWINT 0x00000075 -#define VMEXIT_INVD 0x00000076 -#define VMEXIT_PAUSE 0x00000077 -#define VMEXIT_HLT 0x00000078 -#define VMEXIT_INVLPG 0x00000079 -#define VMEXIT_INVLPGA 0x0000007a -#define VMEXIT_IOIO 0x0000007b -#define VMEXIT_MSR 0x0000007c -#define VMEXIT_TASK_SWITCH 0x0000007d -#define VMEXIT_FERR_FREEZE 0x0000007e -#define VMEXIT_SHUTDOWN 0x0000007f -#define VMEXIT_VMRUN 0x00000080 -#define VMEXIT_VMMCALL 0x00000081 -#define VMEXIT_VMLOAD 0x00000082 -#define VMEXIT_VMSAVE 0x00000083 -#define VMEXIT_STGI 0x00000084 -#define VMEXIT_CLGI 0x00000085 -#define VMEXIT_SKINIT 0x00000086 -#define VMEXIT_RDTSCP 0x00000087 -#define VMEXIT_ICEBP 0x00000088 -#define VMEXIT_WBINVD 0x00000089 -#define VMEXIT_MONITOR 0x0000008a -#define VMEXIT_MWAIT 0x0000008b -#define VMEXIT_MWAIT_CONDITIONAL 0x0000008c - -#define VMEXIT_NPF 0x00000400 - -#define VMEXIT_INVALID_VMCB -1 +#define SVM_EXIT_CR_READ_MASK 0xfffffff0 +#define SVM_EXIT_CR0_READ 0x00000000 +#define SVM_EXIT_CR1_READ 0x00000001 +#define SVM_EXIT_CR2_READ 0x00000002 +#define SVM_EXIT_CR3_READ 0x00000003 +#define SVM_EXIT_CR4_READ 0x00000004 +#define SVM_EXIT_CR5_READ 0x00000005 +#define SVM_EXIT_CR6_READ 0x00000006 +#define SVM_EXIT_CR7_READ 0x00000007 +#define SVM_EXIT_CR8_READ 0x00000008 +#define SVM_EXIT_CR9_READ 0x00000009 +#define SVM_EXIT_CR10_READ 0x0000000a +#define SVM_EXIT_CR11_READ 0x0000000b +#define SVM_EXIT_CR12_READ 0x0000000c +#define SVM_EXIT_CR13_READ 0x0000000d +#define SVM_EXIT_CR14_READ 0x0000000e +#define SVM_EXIT_CR15_READ 0x0000000f + +#define SVM_EXIT_CR_WRITE_MASK 0xffffffe0 +#define SVM_EXIT_CR0_WRITE 0x00000010 +#define SVM_EXIT_CR1_WRITE 0x00000011 +#define SVM_EXIT_CR2_WRITE 0x00000012 +#define SVM_EXIT_CR3_WRITE 0x00000013 +#define SVM_EXIT_CR4_WRITE 0x00000014 +#define SVM_EXIT_CR5_WRITE 0x00000015 +#define SVM_EXIT_CR6_WRITE 0x00000016 +#define SVM_EXIT_CR7_WRITE 0x00000017 +#define SVM_EXIT_CR8_WRITE 0x00000018 +#define SVM_EXIT_CR9_WRITE 0x00000019 +#define SVM_EXIT_CR10_WRITE 0x0000001a +#define SVM_EXIT_CR11_WRITE 0x0000001b +#define SVM_EXIT_CR12_WRITE 0x0000001c +#define SVM_EXIT_CR13_WRITE 0x0000001d +#define SVM_EXIT_CR14_WRITE 0x0000001e +#define SVM_EXIT_CR15_WRITE 0x0000001f + +#define SVM_EXIT_DR_READ_MASK 0xffffffd0 +#define SVM_EXIT_DR0_READ 0x00000020 +#define SVM_EXIT_DR1_READ 0x00000021 +#define SVM_EXIT_DR2_READ 0x00000022 +#define SVM_EXIT_DR3_READ 0x00000023 +#define SVM_EXIT_DR4_READ 0x00000024 +#define SVM_EXIT_DR5_READ 0x00000025 +#define SVM_EXIT_DR6_READ 0x00000026 +#define SVM_EXIT_DR7_READ 0x00000027 +#define SVM_EXIT_DR8_READ 0x00000028 +#define SVM_EXIT_DR9_READ 0x00000029 +#define SVM_EXIT_DR10_READ 0x0000002a +#define SVM_EXIT_DR11_READ 0x0000002b +#define SVM_EXIT_DR12_READ 0x0000002c +#define SVM_EXIT_DR13_READ 0x0000002d +#define SVM_EXIT_DR14_READ 0x0000002e +#define SVM_EXIT_DR15_READ 0x0000002f + +#define SVM_EXIT_DR_WRITE_MASK 0xffffffc0 +#define SVM_EXIT_DR0_WRITE 0x00000030 // ? this was previously 3f +#define SVM_EXIT_DR1_WRITE 0x00000031 +#define SVM_EXIT_DR2_WRITE 0x00000032 +#define SVM_EXIT_DR3_WRITE 0x00000033 +#define SVM_EXIT_DR4_WRITE 0x00000034 +#define SVM_EXIT_DR5_WRITE 0x00000035 +#define SVM_EXIT_DR6_WRITE 0x00000036 +#define SVM_EXIT_DR7_WRITE 0x00000037 +#define SVM_EXIT_DR8_WRITE 0x00000038 +#define SVM_EXIT_DR9_WRITE 0x00000039 +#define SVM_EXIT_DR10_WRITE 0x0000003a +#define SVM_EXIT_DR11_WRITE 0x0000003b +#define SVM_EXIT_DR12_WRITE 0x0000003c +#define SVM_EXIT_DR13_WRITE 0x0000003d +#define SVM_EXIT_DR14_WRITE 0x0000003e +#define SVM_EXIT_DR15_WRITE 0x0000003f + +#define SVM_EXIT_EXCP_MASK 0xffffffa0 +#define SVM_EXIT_EXCP0 0x00000040 +#define SVM_EXIT_EXCP1 0x00000041 +#define SVM_EXIT_EXCP2 0x00000042 +#define SVM_EXIT_EXCP3 0x00000043 +#define SVM_EXIT_EXCP4 0x00000044 +#define SVM_EXIT_EXCP5 0x00000045 +#define SVM_EXIT_EXCP6 0x00000046 +#define SVM_EXIT_EXCP7 0x00000047 +#define SVM_EXIT_EXCP8 0x00000048 +#define SVM_EXIT_EXCP9 0x00000049 +#define SVM_EXIT_EXCP10 0x0000004a +#define SVM_EXIT_EXCP11 0x0000004b +#define SVM_EXIT_EXCP12 0x0000004c +#define SVM_EXIT_EXCP13 0x0000004d +#define SVM_EXIT_EXCP14 0x0000004e +#define SVM_EXIT_EXCP15 0x0000004f +#define SVM_EXIT_EXCP16 0x00000050 +#define SVM_EXIT_EXCP17 0x00000051 +#define SVM_EXIT_EXCP18 0x00000052 +#define SVM_EXIT_EXCP19 0x00000053 +#define SVM_EXIT_EXCP20 0x00000054 +#define SVM_EXIT_EXCP21 0x00000055 +#define SVM_EXIT_EXCP22 0x00000056 +#define SVM_EXIT_EXCP23 0x00000057 +#define SVM_EXIT_EXCP24 0x00000058 +#define SVM_EXIT_EXCP25 0x00000059 +#define SVM_EXIT_EXCP26 0x0000005a +#define SVM_EXIT_EXCP27 0x0000005b +#define SVM_EXIT_EXCP28 0x0000005c +#define SVM_EXIT_EXCP29 0x0000005d +#define SVM_EXIT_EXCP30 0x0000005e +#define SVM_EXIT_EXCP31 0x0000005f + + +#define SVM_EXIT_INTR 0x00000060 +#define SVM_EXIT_NMI 0x00000061 +#define SVM_EXIT_SMI 0x00000062 +#define SVM_EXIT_INIT 0x00000063 +#define SVM_EXIT_VINITR 0x00000064 +#define SVM_EXIT_CR0_SEL_WRITE 0x00000065 +#define SVM_EXIT_IDTR_READ 0x00000066 +#define SVM_EXIT_GDTR_READ 0x00000067 +#define SVM_EXIT_LDTR_READ 0x00000068 +#define SVM_EXIT_TR_READ 0x00000069 +#define SVM_EXIT_IDTR_WRITE 0x0000006a +#define SVM_EXIT_GDTR_WRITE 0x0000006b +#define SVM_EXIT_LDTR_WRITE 0x0000006c +#define SVM_EXIT_TR_WRITE 0x0000006d +#define SVM_EXIT_RDTSC 0x0000006e +#define SVM_EXIT_RDPMC 0x0000006f +#define SVM_EXIT_PUSHF 0x00000070 +#define SVM_EXIT_POPF 0x00000071 +#define SVM_EXIT_CPUID 0x00000072 +#define SVM_EXIT_RSM 0x00000073 +#define SVM_EXIT_IRET 0x00000074 +#define SVM_EXIT_SWINT 0x00000075 +#define SVM_EXIT_INVD 0x00000076 +#define SVM_EXIT_PAUSE 0x00000077 +#define SVM_EXIT_HLT 0x00000078 +#define SVM_EXIT_INVLPG 0x00000079 +#define SVM_EXIT_INVLPGA 0x0000007a +#define SVM_EXIT_IOIO 0x0000007b +#define SVM_EXIT_MSR 0x0000007c +#define SVM_EXIT_TASK_SWITCH 0x0000007d +#define SVM_EXIT_FERR_FREEZE 0x0000007e +#define SVM_EXIT_SHUTDOWN 0x0000007f +#define SVM_EXIT_VMRUN 0x00000080 +#define SVM_EXIT_VMMCALL 0x00000081 +#define SVM_EXIT_VMLOAD 0x00000082 +#define SVM_EXIT_VMSAVE 0x00000083 +#define SVM_EXIT_STGI 0x00000084 +#define SVM_EXIT_CLGI 0x00000085 +#define SVM_EXIT_SKINIT 0x00000086 +#define SVM_EXIT_RDTSCP 0x00000087 +#define SVM_EXIT_ICEBP 0x00000088 +#define SVM_EXIT_WBINVD 0x00000089 +#define SVM_EXIT_MONITOR 0x0000008a +#define SVM_EXIT_MWAIT 0x0000008b +#define SVM_EXIT_MWAIT_CONDITIONAL 0x0000008c + +#define SVM_EXIT_NPF 0x00000400 + +#define SVM_EXIT_INVALID_VMCB -1 /******************************************/ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_info1, addr_t exit_info2); -const char * vmexit_code_to_str(uint_t exit_code); +const char * v3_svm_exit_code_to_str(uint_t exit_code); #endif // ! __V3VEE__ diff --git a/palacios/include/palacios/vmx_handler.h b/palacios/include/palacios/vmx_handler.h index 20561f8..632277a 100644 --- a/palacios/include/palacios/vmx_handler.h +++ b/palacios/include/palacios/vmx_handler.h @@ -29,56 +29,56 @@ /* VMX Intercept Exit Codes */ /******************************************/ typedef enum { - VMEXIT_INFO_EXCEPTION_OR_NMI = 0, - VMEXIT_EXTERNAL_INTR = 1, - VMEXIT_TRIPLE_FAULT = 2, - VMEXIT_INIT_SIGNAL = 3, - VMEXIT_STARTUP_IPI = 4, - VMEXIT_IO_SMI = 5, - VMEXIT_OTHER_SMI = 6, - VMEXIT_INTR_WINDOW = 7, - VMEXIT_NMI_WINDOW = 8, - VMEXIT_TASK_SWITCH = 9, - VMEXIT_CPUID = 10, - VMEXIT_HLT = 12, - VMEXIT_INVD = 13, - VMEXIT_INVLPG = 14, - VMEXIT_RDPMC = 15, - VMEXIT_RDTSC = 16, - VMEXIT_RSM = 17, - VMEXIT_VMCALL = 18, - VMEXIT_VMCLEAR = 19, - VMEXIT_VMLAUNCH = 20, - VMEXIT_VMPTRLD = 21, - VMEXIT_VMPTRST = 22, - VMEXIT_VMREAD = 23, - VMEXIT_VMRESUME = 24, - VMEXIT_VMWRITE = 25, - VMEXIT_VMXOFF = 26, - VMEXIT_VMXON = 27, - VMEXIT_CR_REG_ACCESSES = 28, - VMEXIT_MOV_DR = 29, - VMEXIT_IO_INSTR = 30, - VMEXIT_RDMSR = 31, - VMEXIT_WRMSR = 32, - VMEXIT_INVALID_GUEST_STATE = 33, - VMEXIT_INVALID_MSR_LOAD = 34, - VMEXIT_MWAIT = 36, - VMEXIT_MONITOR = 39, - VMEXIT_PAUSE = 40, - VMEXIT_INVALID_MACHINE_CHECK = 41, - VMEXIT_TPR_BELOW_THRESHOLD = 43, - VMEXIT_APIC = 44, - VMEXIT_GDTR_IDTR = 46, - VMEXIT_LDTR_TR = 47, - VMEXIT_EPT_VIOLATION = 48, - VMEXIT_EPT_CONFIG = 49, - VMEXIT_INVEPT = 50, - VMEXIT_RDTSCP = 51, - VMEXIT_EXPIRED_PREEMPT_TIMER = 52, - VMEXIT_INVVPID = 53, - VMEXIT_WBINVD = 54, - VMEXIT_XSETBV = 55 + VMX_EXIT_INFO_EXCEPTION_OR_NMI = 0, + VMX_EXIT_EXTERNAL_INTR = 1, + VMX_EXIT_TRIPLE_FAULT = 2, + VMX_EXIT_INIT_SIGNAL = 3, + VMX_EXIT_STARTUP_IPI = 4, + VMX_EXIT_IO_SMI = 5, + VMX_EXIT_OTHER_SMI = 6, + VMX_EXIT_INTR_WINDOW = 7, + VMX_EXIT_NMI_WINDOW = 8, + VMX_EXIT_TASK_SWITCH = 9, + VMX_EXIT_CPUID = 10, + VMX_EXIT_HLT = 12, + VMX_EXIT_INVD = 13, + VMX_EXIT_INVLPG = 14, + VMX_EXIT_RDPMC = 15, + VMX_EXIT_RDTSC = 16, + VMX_EXIT_RSM = 17, + VMX_EXIT_VMCALL = 18, + VMX_EXIT_VMCLEAR = 19, + VMX_EXIT_VMLAUNCH = 20, + VMX_EXIT_VMPTRLD = 21, + VMX_EXIT_VMPTRST = 22, + VMX_EXIT_VMREAD = 23, + VMX_EXIT_VMRESUME = 24, + VMX_EXIT_VMWRITE = 25, + VMX_EXIT_VMXOFF = 26, + VMX_EXIT_VMXON = 27, + VMX_EXIT_CR_REG_ACCESSES = 28, + VMX_EXIT_MOV_DR = 29, + VMX_EXIT_IO_INSTR = 30, + VMX_EXIT_RDMSR = 31, + VMX_EXIT_WRMSR = 32, + VMX_EXIT_INVALID_GUEST_STATE = 33, + VMX_EXIT_INVALID_MSR_LOAD = 34, + VMX_EXIT_MWAIT = 36, + VMX_EXIT_MONITOR = 39, + VMX_EXIT_PAUSE = 40, + VMX_EXIT_INVALID_MACHINE_CHECK = 41, + VMX_EXIT_TPR_BELOW_THRESHOLD = 43, + VMX_EXIT_APIC = 44, + VMX_EXIT_GDTR_IDTR = 46, + VMX_EXIT_LDTR_TR = 47, + VMX_EXIT_EPT_VIOLATION = 48, + VMX_EXIT_EPT_CONFIG = 49, + VMX_EXIT_INVEPT = 50, + VMX_EXIT_RDTSCP = 51, + VMX_EXIT_EXPIRED_PREEMPT_TIMER = 52, + VMX_EXIT_INVVPID = 53, + VMX_EXIT_WBINVD = 54, + VMX_EXIT_XSETBV = 55 } vmx_exit_t; /* VMCS Exit QUALIFICATIONs */ diff --git a/palacios/src/palacios/svm_handler.c b/palacios/src/palacios/svm_handler.c index 96fcaa1..5849055 100644 --- a/palacios/src/palacios/svm_handler.c +++ b/palacios/src/palacios/svm_handler.c @@ -60,7 +60,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i // PrintDebug("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) { @@ -92,7 +92,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) { @@ -109,14 +109,14 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i break; - case VMEXIT_CPUID: + case SVM_EXIT_CPUID: if (v3_handle_cpuid(info) == -1) { PrintError("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"); #endif @@ -124,7 +124,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i return -1; } break; - case VMEXIT_CR0_READ: + case SVM_EXIT_CR0_READ: #ifdef V3_CONFIG_DEBUG_CTRL_REGS PrintDebug("CR0 Read\n"); #endif @@ -132,7 +132,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i return -1; } break; - case VMEXIT_CR3_WRITE: + case SVM_EXIT_CR3_WRITE: #ifdef V3_CONFIG_DEBUG_CTRL_REGS PrintDebug("CR3 Write\n"); #endif @@ -141,7 +141,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i } break; - case VMEXIT_CR3_READ: + case SVM_EXIT_CR3_READ: #ifdef V3_CONFIG_DEBUG_CTRL_REGS PrintDebug("CR3 Read\n"); #endif @@ -149,7 +149,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i return -1; } break; - case VMEXIT_CR4_WRITE: + case SVM_EXIT_CR4_WRITE: #ifdef V3_CONFIG_DEBUG_CTRL_REGS PrintDebug("CR4 Write\n"); #endif @@ -157,7 +157,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i return -1; } break; - case VMEXIT_CR4_READ: + case SVM_EXIT_CR4_READ: #ifdef V3_CONFIG_DEBUG_CTRL_REGS PrintDebug("CR4 Read\n"); #endif @@ -165,7 +165,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i return -1; } break; - case VMEXIT_EXCP14: { + 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 @@ -182,7 +182,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i } break; } - case VMEXIT_NPF: { + case SVM_EXIT_NPF: { addr_t fault_addr = exit_info2; pf_error_t * error_code = (pf_error_t *)&(exit_info1); @@ -196,7 +196,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i } break; } - case VMEXIT_INVLPG: + case SVM_EXIT_INVLPG: if (info->shdw_pg_mode == SHADOW_PAGING) { #ifdef V3_CONFIG_DEBUG_SHADOW_PAGING PrintDebug("Invlpg\n"); @@ -206,7 +206,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i } } break; - case VMEXIT_VMMCALL: + case SVM_EXIT_VMMCALL: /* * Hypercall */ @@ -221,16 +221,16 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i } 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"); #endif @@ -238,13 +238,13 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i return -1; } break; - case VMEXIT_PAUSE: + case SVM_EXIT_PAUSE: // PrintDebug("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"); #endif @@ -252,7 +252,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i return -1; } break; - case VMEXIT_RDTSC: + case SVM_EXIT_RDTSC: #ifdef V3_CONFIG_DEBUG_TIME PrintDebug("RDTSC/RDTSCP\n"); #endif @@ -261,7 +261,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i return -1; } break; - case VMEXIT_RDTSCP: + case SVM_EXIT_RDTSCP: #ifdef V3_CONFIG_DEBUG_TIME PrintDebug("RDTSCP\n"); #endif @@ -270,7 +270,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i return -1; } break; - case VMEXIT_SHUTDOWN: + case SVM_EXIT_SHUTDOWN: PrintDebug("Guest-initiated shutdown\n"); info->vm_info->run_state = VM_STOPPED; @@ -279,7 +279,7 @@ 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"); #endif @@ -298,7 +298,7 @@ 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("Unhandled SVM Exit: %s\n", v3_svm_exit_code_to_str(exit_code)); rip_addr = get_addr_linear(info, info->rip, &(info->segments.cs)); @@ -333,7 +333,7 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i #endif - if (exit_code == VMEXIT_INTR) { + if (exit_code == SVM_EXIT_INTR) { //PrintDebug("INTR ret IP = %x\n", guest_state->rip); } @@ -341,440 +341,440 @@ int v3_handle_svm_exit(struct guest_info * info, addr_t exit_code, addr_t exit_i } -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; } diff --git a/palacios/src/palacios/vmm_telemetry.c b/palacios/src/palacios/vmm_telemetry.c index d12a5a7..c0eb38d 100644 --- a/palacios/src/palacios/vmm_telemetry.c +++ b/palacios/src/palacios/vmm_telemetry.c @@ -20,10 +20,12 @@ #include #include #include +#include #include #include + #ifdef V3_CONFIG_TELEMETRY_GRANULARITY #define DEFAULT_GRANULARITY V3_CONFIG_TELEMETRY_GRANULARITY #else @@ -266,15 +268,33 @@ static void print_core_telemetry(struct guest_info * core, char *hdr_buf) } do { - evt = rb_entry(node, struct exit_event, tree_node); - const char * code_str = vmexit_code_to_str(evt->exit_code); - - V3_Print("%s%s:%sCnt=%u,%sAvg. Time=%u\n", - hdr_buf, code_str, - (strlen(code_str) > 13) ? "\t" : "\t\t", - evt->cnt, - (evt->cnt >= 100) ? "\t" : "\t\t", - (uint32_t)(evt->handler_time / evt->cnt)); + extern v3_cpu_arch_t v3_mach_type; + const char * code_str = NULL; + + evt = rb_entry(node, struct exit_event, tree_node); + + switch (v3_mach_type) { + case V3_SVM_CPU: + case V3_SVM_REV3_CPU: + + code_str = v3_svm_exit_code_to_str(evt->exit_code); + break; + case V3_VMX_CPU: + case V3_VMX_EPT_CPU: + case V3_VMX_EPT_UG_CPU: + code_str = v3_vmx_exit_code_to_str(evt->exit_code); + break; + + default: + continue; + } + + V3_Print("%s%s:%sCnt=%u,%sAvg. Time=%u\n", + hdr_buf, code_str, + (strlen(code_str) > 13) ? "\t" : "\t\t", + evt->cnt, + (evt->cnt >= 100) ? "\t" : "\t\t", + (uint32_t)(evt->handler_time / evt->cnt)); } while ((node = v3_rb_next(node))); return; } diff --git a/palacios/src/palacios/vmx.c b/palacios/src/palacios/vmx.c index 0660dff..16f3e3b 100644 --- a/palacios/src/palacios/vmx.c +++ b/palacios/src/palacios/vmx.c @@ -1057,7 +1057,7 @@ int v3_vmx_enter(struct guest_info * info) { update_irq_exit_state(info); #endif - if (exit_info.exit_reason == VMEXIT_INTR_WINDOW) { + if (exit_info.exit_reason == VMX_EXIT_INTR_WINDOW) { // This is a special case whose only job is to inject an interrupt vmcs_read(VMCS_PROC_CTRLS, &(vmx_info->pri_proc_ctrls.value)); vmx_info->pri_proc_ctrls.int_wndw_exit = 0; diff --git a/palacios/src/palacios/vmx_handler.c b/palacios/src/palacios/vmx_handler.c index 432b571..51bf62d 100644 --- a/palacios/src/palacios/vmx_handler.c +++ b/palacios/src/palacios/vmx_handler.c @@ -47,7 +47,7 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf struct vmx_basic_exit_info * basic_info = (struct vmx_basic_exit_info *)&(exit_info->exit_reason); /* - PrintError("Handling VMEXIT: %s (%u), %lu (0x%lx)\n", + PrintError("Handling VMX_EXIT: %s (%u), %lu (0x%lx)\n", v3_vmx_exit_code_to_str(exit_info->exit_reason), exit_info->exit_reason, exit_info->exit_qual, exit_info->exit_qual); @@ -58,12 +58,12 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf if (basic_info->entry_error == 1) { switch (basic_info->reason) { - case VMEXIT_INVALID_GUEST_STATE: + case VMX_EXIT_INVALID_GUEST_STATE: PrintError("VM Entry failed due to invalid guest state\n"); PrintError("Printing VMCS: (NOTE: This VMCS may not belong to the correct guest)\n"); v3_print_vmcs(); break; - case VMEXIT_INVALID_MSR_LOAD: + case VMX_EXIT_INVALID_MSR_LOAD: PrintError("VM Entry failed due to error loading MSRs\n"); break; default: @@ -83,7 +83,7 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf #endif switch (basic_info->reason) { - case VMEXIT_INFO_EXCEPTION_OR_NMI: { + case VMX_EXIT_INFO_EXCEPTION_OR_NMI: { pf_error_t error_code = *(pf_error_t *)&(exit_info->int_err); @@ -114,7 +114,7 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf break; } - case VMEXIT_EPT_VIOLATION: { + case VMX_EXIT_EPT_VIOLATION: { struct ept_exit_qual * ept_qual = (struct ept_exit_qual *)&(exit_info->exit_qual); if (v3_handle_ept_fault(info, exit_info->ept_fault_addr, ept_qual) == -1) { @@ -124,7 +124,7 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf break; } - case VMEXIT_INVLPG: + case VMX_EXIT_INVLPG: if (info->shdw_pg_mode == SHADOW_PAGING) { if (v3_handle_shadow_invlpg(info) == -1) { PrintError("Error handling INVLPG\n"); @@ -134,7 +134,7 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf break; - case VMEXIT_RDTSC: + case VMX_EXIT_RDTSC: #ifdef V3_CONFIG_DEBUG_TIME PrintDebug("RDTSC\n"); #endif @@ -145,28 +145,28 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf break; - case VMEXIT_CPUID: + case VMX_EXIT_CPUID: if (v3_handle_cpuid(info) == -1) { PrintError("Error Handling CPUID instruction\n"); return -1; } break; - case VMEXIT_RDMSR: + case VMX_EXIT_RDMSR: if (v3_handle_msr_read(info) == -1) { PrintError("Error handling MSR Read\n"); return -1; } break; - case VMEXIT_WRMSR: + case VMX_EXIT_WRMSR: if (v3_handle_msr_write(info) == -1) { PrintError("Error handling MSR Write\n"); return -1; } break; - case VMEXIT_VMCALL: + case VMX_EXIT_VMCALL: /* * Hypercall */ @@ -179,7 +179,7 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf return -1; } break; - case VMEXIT_IO_INSTR: { + case VMX_EXIT_IO_INSTR: { struct vmx_exit_io_qual * io_qual = (struct vmx_exit_io_qual *)&(exit_info->exit_qual); if (io_qual->dir == 0) { @@ -209,7 +209,7 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf } break; } - case VMEXIT_CR_REG_ACCESSES: { + case VMX_EXIT_CR_REG_ACCESSES: { struct vmx_exit_cr_qual * cr_qual = (struct vmx_exit_cr_qual *)&(exit_info->exit_qual); // PrintDebug("Control register: %d\n", cr_qual->access_type); @@ -247,7 +247,7 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf break; } - case VMEXIT_HLT: + case VMX_EXIT_HLT: PrintDebug("Guest halted\n"); if (v3_handle_halt(info) == -1) { @@ -259,25 +259,25 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf - case VMEXIT_PAUSE: + case VMX_EXIT_PAUSE: // Handled as NOP info->rip += 2; break; - case VMEXIT_EXTERNAL_INTR: + case VMX_EXIT_EXTERNAL_INTR: // Interrupts are handled outside switch break; - case VMEXIT_INTR_WINDOW: + case VMX_EXIT_INTR_WINDOW: // This is handled in the atomic part of the vmx code, // not in the generic (interruptable) vmx handler break; - case VMEXIT_EXPIRED_PREEMPT_TIMER: + case VMX_EXIT_EXPIRED_PREEMPT_TIMER: V3_Print("VMX Preempt Timer Expired.\n"); // This just forces an exit and is handled outside the switch break; default: - PrintError("Unhandled VMEXIT: %s (%u), %lu (0x%lx)\n", + PrintError("Unhandled VMX_EXIT: %s (%u), %lu (0x%lx)\n", v3_vmx_exit_code_to_str(basic_info->reason), basic_info->reason, exit_info->exit_qual, exit_info->exit_qual); @@ -295,160 +295,160 @@ int v3_handle_vmx_exit(struct guest_info * info, struct vmx_exit_info * exit_inf return 0; } -static const char VMEXIT_INFO_EXCEPTION_OR_NMI_STR[] = "VMEXIT_INFO_EXCEPTION_OR_NMI"; -static const char VMEXIT_EXTERNAL_INTR_STR[] = "VMEXIT_EXTERNAL_INTR"; -static const char VMEXIT_TRIPLE_FAULT_STR[] = "VMEXIT_TRIPLE_FAULT"; -static const char VMEXIT_INIT_SIGNAL_STR[] = "VMEXIT_INIT_SIGNAL"; -static const char VMEXIT_STARTUP_IPI_STR[] = "VMEXIT_STARTUP_IPI"; -static const char VMEXIT_IO_SMI_STR[] = "VMEXIT_IO_SMI"; -static const char VMEXIT_OTHER_SMI_STR[] = "VMEXIT_OTHER_SMI"; -static const char VMEXIT_INTR_WINDOW_STR[] = "VMEXIT_INTR_WINDOW"; -static const char VMEXIT_NMI_WINDOW_STR[] = "VMEXIT_NMI_WINDOW"; -static const char VMEXIT_TASK_SWITCH_STR[] = "VMEXIT_TASK_SWITCH"; -static const char VMEXIT_CPUID_STR[] = "VMEXIT_CPUID"; -static const char VMEXIT_HLT_STR[] = "VMEXIT_HLT"; -static const char VMEXIT_INVD_STR[] = "VMEXIT_INVD"; -static const char VMEXIT_INVLPG_STR[] = "VMEXIT_INVLPG"; -static const char VMEXIT_RDPMC_STR[] = "VMEXIT_RDPMC"; -static const char VMEXIT_RDTSC_STR[] = "VMEXIT_RDTSC"; -static const char VMEXIT_RSM_STR[] = "VMEXIT_RSM"; -static const char VMEXIT_VMCALL_STR[] = "VMEXIT_VMCALL"; -static const char VMEXIT_VMCLEAR_STR[] = "VMEXIT_VMCLEAR"; -static const char VMEXIT_VMLAUNCH_STR[] = "VMEXIT_VMLAUNCH"; -static const char VMEXIT_VMPTRLD_STR[] = "VMEXIT_VMPTRLD"; -static const char VMEXIT_VMPTRST_STR[] = "VMEXIT_VMPTRST"; -static const char VMEXIT_VMREAD_STR[] = "VMEXIT_VMREAD"; -static const char VMEXIT_VMRESUME_STR[] = "VMEXIT_VMRESUME"; -static const char VMEXIT_VMWRITE_STR[] = "VMEXIT_VMWRITE"; -static const char VMEXIT_VMXOFF_STR[] = "VMEXIT_VMXOFF"; -static const char VMEXIT_VMXON_STR[] = "VMEXIT_VMXON"; -static const char VMEXIT_CR_REG_ACCESSES_STR[] = "VMEXIT_CR_REG_ACCESSES"; -static const char VMEXIT_MOV_DR_STR[] = "VMEXIT_MOV_DR"; -static const char VMEXIT_IO_INSTR_STR[] = "VMEXIT_IO_INSTR"; -static const char VMEXIT_RDMSR_STR[] = "VMEXIT_RDMSR"; -static const char VMEXIT_WRMSR_STR[] = "VMEXIT_WRMSR"; -static const char VMEXIT_INVALID_GUEST_STATE_STR[] = "VMEXIT_INVALID_GUEST_STATE"; -static const char VMEXIT_INVALID_MSR_LOAD_STR[] = "VMEXIT_INVALID_MSR_LOAD"; -static const char VMEXIT_MWAIT_STR[] = "VMEXIT_MWAIT"; -static const char VMEXIT_MONITOR_STR[] = "VMEXIT_MONITOR"; -static const char VMEXIT_PAUSE_STR[] = "VMEXIT_PAUSE"; -static const char VMEXIT_INVALID_MACHINE_CHECK_STR[] = "VMEXIT_INVALIDE_MACHINE_CHECK"; -static const char VMEXIT_TPR_BELOW_THRESHOLD_STR[] = "VMEXIT_TPR_BELOW_THRESHOLD"; -static const char VMEXIT_APIC_STR[] = "VMEXIT_APIC"; -static const char VMEXIT_GDTR_IDTR_STR[] = "VMEXIT_GDTR_IDTR"; -static const char VMEXIT_LDTR_TR_STR[] = "VMEXIT_LDTR_TR"; -static const char VMEXIT_EPT_VIOLATION_STR[] = "VMEXIT_EPT_VIOLATION"; -static const char VMEXIT_EPT_CONFIG_STR[] = "VMEXIT_EPT_CONFIG"; -static const char VMEXIT_INVEPT_STR[] = "VMEXIT_INVEPT"; -static const char VMEXIT_RDTSCP_STR[] = "VMEXIT_RDTSCP"; -static const char VMEXIT_EXPIRED_PREEMPT_TIMER_STR[] = "VMEXIT_EXPIRED_PREEMPT_TIMER"; -static const char VMEXIT_INVVPID_STR[] = "VMEXIT_INVVPID"; -static const char VMEXIT_WBINVD_STR[] = "VMEXIT_WBINVD"; -static const char VMEXIT_XSETBV_STR[] = "VMEXIT_XSETBV"; +static const char VMX_EXIT_INFO_EXCEPTION_OR_NMI_STR[] = "VMX_EXIT_INFO_EXCEPTION_OR_NMI"; +static const char VMX_EXIT_EXTERNAL_INTR_STR[] = "VMX_EXIT_EXTERNAL_INTR"; +static const char VMX_EXIT_TRIPLE_FAULT_STR[] = "VMX_EXIT_TRIPLE_FAULT"; +static const char VMX_EXIT_INIT_SIGNAL_STR[] = "VMX_EXIT_INIT_SIGNAL"; +static const char VMX_EXIT_STARTUP_IPI_STR[] = "VMX_EXIT_STARTUP_IPI"; +static const char VMX_EXIT_IO_SMI_STR[] = "VMX_EXIT_IO_SMI"; +static const char VMX_EXIT_OTHER_SMI_STR[] = "VMX_EXIT_OTHER_SMI"; +static const char VMX_EXIT_INTR_WINDOW_STR[] = "VMX_EXIT_INTR_WINDOW"; +static const char VMX_EXIT_NMI_WINDOW_STR[] = "VMX_EXIT_NMI_WINDOW"; +static const char VMX_EXIT_TASK_SWITCH_STR[] = "VMX_EXIT_TASK_SWITCH"; +static const char VMX_EXIT_CPUID_STR[] = "VMX_EXIT_CPUID"; +static const char VMX_EXIT_HLT_STR[] = "VMX_EXIT_HLT"; +static const char VMX_EXIT_INVD_STR[] = "VMX_EXIT_INVD"; +static const char VMX_EXIT_INVLPG_STR[] = "VMX_EXIT_INVLPG"; +static const char VMX_EXIT_RDPMC_STR[] = "VMX_EXIT_RDPMC"; +static const char VMX_EXIT_RDTSC_STR[] = "VMX_EXIT_RDTSC"; +static const char VMX_EXIT_RSM_STR[] = "VMX_EXIT_RSM"; +static const char VMX_EXIT_VMCALL_STR[] = "VMX_EXIT_VMCALL"; +static const char VMX_EXIT_VMCLEAR_STR[] = "VMX_EXIT_VMCLEAR"; +static const char VMX_EXIT_VMLAUNCH_STR[] = "VMX_EXIT_VMLAUNCH"; +static const char VMX_EXIT_VMPTRLD_STR[] = "VMX_EXIT_VMPTRLD"; +static const char VMX_EXIT_VMPTRST_STR[] = "VMX_EXIT_VMPTRST"; +static const char VMX_EXIT_VMREAD_STR[] = "VMX_EXIT_VMREAD"; +static const char VMX_EXIT_VMRESUME_STR[] = "VMX_EXIT_VMRESUME"; +static const char VMX_EXIT_VMWRITE_STR[] = "VMX_EXIT_VMWRITE"; +static const char VMX_EXIT_VMXOFF_STR[] = "VMX_EXIT_VMXOFF"; +static const char VMX_EXIT_VMXON_STR[] = "VMX_EXIT_VMXON"; +static const char VMX_EXIT_CR_REG_ACCESSES_STR[] = "VMX_EXIT_CR_REG_ACCESSES"; +static const char VMX_EXIT_MOV_DR_STR[] = "VMX_EXIT_MOV_DR"; +static const char VMX_EXIT_IO_INSTR_STR[] = "VMX_EXIT_IO_INSTR"; +static const char VMX_EXIT_RDMSR_STR[] = "VMX_EXIT_RDMSR"; +static const char VMX_EXIT_WRMSR_STR[] = "VMX_EXIT_WRMSR"; +static const char VMX_EXIT_INVALID_GUEST_STATE_STR[] = "VMX_EXIT_INVALID_GUEST_STATE"; +static const char VMX_EXIT_INVALID_MSR_LOAD_STR[] = "VMX_EXIT_INVALID_MSR_LOAD"; +static const char VMX_EXIT_MWAIT_STR[] = "VMX_EXIT_MWAIT"; +static const char VMX_EXIT_MONITOR_STR[] = "VMX_EXIT_MONITOR"; +static const char VMX_EXIT_PAUSE_STR[] = "VMX_EXIT_PAUSE"; +static const char VMX_EXIT_INVALID_MACHINE_CHECK_STR[] = "VMX_EXIT_INVALIDE_MACHINE_CHECK"; +static const char VMX_EXIT_TPR_BELOW_THRESHOLD_STR[] = "VMX_EXIT_TPR_BELOW_THRESHOLD"; +static const char VMX_EXIT_APIC_STR[] = "VMX_EXIT_APIC"; +static const char VMX_EXIT_GDTR_IDTR_STR[] = "VMX_EXIT_GDTR_IDTR"; +static const char VMX_EXIT_LDTR_TR_STR[] = "VMX_EXIT_LDTR_TR"; +static const char VMX_EXIT_EPT_VIOLATION_STR[] = "VMX_EXIT_EPT_VIOLATION"; +static const char VMX_EXIT_EPT_CONFIG_STR[] = "VMX_EXIT_EPT_CONFIG"; +static const char VMX_EXIT_INVEPT_STR[] = "VMX_EXIT_INVEPT"; +static const char VMX_EXIT_RDTSCP_STR[] = "VMX_EXIT_RDTSCP"; +static const char VMX_EXIT_EXPIRED_PREEMPT_TIMER_STR[] = "VMX_EXIT_EXPIRED_PREEMPT_TIMER"; +static const char VMX_EXIT_INVVPID_STR[] = "VMX_EXIT_INVVPID"; +static const char VMX_EXIT_WBINVD_STR[] = "VMX_EXIT_WBINVD"; +static const char VMX_EXIT_XSETBV_STR[] = "VMX_EXIT_XSETBV"; const char * v3_vmx_exit_code_to_str(vmx_exit_t exit) { - switch(exit) { - case VMEXIT_INFO_EXCEPTION_OR_NMI: - return VMEXIT_INFO_EXCEPTION_OR_NMI_STR; - case VMEXIT_EXTERNAL_INTR: - return VMEXIT_EXTERNAL_INTR_STR; - case VMEXIT_TRIPLE_FAULT: - return VMEXIT_TRIPLE_FAULT_STR; - case VMEXIT_INIT_SIGNAL: - return VMEXIT_INIT_SIGNAL_STR; - case VMEXIT_STARTUP_IPI: - return VMEXIT_STARTUP_IPI_STR; - case VMEXIT_IO_SMI: - return VMEXIT_IO_SMI_STR; - case VMEXIT_OTHER_SMI: - return VMEXIT_OTHER_SMI_STR; - case VMEXIT_INTR_WINDOW: - return VMEXIT_INTR_WINDOW_STR; - case VMEXIT_NMI_WINDOW: - return VMEXIT_NMI_WINDOW_STR; - case VMEXIT_TASK_SWITCH: - return VMEXIT_TASK_SWITCH_STR; - case VMEXIT_CPUID: - return VMEXIT_CPUID_STR; - case VMEXIT_HLT: - return VMEXIT_HLT_STR; - case VMEXIT_INVD: - return VMEXIT_INVD_STR; - case VMEXIT_INVLPG: - return VMEXIT_INVLPG_STR; - case VMEXIT_RDPMC: - return VMEXIT_RDPMC_STR; - case VMEXIT_RDTSC: - return VMEXIT_RDTSC_STR; - case VMEXIT_RSM: - return VMEXIT_RSM_STR; - case VMEXIT_VMCALL: - return VMEXIT_VMCALL_STR; - case VMEXIT_VMCLEAR: - return VMEXIT_VMCLEAR_STR; - case VMEXIT_VMLAUNCH: - return VMEXIT_VMLAUNCH_STR; - case VMEXIT_VMPTRLD: - return VMEXIT_VMPTRLD_STR; - case VMEXIT_VMPTRST: - return VMEXIT_VMPTRST_STR; - case VMEXIT_VMREAD: - return VMEXIT_VMREAD_STR; - case VMEXIT_VMRESUME: - return VMEXIT_VMRESUME_STR; - case VMEXIT_VMWRITE: - return VMEXIT_VMWRITE_STR; - case VMEXIT_VMXOFF: - return VMEXIT_VMXOFF_STR; - case VMEXIT_VMXON: - return VMEXIT_VMXON_STR; - case VMEXIT_CR_REG_ACCESSES: - return VMEXIT_CR_REG_ACCESSES_STR; - case VMEXIT_MOV_DR: - return VMEXIT_MOV_DR_STR; - case VMEXIT_IO_INSTR: - return VMEXIT_IO_INSTR_STR; - case VMEXIT_RDMSR: - return VMEXIT_RDMSR_STR; - case VMEXIT_WRMSR: - return VMEXIT_WRMSR_STR; - case VMEXIT_INVALID_GUEST_STATE: - return VMEXIT_INVALID_GUEST_STATE_STR; - case VMEXIT_INVALID_MSR_LOAD: - return VMEXIT_INVALID_MSR_LOAD_STR; - case VMEXIT_MWAIT: - return VMEXIT_MWAIT_STR; - case VMEXIT_MONITOR: - return VMEXIT_MONITOR_STR; - case VMEXIT_PAUSE: - return VMEXIT_PAUSE_STR; - case VMEXIT_INVALID_MACHINE_CHECK: - return VMEXIT_INVALID_MACHINE_CHECK_STR; - case VMEXIT_TPR_BELOW_THRESHOLD: - return VMEXIT_TPR_BELOW_THRESHOLD_STR; - case VMEXIT_APIC: - return VMEXIT_APIC_STR; - case VMEXIT_GDTR_IDTR: - return VMEXIT_GDTR_IDTR_STR; - case VMEXIT_LDTR_TR: - return VMEXIT_LDTR_TR_STR; - case VMEXIT_EPT_VIOLATION: - return VMEXIT_EPT_VIOLATION_STR; - case VMEXIT_EPT_CONFIG: - return VMEXIT_EPT_CONFIG_STR; - case VMEXIT_INVEPT: - return VMEXIT_INVEPT_STR; - case VMEXIT_RDTSCP: - return VMEXIT_RDTSCP_STR; - case VMEXIT_EXPIRED_PREEMPT_TIMER: - return VMEXIT_EXPIRED_PREEMPT_TIMER_STR; - case VMEXIT_INVVPID: - return VMEXIT_INVVPID_STR; - case VMEXIT_WBINVD: - return VMEXIT_WBINVD_STR; - case VMEXIT_XSETBV: - return VMEXIT_XSETBV_STR; + switch (exit) { + case VMX_EXIT_INFO_EXCEPTION_OR_NMI: + return VMX_EXIT_INFO_EXCEPTION_OR_NMI_STR; + case VMX_EXIT_EXTERNAL_INTR: + return VMX_EXIT_EXTERNAL_INTR_STR; + case VMX_EXIT_TRIPLE_FAULT: + return VMX_EXIT_TRIPLE_FAULT_STR; + case VMX_EXIT_INIT_SIGNAL: + return VMX_EXIT_INIT_SIGNAL_STR; + case VMX_EXIT_STARTUP_IPI: + return VMX_EXIT_STARTUP_IPI_STR; + case VMX_EXIT_IO_SMI: + return VMX_EXIT_IO_SMI_STR; + case VMX_EXIT_OTHER_SMI: + return VMX_EXIT_OTHER_SMI_STR; + case VMX_EXIT_INTR_WINDOW: + return VMX_EXIT_INTR_WINDOW_STR; + case VMX_EXIT_NMI_WINDOW: + return VMX_EXIT_NMI_WINDOW_STR; + case VMX_EXIT_TASK_SWITCH: + return VMX_EXIT_TASK_SWITCH_STR; + case VMX_EXIT_CPUID: + return VMX_EXIT_CPUID_STR; + case VMX_EXIT_HLT: + return VMX_EXIT_HLT_STR; + case VMX_EXIT_INVD: + return VMX_EXIT_INVD_STR; + case VMX_EXIT_INVLPG: + return VMX_EXIT_INVLPG_STR; + case VMX_EXIT_RDPMC: + return VMX_EXIT_RDPMC_STR; + case VMX_EXIT_RDTSC: + return VMX_EXIT_RDTSC_STR; + case VMX_EXIT_RSM: + return VMX_EXIT_RSM_STR; + case VMX_EXIT_VMCALL: + return VMX_EXIT_VMCALL_STR; + case VMX_EXIT_VMCLEAR: + return VMX_EXIT_VMCLEAR_STR; + case VMX_EXIT_VMLAUNCH: + return VMX_EXIT_VMLAUNCH_STR; + case VMX_EXIT_VMPTRLD: + return VMX_EXIT_VMPTRLD_STR; + case VMX_EXIT_VMPTRST: + return VMX_EXIT_VMPTRST_STR; + case VMX_EXIT_VMREAD: + return VMX_EXIT_VMREAD_STR; + case VMX_EXIT_VMRESUME: + return VMX_EXIT_VMRESUME_STR; + case VMX_EXIT_VMWRITE: + return VMX_EXIT_VMWRITE_STR; + case VMX_EXIT_VMXOFF: + return VMX_EXIT_VMXOFF_STR; + case VMX_EXIT_VMXON: + return VMX_EXIT_VMXON_STR; + case VMX_EXIT_CR_REG_ACCESSES: + return VMX_EXIT_CR_REG_ACCESSES_STR; + case VMX_EXIT_MOV_DR: + return VMX_EXIT_MOV_DR_STR; + case VMX_EXIT_IO_INSTR: + return VMX_EXIT_IO_INSTR_STR; + case VMX_EXIT_RDMSR: + return VMX_EXIT_RDMSR_STR; + case VMX_EXIT_WRMSR: + return VMX_EXIT_WRMSR_STR; + case VMX_EXIT_INVALID_GUEST_STATE: + return VMX_EXIT_INVALID_GUEST_STATE_STR; + case VMX_EXIT_INVALID_MSR_LOAD: + return VMX_EXIT_INVALID_MSR_LOAD_STR; + case VMX_EXIT_MWAIT: + return VMX_EXIT_MWAIT_STR; + case VMX_EXIT_MONITOR: + return VMX_EXIT_MONITOR_STR; + case VMX_EXIT_PAUSE: + return VMX_EXIT_PAUSE_STR; + case VMX_EXIT_INVALID_MACHINE_CHECK: + return VMX_EXIT_INVALID_MACHINE_CHECK_STR; + case VMX_EXIT_TPR_BELOW_THRESHOLD: + return VMX_EXIT_TPR_BELOW_THRESHOLD_STR; + case VMX_EXIT_APIC: + return VMX_EXIT_APIC_STR; + case VMX_EXIT_GDTR_IDTR: + return VMX_EXIT_GDTR_IDTR_STR; + case VMX_EXIT_LDTR_TR: + return VMX_EXIT_LDTR_TR_STR; + case VMX_EXIT_EPT_VIOLATION: + return VMX_EXIT_EPT_VIOLATION_STR; + case VMX_EXIT_EPT_CONFIG: + return VMX_EXIT_EPT_CONFIG_STR; + case VMX_EXIT_INVEPT: + return VMX_EXIT_INVEPT_STR; + case VMX_EXIT_RDTSCP: + return VMX_EXIT_RDTSCP_STR; + case VMX_EXIT_EXPIRED_PREEMPT_TIMER: + return VMX_EXIT_EXPIRED_PREEMPT_TIMER_STR; + case VMX_EXIT_INVVPID: + return VMX_EXIT_INVVPID_STR; + case VMX_EXIT_WBINVD: + return VMX_EXIT_WBINVD_STR; + case VMX_EXIT_XSETBV: + return VMX_EXIT_XSETBV_STR; } return NULL; }