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.


added decoder
Jack Lange [Fri, 20 Jun 2008 15:27:41 +0000 (15:27 +0000)]
palacios/build/Makefile
palacios/include/palacios/vmm_decoder.h [moved from palacios/include/palacios/vmm_emulate.h with 95% similarity]
palacios/src/palacios/svm.c
palacios/src/palacios/svm_handler.c
palacios/src/palacios/svm_io.c
palacios/src/palacios/vmm_ctrl_regs.c
palacios/src/palacios/vmm_mem.c
palacios/src/palacios/vmm_shadow_paging.c

index 4151515..c4aa17c 100644 (file)
@@ -1,6 +1,6 @@
 # Makefile for GeekOS kernel, userspace, and tools
 # Copyright (c) 2004,2005 David H. Hovemeyer <daveho@cs.umd.edu>
-# $Revision: 1.37 $
+# $Revision: 1.38 $
 
 # This is free software.  You are permitted to use,
 # redistribute, and modify it as specified in the file "COPYING".
@@ -126,7 +126,7 @@ VMM_C_SRCS :=   vm_guest.c \
                vmcb.c vmm_mem.c vmm_paging.c vmm_io.c vmm_debug.c svm_io.c \
                vmm_intr.c vmm_time.c\
                vmm_shadow_paging.c vm_guest_mem.c  \
-                vm_dev.c vmm_dev_mgr.c \
+                vm_dev.c vmm_dev_mgr.c vmm_decoder.c \
 #\
 #              vmx.c vmcs_gen.c vmcs.c
 
similarity index 95%
rename from palacios/include/palacios/vmm_emulate.h
rename to palacios/include/palacios/vmm_decoder.h
index d4288a2..e25497a 100644 (file)
@@ -8,6 +8,29 @@
  * We can parse out the instruction prefixes, as well as decode the operands 
  */
 
+typedef enum {INVALID_OPERAND, REG_OPERAND, MEM_OPERAND} operand_type_t;
+
+
+
+
+struct x86_operand {
+  addr_t operand;
+  uint_t size;
+  operand_type_t type;
+};
+
+
+/* This parses an instruction 
+ * All addresses in arguments are in the host address space
+ */
+int v3_parse_instr(struct guest_info * info,             // input
+                  char * instr_ptr,                        // input 
+                  uint_t * instr_length,                // output
+                  struct x86_operand * src_operand,     // output
+                  struct x86_operand * dst_operand,     // output
+                  struct x86_operand * extra_operand);  // output
+                  
+
 
 /* 
  * JRL: Some of this was taken from the Xen sources... 
@@ -95,7 +118,6 @@ static const uchar_t PREFIX_BR_TAKEN = 0x3E;
 static const uchar_t PREFIX_OP_SIZE = 0x66;
 static const uchar_t PREFIX_ADDR_SIZE = 0x67;
 
-
 static inline int is_prefix_byte(char byte) {
   switch (byte) {
   case 0xF0:      // lock
@@ -153,7 +175,11 @@ static inline addr_t get_addr_linear(struct guest_info * info, addr_t addr, stru
 
 typedef enum {INVALID_ADDR_TYPE, REG, DISP0, DISP8, DISP16, DISP32} modrm_mode_t;
 typedef enum {INVALID_REG_SIZE, REG64, REG32, REG16, REG8} reg_size_t;
-typedef enum {INVALID_OPERAND, REG_OPERAND, MEM_OPERAND} operand_type_t;
+
+
+
+
+
 
 struct v3_gprs;
 
index 057685d..b4209ef 100644 (file)
@@ -9,7 +9,7 @@
 #include <palacios/vmm_debug.h>
 #include <palacios/vm_guest_mem.h>
 
-#include <palacios/vmm_emulate.h>
+#include <palacios/vmm_decoder.h>
 
 
 extern struct vmm_os_hooks * os_hooks;
index f7916fc..7e1a91b 100644 (file)
@@ -1,7 +1,7 @@
 #include <palacios/svm_handler.h>
 #include <palacios/vmm.h>
 #include <palacios/vm_guest_mem.h>
-#include <palacios/vmm_emulate.h>
+#include <palacios/vmm_decoder.h>
 #include <palacios/vmm_ctrl_regs.h>
 #include <palacios/svm_io.h>
 #include <palacios/vmm_intr.h>
index 38f0b8e..ce12669 100644 (file)
@@ -1,7 +1,7 @@
 #include <palacios/svm_io.h>
 #include <palacios/vmm_io.h>
 #include <palacios/vmm_ctrl_regs.h>
-#include <palacios/vmm_emulate.h>
+#include <palacios/vmm_decoder.h>
 #include <palacios/vm_guest_mem.h>
 
 
@@ -103,6 +103,10 @@ int handle_svm_io_ins(struct guest_info * info) {
   } else {
     // This value should be set depending on the host register size...
     mask = get_gpr_mask(info);
+
+
+    PrintDebug("INS Aborted... Check implementation\n");
+    return -1;
   }
 
   if (io_info->rep) {
index fba6004..7d59b82 100644 (file)
@@ -1,7 +1,7 @@
 #include <palacios/vmm_mem.h>
 #include <palacios/vmm.h>
 #include <palacios/vmcb.h>
-#include <palacios/vmm_emulate.h>
+#include <palacios/vmm_decoder.h>
 #include <palacios/vm_guest_mem.h>
 #include <palacios/vmm_ctrl_regs.h>
 
index c4747ee..f31d471 100644 (file)
@@ -1,7 +1,7 @@
 #include <palacios/vmm_mem.h>
 #include <palacios/vmm.h>
 #include <palacios/vmm_util.h>
-#include <palacios/vmm_emulate.h>
+#include <palacios/vmm_decoder.h>
 
 
 
index 142f41d..5536f04 100644 (file)
@@ -3,7 +3,7 @@
 
 #include <palacios/vmm.h>
 #include <palacios/vm_guest_mem.h>
-#include <palacios/vmm_emulate.h>
+#include <palacios/vmm_decoder.h>