]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Handle the (bizarre) no-op "26 2E 64 65 90 %es:%cs:%fs:%gs:nop". This
authorJulian Seward <jseward@acm.org>
Thu, 1 Mar 2007 18:42:07 +0000 (18:42 +0000)
committerJulian Seward <jseward@acm.org>
Thu, 1 Mar 2007 18:42:07 +0000 (18:42 +0000)
makes it possible to run Sun's JVM 1.5.0 on Valgrind.

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

VEX/priv/guest-x86/toIR.c

index 7a3acf6b32841f303f6c5a0cf29b981c9f3b9d79..0b7d0dbe92c259f2d0cd91fafa267f898410a029 100644 (file)
@@ -7272,6 +7272,18 @@ DisResult disInstr_X86_WRK (
    switch (getIByte(delta)) {
       case 0x3E: /* %DS: */
       case 0x26: /* %ES: */
+         /* Sun's JVM 1.5.0 uses the following as a NOP:
+            26 2E 64 65 90  %es:%cs:%fs:%gs:nop */
+         {
+            UChar* code = (UChar*)(guest_code + delta);
+            if (code[0] == 0x26 && code[1] == 0x2E && code[2] == 0x64 
+                && code[3] == 0x65 && code[4] == 0x90) {
+               DIP("%%es:%%cs:%%fs:%%gs:nop\n");
+               delta += 5;
+               goto decode_success;
+            }
+            /* else fall through */
+         }       
       case 0x64: /* %FS: */
       case 0x65: /* %GS: */
          sorb = getIByte(delta); delta++;