]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Fix this:
authorJulian Seward <jseward@acm.org>
Mon, 19 Nov 2007 00:39:23 +0000 (00:39 +0000)
committerJulian Seward <jseward@acm.org>
Mon, 19 Nov 2007 00:39:23 +0000 (00:39 +0000)
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.

git-svn-id: svn://svn.valgrind.org/vex/trunk@1798

VEX/priv/guest-amd64/toIR.c

index af68babc6a42f2dfba8811a7f30d1aa68497ffe9..9f32618df8092b3ddf5b132561ca062534d7d9de 100644 (file)
@@ -3694,7 +3694,7 @@ ULong dis_Grp5 ( VexAbiInfo* vbi,
             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 @@ ULong dis_Grp5 ( VexAbiInfo* vbi,
             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 @@ ULong dis_Grp5 ( VexAbiInfo* vbi,
             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 @@ ULong dis_Grp5 ( VexAbiInfo* vbi,
             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 @@ ULong dis_Grp5 ( VexAbiInfo* vbi,
          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)));