From: kaf24@firebug.cl.cam.ac.uk Date: Fri, 26 May 2006 12:49:29 +0000 (+0100) Subject: Cast to a signed type before negating if we really want the result to be negative. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16025^2~2 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=3afabf1400ebc2866d021aa679df5c4839259f35;p=xen.git Cast to a signed type before negating if we really want the result to be negative. From: Jan Beulich Signed-off-by: Keir Fraser --- diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 64ab6b69bc..32c69624e4 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -876,7 +876,7 @@ static int emulate_privileged_op(struct cpu_user_regs *regs) 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 cpu_user_regs *regs) 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 --git a/xen/arch/x86/x86_emulate.c b/xen/arch/x86/x86_emulate.c index c829128e91..5bdafa9192 100644 --- a/xen/arch/x86/x86_emulate.c +++ b/xen/arch/x86/x86_emulate.c @@ -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");