|
From: <sv...@va...> - 2006-12-28 01:49:30
|
Author: sewardj
Date: 2006-12-28 01:49:29 +0000 (Thu, 28 Dec 2006)
New Revision: 1711
Log:
Handle recent binutils padding "nopw %cs:0x0(%eax,%eax,1)"
Modified:
trunk/priv/guest-x86/toIR.c
Modified: trunk/priv/guest-x86/toIR.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
--- trunk/priv/guest-x86/toIR.c 2006-12-28 00:03:25 UTC (rev 1710)
+++ trunk/priv/guest-x86/toIR.c 2006-12-28 01:49:29 UTC (rev 1711)
@@ -7290,6 +7290,21 @@
break;
}
}
+ /* don't barf on recent binutils padding=20
+ 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:0x0(%eax,%eax,1)
+ */
+ {
+ UChar* code =3D (UChar*)(guest_code + delta);
+ if (sz =3D=3D 2=20
+ && code[-1] =3D=3D 0x66
+ && code[0] =3D=3D 0x2E && code[1] =3D=3D 0x0F && code[2]=
=3D=3D 0x1F=20
+ && code[3] =3D=3D 0x84 && code[4] =3D=3D 0x00 && code[5]=
=3D=3D 0x00
+ && code[6] =3D=3D 0x00 && code[7] =3D=3D 0x00 && code[8]=
=3D=3D 0x00 ) {
+ DIP("nopw %%cs:0x0(%%eax,%%eax,1)\n");
+ delta +=3D 9;
+ goto decode_success;
+ }
+ }
unimplemented("x86 segment override (SEG=3DCS) prefix");
/*NOTREACHED*/
break;
|