mirror of https://gitee.com/openkylin/linux.git
KVM: x86 emulator: Fix DstAcc decoding.
Set correct operation length. Add RAX (64bit) handling. Signed-off-by: Gleb Natapov <gleb@redhat.com> Signed-off-by: Marcelo Tosatti <mtosatti@redhat.com>
This commit is contained in:
parent
08e850c653
commit
d6d367d678
|
@ -1194,9 +1194,9 @@ x86_decode_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
|
||||||
break;
|
break;
|
||||||
case DstAcc:
|
case DstAcc:
|
||||||
c->dst.type = OP_REG;
|
c->dst.type = OP_REG;
|
||||||
c->dst.bytes = c->op_bytes;
|
c->dst.bytes = (c->d & ByteOp) ? 1 : c->op_bytes;
|
||||||
c->dst.ptr = &c->regs[VCPU_REGS_RAX];
|
c->dst.ptr = &c->regs[VCPU_REGS_RAX];
|
||||||
switch (c->op_bytes) {
|
switch (c->dst.bytes) {
|
||||||
case 1:
|
case 1:
|
||||||
c->dst.val = *(u8 *)c->dst.ptr;
|
c->dst.val = *(u8 *)c->dst.ptr;
|
||||||
break;
|
break;
|
||||||
|
@ -1206,6 +1206,9 @@ x86_decode_insn(struct x86_emulate_ctxt *ctxt, struct x86_emulate_ops *ops)
|
||||||
case 4:
|
case 4:
|
||||||
c->dst.val = *(u32 *)c->dst.ptr;
|
c->dst.val = *(u32 *)c->dst.ptr;
|
||||||
break;
|
break;
|
||||||
|
case 8:
|
||||||
|
c->dst.val = *(u64 *)c->dst.ptr;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
c->dst.orig_val = c->dst.val;
|
c->dst.orig_val = c->dst.val;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue