|
From: <sv...@va...> - 2014-02-09 11:40:35
|
Author: tom
Date: Sun Feb 9 11:40:20 2014
New Revision: 2814
Log:
Add support for syscall on x86
Patch from Ivo Raisr via BZ#330939 also fixes BZ#308729
Modified:
trunk/priv/guest_x86_toIR.c
trunk/priv/host_x86_isel.c
trunk/pub/libvex_ir.h
Modified: trunk/priv/guest_x86_toIR.c
==============================================================================
--- trunk/priv/guest_x86_toIR.c (original)
+++ trunk/priv/guest_x86_toIR.c Sun Feb 9 11:40:20 2014
@@ -15222,6 +15222,14 @@
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:
Modified: trunk/priv/host_x86_isel.c
==============================================================================
--- trunk/priv/host_x86_isel.c (original)
+++ trunk/priv/host_x86_isel.c Sun Feb 9 11:40:20 2014
@@ -4280,6 +4280,7 @@
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 @@
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:
Modified: trunk/pub/libvex_ir.h
==============================================================================
--- trunk/pub/libvex_ir.h (original)
+++ trunk/pub/libvex_ir.h Sun Feb 9 11:40:20 2014
@@ -2111,7 +2111,7 @@
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' */
|