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

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