# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 2dc7c271270055b8df6b063141a05dc0c92298b2
# Parent b049fb947f2a5c5674febc175f0c30a81239224d
Cast to a signed type before negating if we really want the result to be
negative.
From: Jan Beulich <jbeulich@xxxxxxxxxx>
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/arch/x86/traps.c | 4 ++--
xen/arch/x86/x86_emulate.c | 10 +++++-----
2 files changed, 7 insertions(+), 7 deletions(-)
diff -r b049fb947f2a -r 2dc7c2712700 xen/arch/x86/traps.c
--- a/xen/arch/x86/traps.c Fri May 26 13:23:18 2006 +0100
+++ b/xen/arch/x86/traps.c Fri May 26 13:49:29 2006 +0100
@@ -876,7 +876,7 @@ static int emulate_privileged_op(struct
PAGE_FAULT(regs->edi, USER_WRITE_FAULT);
break;
}
- regs->edi += (regs->eflags & EF_DF) ? -op_bytes : op_bytes;
+ regs->edi += (regs->eflags & EF_DF) ? -(int)op_bytes : op_bytes;
break;
case 0x6e: /* OUTSB */
@@ -902,7 +902,7 @@ static int emulate_privileged_op(struct
outl_user((u32)data, (u16)regs->edx, v, regs);
break;
}
- regs->esi += (regs->eflags & EF_DF) ? -op_bytes : op_bytes;
+ regs->esi += (regs->eflags & EF_DF) ? -(int)op_bytes : op_bytes;
break;
}
diff -r b049fb947f2a -r 2dc7c2712700 xen/arch/x86/x86_emulate.c
--- a/xen/arch/x86/x86_emulate.c Fri May 26 13:23:18 2006 +0100
+++ b/xen/arch/x86/x86_emulate.c Fri May 26 13:49:29 2006 +0100
@@ -858,7 +858,7 @@ x86_emulate_memop(
&dst.val, 8, ctxt)) != 0 )
goto done;
}
- register_address_increment(_regs.esp, -dst.bytes);
+ register_address_increment(_regs.esp, -(int)dst.bytes);
if ( (rc = ops->write_std(register_address(_regs.ss, _regs.esp),
dst.val, dst.bytes, ctxt)) != 0 )
goto done;
@@ -942,9 +942,9 @@ x86_emulate_memop(
goto done;
}
register_address_increment(
- _regs.esi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
+ _regs.esi, (_regs.eflags & EFLG_DF) ? -(int)dst.bytes : dst.bytes);
register_address_increment(
- _regs.edi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
+ _regs.edi, (_regs.eflags & EFLG_DF) ? -(int)dst.bytes : dst.bytes);
break;
case 0xa6 ... 0xa7: /* cmps */
DPRINTF("Urk! I don't handle CMPS.\n");
@@ -955,7 +955,7 @@ x86_emulate_memop(
dst.ptr = (unsigned long *)cr2;
dst.val = _regs.eax;
register_address_increment(
- _regs.edi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
+ _regs.edi, (_regs.eflags & EFLG_DF) ? -(int)dst.bytes : dst.bytes);
break;
case 0xac ... 0xad: /* lods */
dst.type = OP_REG;
@@ -964,7 +964,7 @@ x86_emulate_memop(
if ( (rc = ops->read_emulated(cr2, &dst.val, dst.bytes, ctxt)) != 0 )
goto done;
register_address_increment(
- _regs.esi, (_regs.eflags & EFLG_DF) ? -dst.bytes : dst.bytes);
+ _regs.esi, (_regs.eflags & EFLG_DF) ? -(int)dst.bytes : dst.bytes);
break;
case 0xae ... 0xaf: /* scas */
DPRINTF("Urk! I don't handle SCAS.\n");
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|