On 06/16/2011 02:00 PM, Li, Xin wrote:
> diff --git a/arch/x86/kvm/emulate.c b/arch/x86/kvm/emulate.c > index 6df88c7..e269d20 100644 > --- a/arch/x86/kvm/emulate.c > +++ b/arch/x86/kvm/emulate.c > @@ -3547,9 +3547,6 @@ done_prefixes: > if (memop.type == OP_MEM&& c->ad_bytes != 8) > memop.addr.mem.ea = (u32)memop.addr.mem.ea; > > - if (memop.type == OP_MEM&& c->rip_relative) > - memop.addr.mem.ea += c->eip; > - > /* > * Decode and fetch the source operand: register, memory > * or immediate. > @@ -3704,6 +3701,9 @@ done_prefixes: > } > > done: It's not correct to move here, I saw some other problem. > + if (memop.type == OP_MEM&& c->rip_relative) > + memop.addr.mem.ea += c->eip; > + > return (rc == X86EMUL_UNHANDLEABLE) ? EMULATION_FAILED : > EMULATION_OK;
There's the "return 0" in the previous switch, but otherwise I think it's correct. We didn't take into account the complete instruction length.
-- error compiling committee.c: too many arguments to function -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html