Blame SOURCES/valgrind-3.16.1-REX-prefix-JMP.patch

4f2909
commit e2dec0ff9b1e071779bee2c4e6fc82f8194b1c1d
4f2909
Author: Mark Wielaard <mark@klomp.org>
4f2909
Date:   Sun Jul 26 21:17:23 2020 +0200
4f2909
4f2909
    Handle REX prefixed JMP instruction.
4f2909
    
4f2909
    The NET Core runtime might generate a JMP with a REX prefix.
4f2909
    For Jv (32bit offset) and Jb (8bit offset) this is valid.
4f2909
    Prefixes that change operand size are ignored for such JMPs.
4f2909
    So remove the check for sz == 4 and force sz = 4 for Jv.
4f2909
    
4f2909
    https://bugs.kde.org/show_bug.cgi?id=422174
4f2909
4f2909
diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c
4f2909
index fadf47d41..7888132eb 100644
4f2909
--- a/VEX/priv/guest_amd64_toIR.c
4f2909
+++ b/VEX/priv/guest_amd64_toIR.c
4f2909
@@ -21392,8 +21392,8 @@ Long dis_ESC_NONE (
4f2909
 
4f2909
    case 0xE9: /* Jv (jump, 16/32 offset) */
4f2909
       if (haveF3(pfx)) goto decode_failure;
4f2909
-      if (sz != 4) 
4f2909
-         goto decode_failure; /* JRS added 2004 July 11 */
4f2909
+      sz = 4; /* Prefixes that change operand size are ignored for this
4f2909
+                 instruction. Operand size is forced to 32bit. */
4f2909
       if (haveF2(pfx)) DIP("bnd ; "); /* MPX bnd prefix. */
4f2909
       d64 = (guest_RIP_bbstart+delta+sz) + getSDisp(sz,delta); 
4f2909
       delta += sz;
4f2909
@@ -21404,8 +21404,7 @@ Long dis_ESC_NONE (
4f2909
 
4f2909
    case 0xEB: /* Jb (jump, byte offset) */
4f2909
       if (haveF3(pfx)) goto decode_failure;
4f2909
-      if (sz != 4) 
4f2909
-         goto decode_failure; /* JRS added 2004 July 11 */
4f2909
+      /* Prefixes that change operand size are ignored for this instruction. */
4f2909
       if (haveF2(pfx)) DIP("bnd ; "); /* MPX bnd prefix. */
4f2909
       d64 = (guest_RIP_bbstart+delta+1) + getSDisp8(delta); 
4f2909
       delta++;