palacios/vmm_msr.o \
palacios/svm_msr.o \
palacios/vmm_socket.o \
+ palacios/vmm_xed.o \
# vmx.c vmcs_gen.c vmcs.c
$(DEVICES_OBJS) :: EXTRA_CFLAGS = \
$(JRLDEBUG) \
-#
-# DECODER is the decoder that will be used
-# currently we only support xed
-#
-DECODER=XED
-
-ifeq ($(DECODER),XED)
-VMM_OBJS += palacios/vmm_xed.o
-else
-# This is an error
-endif
"pushf; " \
"pop %0; " \
"popf; " \
- : "=b"(*flags) \
- : "D"(*dst),"S"(*src),"c"(*ecx),"b"(*flags) \
+ : "=q"(*flags) \
+ : "D"(*dst),"S"(*src),"c"(*ecx),"q"(*flags) \
); \
\
/* : "=D"(*dst),"=S"(*src),"=c"(*ecx),"=q"(*flags)*/ \
"pushf; " \
"pop %0; " \
"popf; " \
- : "=b"(*flags) \
- : "D"(*dst),"S"(*src),"c"(*ecx),"b"(*flags) \
+ : "=q"(*flags) \
+ : "D"(*dst),"S"(*src),"c"(*ecx),"q"(*flags) \
); \
*flags |= flags_rsvd; \
}
"pushf; " \
"pop %0; " \
"popf; " \
- : "=b"(*flags) \
- : "D"(*dst),"S"(*src),"c"(*ecx),"b"(*flags) \
+ : "=q"(*flags) \
+ : "D"(*dst),"S"(*src),"c"(*ecx),"q"(*flags) \
); \
*flags |= flags_rsvd; \
}
int (*write)(addr_t guest_addr, void * src, uint_t length, void * priv_data),
void * priv_data);
-int unhook_guest_mem(struct guest_info * info, addr_t guest_addr);
+
#ifdef __V3VEE__
+#include <palacios/vmm_types.h>
+
+
+#undef offsetof
+#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
#define container_of(ptr, type, member) ({ \
const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+#ifndef DEBUG_SHADOW_PAGING
+#undef PrintDebug
+#define PrintDebug(fmt, args...)
+#endif
+
void delete_page_tables_32(pde32_t * pde) {
switch (length) { \
case 1: \
mask = mask_1; \
+ break; \
case 2: \
mask = mask_2; \
+ break; \
case 4: \
mask = mask_4; \
+ break; \
case 8: \
mask = mask_8; \
+ break; \
} \
val & mask;}) \
- PrintDebug("Struct: Seg=%p, base=%p, index=%p, scale=%p, displacement=%p\n",
+ PrintDebug("Struct: Seg=%p, base=%p, index=%p, scale=%p, displacement=%p (size=%d)\n",
(void *)mem_op.segment, (void*)mem_op.base, (void *)mem_op.index,
- (void *)mem_op.scale, (void *)(addr_t)mem_op.displacement);
+ (void *)mem_op.scale, (void *)(addr_t)mem_op.displacement, mem_op.displacement_size);
PrintDebug("operand size: %d\n", operand->size);
- seg = mem_op.segment;
+ seg = MASK(mem_op.segment, mem_op.segment_size);
base = MASK(mem_op.base, mem_op.base_size);
index = MASK(mem_op.index, mem_op.index_size);
scale = mem_op.scale;