On 07/26/2010 02:07 AM, Mohammed Gamal wrote:
On Mon, Jul 26, 2010 at 2:59 AM, Paolo Bonzini<[email protected]>  wrote:
On 07/25/2010 09:20 PM, Mohammed Gamal wrote:

+       if (c->op_bytes == 4)
+               temp_eflags = ((temp_eflags & 0x257fd5) | (ctxt->eflags&
  0x1a0000));

Should this do also

if (c->op_bytes == 2)
    temp_eflags = ((temp_eflags & 0x7fd5) | (ctxt->eflags & ~0xffffL));

?

I don't think this is needed. The temp_eflags value is assigned
directly to eflags if we're operand size is 16 bits. At least that's
what the Intel manual says!

That's fine, but please make sure that

  mov %sp, %bp
  orw $2, 4(%bp)
  iret

followed at return site by

  pushf
  popw %ax

does not set bit 1 in %ax. That's the important point (also see how emulate_popf avoids magic hex constants).

Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to