Re: wrong placement of RIP-relative address computing

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux