svn commit: r267374 - head/sys/contrib/x86emu
Xin LI
delphij at FreeBSD.org
Wed Jun 11 20:38:14 UTC 2014
Author: delphij
Date: Wed Jun 11 20:38:14 2014
New Revision: 267374
URL: http://svnweb.freebsd.org/changeset/base/267374
Log:
Fix decoding of near CALL when address-size prefix (67h) is present.
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:31:41 2014 (r267373)
+++ head/sys/contrib/x86emu/x86emu.c Wed Jun 11 20:38:14 2014 (r267374)
@@ -3753,12 +3753,19 @@ x86emuOp_out_word_IMM_AX(struct x86emu *
static void
x86emuOp_call_near_IMM(struct x86emu *emu)
{
- int16_t ip;
-
- ip = (int16_t) fetch_word_imm(emu);
- ip += (int16_t) emu->x86.R_IP; /* CHECK SIGN */
- push_word(emu, emu->x86.R_IP);
- emu->x86.R_IP = ip;
+ if (emu->x86.mode & SYSMODE_PREFIX_DATA) {
+ int32_t ip;
+ ip = (int32_t) fetch_long_imm(emu);
+ ip += (int32_t) emu->x86.R_EIP;
+ push_long(emu, emu->x86.R_EIP);
+ emu->x86.R_EIP = ip;
+ } else {
+ int16_t ip;
+ ip = (int16_t) fetch_word_imm(emu);
+ ip += (int16_t) emu->x86.R_IP; /* CHECK SIGN */
+ push_word(emu, emu->x86.R_IP);
+ emu->x86.R_IP = ip;
+ }
}
/*
More information about the svn-src-head
mailing list