Author: delphij
Date: Wed Jun 11 20:31:41 2014
New Revision: 267373
URL: http://svnweb.freebsd.org/changeset/base/267373

Log:
  Fix decoding of LEA when address-size prefix (67h) is present.
  
  This is loosly based on Xorg changeset f57bc0e by Christian
  Zander.
  
  Submitted by: Wolf Ramovsky <wolf.ramovsky gmail.com>
                via core (peter)
  MFC after:    2 weeks

Modified:
  head/sys/contrib/x86emu/x86emu.c

Modified: head/sys/contrib/x86emu/x86emu.c
==============================================================================
--- head/sys/contrib/x86emu/x86emu.c    Wed Jun 11 20:22:14 2014        
(r267372)
+++ head/sys/contrib/x86emu/x86emu.c    Wed Jun 11 20:31:41 2014        
(r267373)
@@ -2151,21 +2151,24 @@ x86emuOp_mov_word_RM_SR(struct x86emu *e
 static void
 x86emuOp_lea_word_R_M(struct x86emu *emu)
 {
-       uint16_t *srcreg;
        uint32_t destoffset;
 
-/*
- * TODO: Need to handle address size prefix!
- *
- * lea  eax,[eax+ebx*2] ??
- */
        fetch_decode_modrm(emu);
        if (emu->cur_mod == 3)
                x86emu_halt_sys(emu);
 
-       srcreg = decode_rh_word_register(emu);
        destoffset = decode_rl_address(emu);
-       *srcreg = (uint16_t) destoffset;
+       if (emu->x86.mode & SYSMODE_PREFIX_ADDR) {
+               uint32_t *srcreg;
+
+               srcreg = decode_rh_long_register(emu);
+               *srcreg = (uint32_t) destoffset;
+       } else {
+               uint16_t *srcreg;
+
+               srcreg = decode_rh_word_register(emu);
+               *srcreg = (uint16_t) destoffset;
+       }
 }
 
 /*
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to