X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Finclude%2Fpalacios%2Fvmm_instr_decoder.h;h=6ed6ba0232a7d6b70b9820534f84a94351dfea83;hb=7d80144eeb8dc7f5bb48975a7d7ab0d3b126d795;hp=41d798d3885f2b0fd914cef1e3f2a807a55af63d;hpb=660a66ad71b81b5bf63eaa5f75bec3ae44e8254e;p=palacios-OLD.git diff --git a/palacios/include/palacios/vmm_instr_decoder.h b/palacios/include/palacios/vmm_instr_decoder.h index 41d798d..6ed6ba0 100644 --- a/palacios/include/palacios/vmm_instr_decoder.h +++ b/palacios/include/palacios/vmm_instr_decoder.h @@ -28,6 +28,7 @@ typedef enum { SMSW, CLTS, INVLPG, + INT, MOV_CR2, MOV_2CR, @@ -310,6 +311,7 @@ static int get_operand_width(struct guest_info * info, struct x86_instr * instr, return -1; } + case INT: case MOV_DR2: case MOV_2DR: case MOV_CR2: @@ -953,51 +955,51 @@ int decode_rm_operand64(struct guest_info * core, uint8_t * modrm_instr, switch (base_val) { case 0: - base_addr += gprs->rax + base_addr += gprs->rax; break; case 1: - base_addr += gprs->rcx + base_addr += gprs->rcx; break; case 2: - base_addr += gprs->rdx + base_addr += gprs->rdx; break; case 3: - base_addr += gprs->rbx + base_addr += gprs->rbx; break; case 4: - base_addr += gprs->rsp + base_addr += gprs->rsp; break; case 5: if (modrm->mod != 0) { - base_addr += gprs->rbp + base_addr += gprs->rbp; } break; case 6: - base_addr += gprs->rsi + base_addr += gprs->rsi; break; case 7: - base_addr += gprs->rdi + base_addr += gprs->rdi; break; case 8: - base_addr += gprs->r8 + base_addr += gprs->r8; break; case 9: - base_addr += gprs->r9 + base_addr += gprs->r9; break; case 10: - base_addr += gprs->r10 + base_addr += gprs->r10; break; case 11: - base_addr += gprs->r11 + base_addr += gprs->r11; break; case 12: - base_addr += gprs->r12 + base_addr += gprs->r12; break; case 13: - base_addr += gprs->r13 + base_addr += gprs->r13; break; case 14: - base_addr += gprs->r14 + base_addr += gprs->r14; break; case 15: base_addr += gprs->r15; @@ -1331,6 +1333,8 @@ static op_form_t op_code_to_form(uint8_t * instr, int * length) { case 0xf4: return HLT; + case 0xcd: + return INT; case 0xf6: { struct modrm_byte * modrm = (struct modrm_byte *)&(instr[1]); @@ -1493,6 +1497,7 @@ static char * op_form_to_str(op_form_t form) { case SETO: return "SETO"; case STOS_8: return "STOS_8"; case STOS: return "STOS"; + case INT: return "INT"; case INVALID_INSTR: default: