]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add support for syscall on x86
authorTom Hughes <tom@compton.nu>
Sun, 9 Feb 2014 11:40:20 +0000 (11:40 +0000)
committerTom Hughes <tom@compton.nu>
Sun, 9 Feb 2014 11:40:20 +0000 (11:40 +0000)
Patch from Ivo Raisr via BZ#330939 also fixes BZ#308729

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

VEX/priv/guest_x86_toIR.c
VEX/priv/host_x86_isel.c
VEX/pub/libvex_ir.h

index 6af1f3e4a7880fdb01852003fcaa47a886c3875a..e24105b1f7a614f2c3c9f18814c0325341272f0d 100644 (file)
@@ -15222,6 +15222,14 @@ DisResult disInstr_X86_WRK (
          break;
       }
 
+      case 0x05: /* AMD's syscall */
+         stmt( IRStmt_Put( OFFB_IP_AT_SYSCALL,
+              mkU32(guest_EIP_curr_instr) ) );
+         jmp_lit(&dres, Ijk_Sys_syscall, ((Addr32)guest_EIP_bbstart)+delta);
+         vassert(dres.whatNext == Dis_StopHere);
+         DIP("syscall\n");
+         break;
+
       /* =-=-=-=-=-=-=-=-=- unimp2 =-=-=-=-=-=-=-=-=-=-= */
 
       default:
index a3a45fa24f0f2473334c6805868a1492d7729292..090e9aafddcd9ec1e445ee5b64030963ba32a58a 100644 (file)
@@ -4280,6 +4280,7 @@ static void iselStmt ( ISelEnv* env, IRStmt* stmt )
          case Ijk_Sys_int128:
          case Ijk_Sys_int129:
          case Ijk_Sys_int130:
+         case Ijk_Sys_syscall:
          case Ijk_Sys_sysenter:
          case Ijk_TInval:
          case Ijk_Yield:
@@ -4378,6 +4379,7 @@ static void iselNext ( ISelEnv* env,
       case Ijk_Sys_int128:
       case Ijk_Sys_int129:
       case Ijk_Sys_int130:
+      case Ijk_Sys_syscall:
       case Ijk_Sys_sysenter:
       case Ijk_TInval:
       case Ijk_Yield:
index 38a3b18e5720a5c826aa87e3ad8e1c310a15fe2c..609ff8fc7534441a33d3d2cc448247a2e2adce91 100644 (file)
@@ -2111,7 +2111,7 @@ typedef
       Ijk_SigFPE_IntOvf,  /* current instruction synths SIGFPE - IntOvf */
       /* Unfortunately, various guest-dependent syscall kinds.  They
         all mean: do a syscall before continuing. */
-      Ijk_Sys_syscall,    /* amd64 'syscall', ppc 'sc', arm 'svc #0' */
+      Ijk_Sys_syscall,    /* amd64/x86 'syscall', ppc 'sc', arm 'svc #0' */
       Ijk_Sys_int32,      /* amd64/x86 'int $0x20' */
       Ijk_Sys_int128,     /* amd64/x86 'int $0x80' */
       Ijk_Sys_int129,     /* amd64/x86 'int $0x81' */