X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_decoder.h;h=6b8715e85f590db3060c4f44f1f71077977ce5ba;hb=7cdedeb7a01b51c5242cce94924f2ea246008e7d;hp=b6e65e6ad2be7e0c590eba630cc2032bae0dd272;hpb=101529b6eae500272347287df43ec51aa003d0aa;p=palacios-OLD.git diff --git a/palacios/include/palacios/vmm_decoder.h b/palacios/include/palacios/vmm_decoder.h index b6e65e6..6b8715e 100644 --- a/palacios/include/palacios/vmm_decoder.h +++ b/palacios/include/palacios/vmm_decoder.h @@ -1,8 +1,25 @@ -/* (c) 2008, Jack Lange */ -/* (c) 2008, The V3VEE Project */ -#ifndef __VMM_EMULATE_H -#define __VMM_EMULATE_H +/* + * This file is part of the Palacios Virtual Machine Monitor developed + * by the V3VEE Project with funding from the United States National + * Science Foundation and the Department of Energy. + * + * The V3VEE Project is a joint project between Northwestern University + * and the University of New Mexico. You can find out more at + * http://www.v3vee.org + * + * Copyright (c) 2008, Jack Lange + * Copyright (c) 2008, The V3VEE Project + * All rights reserved. + * + * Author: Jack Lange + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "V3VEE_LICENSE". + */ + +#ifndef __VMM_DECODER_H +#define __VMM_DECODER_H #ifdef __V3VEE__ @@ -10,12 +27,12 @@ #include -typedef enum {INVALID_OPERAND, REG_OPERAND, MEM_OPERAND, IMM_OPERAND} operand_type_t; +typedef enum {INVALID_OPERAND, REG_OPERAND, MEM_OPERAND, IMM_OPERAND} v3_operand_type_t; struct x86_operand { addr_t operand; uint_t size; - operand_type_t type; + v3_operand_type_t type; }; struct x86_prefixes { @@ -70,7 +87,7 @@ struct basic_instr_info { /* * Initializes a decoder */ -int init_decoder(); +int v3_init_decoder(); /* * Decodes an instruction @@ -101,7 +118,7 @@ int v3_basic_mem_decode(struct guest_info * info, addr_t instr_ptr, struct basic /* Removes a rep prefix in place */ -void strip_rep_prefix(uchar_t * instr, int length); +void v3_strip_rep_prefix(uchar_t * instr, int length); @@ -191,10 +208,10 @@ MAKE_INSTR(SMSW, 3, 0x0f, 0x01, 0x00); #define PREFIX_OP_SIZE 0x66 #define PREFIX_ADDR_SIZE 0x67 -int opcode_cmp(const uchar_t * op1, const uchar_t * op2); +int v3_opcode_cmp(const uchar_t * op1, const uchar_t * op2); -static inline int is_prefix_byte(char byte) { +static inline int is_prefix_byte(uchar_t byte) { switch (byte) { case 0xF0: // lock case 0xF2: // REPNE/REPNZ @@ -314,7 +331,7 @@ static inline addr_t decode_register(struct v3_gprs * gprs, char reg_code, reg_s -static inline operand_type_t decode_operands16(struct v3_gprs * gprs, // input/output +static inline v3_operand_type_t decode_operands16(struct v3_gprs * gprs, // input/output char * modrm_instr, // input int * offset, // output addr_t * first_operand, // output @@ -324,7 +341,7 @@ static inline operand_type_t decode_operands16(struct v3_gprs * gprs, // input/o struct modrm_byte * modrm = (struct modrm_byte *)modrm_instr; addr_t base_addr = 0; modrm_mode_t mod_mode = 0; - operand_type_t addr_type = INVALID_OPERAND; + v3_operand_type_t addr_type = INVALID_OPERAND; char * instr_cursor = modrm_instr; // PrintDebug("ModRM mod=%d\n", modrm->mod); @@ -403,19 +420,19 @@ static inline operand_type_t decode_operands16(struct v3_gprs * gprs, // input/o -static inline operand_type_t decode_operands32(struct v3_gprs * gprs, // input/output - char * modrm_instr, // input +static inline v3_operand_type_t decode_operands32(struct v3_gprs * gprs, // input/output + uchar_t * modrm_instr, // input int * offset, // output addr_t * first_operand, // output addr_t * second_operand, // output reg_size_t reg_size) { // input - char * instr_cursor = modrm_instr; + uchar_t * instr_cursor = modrm_instr; struct modrm_byte * modrm = (struct modrm_byte *)modrm_instr; addr_t base_addr = 0; modrm_mode_t mod_mode = 0; uint_t has_sib_byte = 0; - operand_type_t addr_type = INVALID_OPERAND; + v3_operand_type_t addr_type = INVALID_OPERAND;