X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_instr_decoder.h;h=53831c45f0670e15289940bac85346c86936a4d9;hb=a31d0f3c2219f3f9d2236f88562c622790cdf63b;hp=3fe838b9c7015609d6db0e03c353c2d12d88fbf3;hpb=4701d2e8422bc6313ae237578d63d7f1bebd8946;p=palacios.git diff --git a/palacios/include/palacios/vmm_instr_decoder.h b/palacios/include/palacios/vmm_instr_decoder.h index 3fe838b..53831c4 100644 --- a/palacios/include/palacios/vmm_instr_decoder.h +++ b/palacios/include/palacios/vmm_instr_decoder.h @@ -191,6 +191,7 @@ static int get_operand_width(struct guest_info * info, struct x86_instr * instr, case XOR_MEM2_8: case XOR_IMM2_8: case INC_8: + case INT: case DEC_8: case NEG_8: case NOT_8: @@ -310,7 +311,7 @@ static int get_operand_width(struct guest_info * info, struct x86_instr * instr, return -1; } - case INT: + //case INT: case MOV_DR2: case MOV_2DR: case MOV_CR2: @@ -1017,23 +1018,24 @@ int decode_rm_operand64(struct guest_info * core, uint8_t * modrm_instr, } - /* - Segments should be ignored - // get appropriate segment - if (instr->prefixes.cs_override) { - seg = &(core->segments.cs); - } else if (instr->prefixes.es_override) { - seg = &(core->segments.es); - } else if (instr->prefixes.ss_override) { - seg = &(core->segments.ss); - } else if (instr->prefixes.fs_override) { - seg = &(core->segments.fs); - } else if (instr->prefixes.gs_override) { - seg = &(core->segments.gs); - } else { - seg = &(core->segments.ds); - } - */ + + //Segments should be ignored + // get appropriate segment + + if (instr->prefixes.cs_override) { + seg = &(core->segments.cs); + } else if (instr->prefixes.es_override) { + seg = &(core->segments.es); + } else if (instr->prefixes.ss_override) { + seg = &(core->segments.ss); + } else if (instr->prefixes.fs_override) { + seg = &(core->segments.fs); + } else if (instr->prefixes.gs_override) { + seg = &(core->segments.gs); + } else { + seg = &(core->segments.ds); + } + operand->operand = ADDR_MASK(get_addr_linear(core, base_addr, seg), get_addr_width(core, instr)); @@ -1061,7 +1063,7 @@ static int decode_rm_operand(struct guest_info * core, case REAL: return decode_rm_operand16(core, instr_ptr, instr, operand, reg_code); case LONG: - if (instr->prefixes.rex_op_size) { + if (instr->prefixes.rex) { return decode_rm_operand64(core, instr_ptr, instr, operand, reg_code); } case PROTECTED: