Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


rename exit codes to avoid namespace collisions
Jack Lange [Thu, 26 Apr 2012 02:29:38 +0000 (22:29 -0400)]
palacios/include/palacios/svm_handler.h
palacios/include/palacios/vmx_handler.h
palacios/src/palacios/svm_handler.c
palacios/src/palacios/vmm_telemetry.c
palacios/src/palacios/vmx.c
palacios/src/palacios/vmx_handler.c

index 0cca1b1..a01de25 100644 (file)
 /* 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__
index 20561f8..632277a 100644 (file)
 /* 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 */
index 96fcaa1..5849055 100644 (file)
@@ -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;
 }
index d12a5a7..c0eb38d 100644 (file)
 #include <palacios/vmm_types.h>
 #include <palacios/vmm_telemetry.h>
 #include <palacios/svm_handler.h>
+#include <palacios/vmx_handler.h>
 #include <palacios/vmm_rbtree.h>
 #include <palacios/vmm_sprintf.h>
 
 
+
 #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;
 }
index 0660dff..16f3e3b 100644 (file)
@@ -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;
index 432b571..51bf62d 100644 (file)
@@ -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;
 }