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.


cleaned up handler code
Jack Lange [Mon, 11 Aug 2008 17:55:23 +0000 (17:55 +0000)]
palacios/src/palacios/svm_handler.c

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