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

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