From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Jan Beulich" Subject: [PATCH 3/7] x86emul: all push flavors are data moves Date: Thu, 11 Aug 2016 06:04:48 -0600 Message-ID: <57AC860002000078001050CE@prv-mh.provo.novell.com> References: <57AC83530200007800105078@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=__Part0A3CFCF0.1__=" Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bXojE-00054B-Qg for xen-devel@lists.xenproject.org; Thu, 11 Aug 2016 12:04:52 +0000 In-Reply-To: <57AC83530200007800105078@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel Cc: Andrew Cooper List-Id: xen-devel@lists.xenproject.org This is a MIME message. If you are reading this text, you may want to consider changing to a mail reader or gateway that understands how to properly handle MIME multipart messages. --=__Part0A3CFCF0.1__= Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Make all paths leading to the "push" label have the Mov flag set, and ASSERT() that to be the case. For the opcode FF group the adjustment is benign for the paths not leading to "push", as they all set dst.type to OP_NONE Signed-off-by: Jan Beulich --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -122,7 +122,7 @@ static uint8_t opcode_table[256] =3D { ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, /* 0x98 - 0x9F */ ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, - ImplicitOps, ImplicitOps, ImplicitOps, ImplicitOps, + ImplicitOps|Mov, ImplicitOps|Mov, ImplicitOps, ImplicitOps, /* 0xA0 - 0xA7 */ ByteOp|ImplicitOps|Mov, ImplicitOps|Mov, ByteOp|ImplicitOps|Mov, ImplicitOps|Mov, @@ -1903,7 +1903,7 @@ x86_emulate( /* fall through */ case 3: /* call (far, absolute indirect) */ case 5: /* jmp (far, absolute indirect) */ - d =3D DstNone|SrcMem|ModRM; + d =3D DstNone | SrcMem | ModRM | Mov; break; } break; @@ -2347,7 +2347,7 @@ x86_emulate( case 0x68: /* push imm{16,32,64} */ case 0x6a: /* push imm8 */ push: - d |=3D Mov; /* force writeback */ + ASSERT(d & Mov); /* writeback needed */ dst.type =3D OP_MEM; dst.bytes =3D mode_64bit() && (op_bytes =3D=3D 4) ? 8 : op_bytes; dst.val =3D src.val; --=__Part0A3CFCF0.1__= Content-Type: text/plain; name="x86emul-push-Mov.patch" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="x86emul-push-Mov.patch" x86emul: all push flavors are data moves=0A=0AMake all paths leading to = the "push" label have the Mov flag set, and=0AASSERT() that to be the = case. For the opcode FF group the adjustment is=0Abenign for the paths not = leading to "push", as they all set dst.type to=0AOP_NONE=0A=0ASigned-off-by= : Jan Beulich =0A=0A--- a/xen/arch/x86/x86_emulate/x86_e= mulate.c=0A+++ b/xen/arch/x86/x86_emulate/x86_emulate.c=0A@@ -122,7 +122,7 = @@ static uint8_t opcode_table[256] =3D {=0A ImplicitOps, ImplicitOps, = ImplicitOps, ImplicitOps,=0A /* 0x98 - 0x9F */=0A ImplicitOps, = ImplicitOps, ImplicitOps, ImplicitOps,=0A- ImplicitOps, ImplicitOps, = ImplicitOps, ImplicitOps,=0A+ ImplicitOps|Mov, ImplicitOps|Mov, = ImplicitOps, ImplicitOps,=0A /* 0xA0 - 0xA7 */=0A ByteOp|ImplicitOp= s|Mov, ImplicitOps|Mov,=0A ByteOp|ImplicitOps|Mov, ImplicitOps|Mov,=0A@= @ -1903,7 +1903,7 @@ x86_emulate(=0A /* fall through */=0A = case 3: /* call (far, absolute indirect) */=0A = case 5: /* jmp (far, absolute indirect) */=0A- d =3D = DstNone|SrcMem|ModRM;=0A+ d =3D DstNone | SrcMem | ModRM | = Mov;=0A break;=0A }=0A break;=0A@@ = -2347,7 +2347,7 @@ x86_emulate(=0A case 0x68: /* push imm{16,32,64} = */=0A case 0x6a: /* push imm8 */=0A push:=0A- d |=3D Mov; = /* force writeback */=0A+ ASSERT(d & Mov); /* writeback needed = */=0A dst.type =3D OP_MEM;=0A dst.bytes =3D mode_64bit() = && (op_bytes =3D=3D 4) ? 8 : op_bytes;=0A dst.val =3D src.val;=0A --=__Part0A3CFCF0.1__= Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg== --=__Part0A3CFCF0.1__=--