Author: sewardj
Date: 2007-11-19 00:39:23 +0000 (Mon, 19 Nov 2007)
New Revision: 1798

Log:
Fix this:
vex: priv/guest-amd64/toIR.c:3741 (dis_Grp5): Assertion `sz == 4' failed. 
(CALL Ev with sz==8) as reported in #150678 and #146252.  Also change a
bunch of assertions on undecoded instructions into proper decoding failures.

Modified:
   trunk/priv/guest-amd64/toIR.c


Modified: trunk/priv/guest-amd64/toIR.c
===================================================================
--- trunk/priv/guest-amd64/toIR.c       2007-11-16 12:43:32 UTC (rev 1797)
+++ trunk/priv/guest-amd64/toIR.c       2007-11-19 00:39:23 UTC (rev 1798)
@@ -3694,7 +3694,7 @@
             break;
          case 2: /* call Ev */
             /* Ignore any sz value and operate as if sz==8. */
-            vassert(sz == 4 || sz == 8);
+            if (!(sz == 4 || sz == 8)) goto unhandled;
             sz = 8;
             t3 = newTemp(Ity_I64);
             assign(t3, getIRegE(sz,pfx,modrm));
@@ -3709,7 +3709,7 @@
             break;
          case 4: /* jmp Ev */
             /* Ignore any sz value and operate as if sz==8. */
-            vassert(sz == 4 || sz == 8);
+            if (!(sz == 4 || sz == 8)) goto unhandled;
             sz = 8;
             t3 = newTemp(Ity_I64);
             assign(t3, getIRegE(sz,pfx,modrm));
@@ -3748,7 +3748,7 @@
             break;
          case 2: /* call Ev */
             /* Ignore any sz value and operate as if sz==8. */
-            vassert(sz == 4);
+            if (!(sz == 4 || sz == 8)) goto unhandled;
             sz = 8;
             t3 = newTemp(Ity_I64);
             assign(t3, loadLE(Ity_I64,mkexpr(addr)));
@@ -3763,7 +3763,7 @@
             break;
          case 4: /* JMP Ev */
             /* Ignore any sz value and operate as if sz==8. */
-            vassert(sz == 4);
+            if (!(sz == 4 || sz == 8)) goto unhandled;
             sz = 8;
             t3 = newTemp(Ity_I64);
             assign(t3, loadLE(Ity_I64,mkexpr(addr)));
@@ -3774,7 +3774,7 @@
          case 6: /* PUSH Ev */
             /* There is no encoding for 32-bit operand size; hence ... */
             if (sz == 4) sz = 8;
-            vassert(sz == 8 || sz == 2);
+            if (!(sz == 8 || sz == 2)) goto unhandled;
             if (sz == 8) {
                t3 = newTemp(Ity_I64);
                assign(t3, loadLE(Ity_I64,mkexpr(addr)));


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to