aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>2006-09-29 11:11:49 +0100
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>2006-09-29 11:11:49 +0100
commitb7b0acf60f0de854ca9dc04ae90f3b020004d924 (patch)
treed8cd35109a079aab1a151d4f4c9c3061a9869032
parente90fc3a7ed763228e22fbf687a72a16a40f1613e (diff)
downloadxen-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.c6
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);
}