diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2006-09-29 11:11:49 +0100 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2006-09-29 11:11:49 +0100 |
commit | b7b0acf60f0de854ca9dc04ae90f3b020004d924 (patch) | |
tree | d8cd35109a079aab1a151d4f4c9c3061a9869032 | |
parent | e90fc3a7ed763228e22fbf687a72a16a40f1613e (diff) | |
download | xen-b7b0acf60f0de854ca9dc04ae90f3b020004d924.tar.gz xen-b7b0acf60f0de854ca9dc04ae90f3b020004d924.tar.bz2 xen-b7b0acf60f0de854ca9dc04ae90f3b020004d924.zip |
[VMXASSIST] Fix data32/addr32 instruction decode issue.
Signed-off-by: Yunhong Jiang <yunhong.jiang@intel.com>
-rw-r--r-- | tools/firmware/vmxassist/vm86.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/tools/firmware/vmxassist/vm86.c b/tools/firmware/vmxassist/vm86.c index 7581f3bfe5..d6cfb500e8 100644 --- a/tools/firmware/vmxassist/vm86.c +++ b/tools/firmware/vmxassist/vm86.c @@ -1412,12 +1412,14 @@ opcode(struct regs *regs) { int addr, data; int seg = segment(prefix, regs, regs->vds); + int offset = prefix & ADDR32? fetch32(regs) : fetch16(regs); + if (prefix & DATA32) { - addr = address(regs, seg, fetch32(regs)); + addr = address(regs, seg, offset); data = read32(addr); setreg32(regs, 0, data); } else { - addr = address(regs, seg, fetch16(regs)); + addr = address(regs, seg, offset); data = read16(addr); setreg16(regs, 0, data); } |