diff options
author | delphij <delphij@FreeBSD.org> | 2014-06-11 20:31:41 +0000 |
---|---|---|
committer | delphij <delphij@FreeBSD.org> | 2014-06-11 20:31:41 +0000 |
commit | f0333bcbd4fd2e265bd780911c13c17acf253c53 (patch) | |
tree | b2568e602b183a6f99102aaa9bb7ffaec07a5f35 /sys/contrib/x86emu | |
parent | c131765bd2162e292b910ab27b6564913e045ab1 (diff) | |
download | FreeBSD-src-f0333bcbd4fd2e265bd780911c13c17acf253c53.zip FreeBSD-src-f0333bcbd4fd2e265bd780911c13c17acf253c53.tar.gz |
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
Diffstat (limited to 'sys/contrib/x86emu')
-rw-r--r-- | sys/contrib/x86emu/x86emu.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/sys/contrib/x86emu/x86emu.c b/sys/contrib/x86emu/x86emu.c index 45c6373..60c5412 100644 --- a/sys/contrib/x86emu/x86emu.c +++ b/sys/contrib/x86emu/x86emu.c @@ -2151,21 +2151,24 @@ x86emuOp_mov_word_RM_SR(struct x86emu *emu) 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; + } } /* |