Samuel Thibault
2008-Feb-05 15:33 UTC
[Xen-devel] [PATCH] x86_emulate: fix side-effect macro call
x86_emulate: fix side-effect macro call Both jmp_rel and insn_fetch_type increment eip, so it''s not compiler-safe to nest the calls. Signed-off-by: Samuel Thibault <samuel.thibault@eu.citrix.com> --- Yes, I actually got a bug because of this, with debian''s gcc 4.2.3. diff -r 52f222b319ef xen/arch/x86/x86_emulate.c --- a/xen/arch/x86/x86_emulate.c Tue Feb 05 11:21:22 2008 +0000 +++ b/xen/arch/x86/x86_emulate.c Tue Feb 05 15:30:48 2008 +0000 @@ -2644,9 +2644,11 @@ break; } - case 0xeb: /* jmp (short) */ - jmp_rel(insn_fetch_type(int8_t)); + case 0xeb: /* jmp (short) */ { + int8_t rel = insn_fetch_type(int8_t); + jmp_rel(rel); break; + } case 0xf1: /* int1 (icebp) */ src.val = EXC_DB; _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Samuel Thibault
2008-Feb-05 15:37 UTC
[Xen-devel] Re: [PATCH] x86_emulate: fix side-effect macro call
Samuel Thibault, le Tue 05 Feb 2008 15:33:55 +0000, a écrit :> x86_emulate: fix side-effect macro call > Both jmp_rel and insn_fetch_type increment eip, so it''s not > compiler-safe to nest the calls.Another way to fix it would be to change jmp_rel: - _regs.eip += (int)(rel); + int _rel = (int)(rel); + _regs.eip += _rel; Samuel _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel