Message ID | 20090225213929.GA22725@mohd-laptop (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Mohammed Gamal wrote: > Add pop es instruction > > Hi again... > @@ -1446,6 +1446,9 @@ special_insn: > add: /* add */ > emulate_2op_SrcV("add", c->src, c->dst, ctxt->eflags); > break; > + case 0x07: /* pop es */ > + emulate_pop(ctxt, ops, &c->regs[VCPU_SREG_ES], c->op_bytes); > + break; > case 0x08 ... 0x0d: > or: /* or */ > emulate_2op_SrcV("or", c->src, c->dst, ctxt->eflags); > ... but this is insufficient. You need to load the segment cache, see kvm_load_segment_descriptor().
diff --git a/arch/x86/kvm/x86_emulate.c b/arch/x86/kvm/x86_emulate.c index ca91749..8c292b6 100644 --- a/arch/x86/kvm/x86_emulate.c +++ b/arch/x86/kvm/x86_emulate.c @@ -87,7 +87,7 @@ static u32 opcode_table[256] = { /* 0x00 - 0x07 */ ByteOp | DstMem | SrcReg | ModRM, DstMem | SrcReg | ModRM, ByteOp | DstReg | SrcMem | ModRM, DstReg | SrcMem | ModRM, - ByteOp | DstAcc | SrcImm, DstAcc | SrcImm, 0, 0, + ByteOp | DstAcc | SrcImm, DstAcc | SrcImm, 0, DstReg | ModRM, /* 0x08 - 0x0F */ ByteOp | DstMem | SrcReg | ModRM, DstMem | SrcReg | ModRM, ByteOp | DstReg | SrcMem | ModRM, DstReg | SrcMem | ModRM, @@ -1446,6 +1446,9 @@ special_insn: add: /* add */ emulate_2op_SrcV("add", c->src, c->dst, ctxt->eflags); break; + case 0x07: /* pop es */ + emulate_pop(ctxt, ops, &c->regs[VCPU_SREG_ES], c->op_bytes); + break; case 0x08 ... 0x0d: or: /* or */ emulate_2op_SrcV("or", c->src, c->dst, ctxt->eflags);
Add pop es instruction Signed-off-by: Mohammed Gamal <m.gamal005@gmail.com> --- arch/x86/kvm/x86_emulate.c | 5 ++++- 1 files changed, 4 insertions(+), 1 deletions(-)