about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-09-04 13:50:22 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-09-04 13:50:22 +0200
commit0a343b72f2d339a2e7ba464b7581974af690dccb (patch)
tree2939473e27d58ccc3100570c3a6fe5880cc9963b /src
parentab9178f6381a82aae9c52c8119c6806aa325d4c5 (diff)
downloadbox64-0a343b72f2d339a2e7ba464b7581974af690dccb.tar.gz
box64-0a343b72f2d339a2e7ba464b7581974af690dccb.zip
Added syscall 56 (for #109)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/emu/x64syscall.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/emu/x64syscall.c b/src/emu/x64syscall.c
index ccdbadd4..8bd979e7 100755
--- a/src/emu/x64syscall.c
+++ b/src/emu/x64syscall.c
@@ -106,6 +106,9 @@ scwrap_t syscallwrap[] = {
     { 46, __NR_sendmsg, 3},
     { 47, __NR_recvmsg, 3},
     { 53, __NR_socketpair, 4},
+    #ifdef __NR_vfork
+    {56, __NR_vfork, 0},
+    #endif
     #ifdef __NR_fork
     { 57, __NR_fork, 0 },    // should wrap this one, because of the struct pt_regs (the only arg)?
     #endif
@@ -330,6 +333,14 @@ void EXPORT x64Syscall(x64emu_t *emu)
         case 25: // sys_mremap
             R_RAX = (uintptr_t)my_mremap(emu, (void*)R_RDI, R_RSI, R_RDX, R_R10d, (void*)R_R8);
             break;
+        #ifndef __NR_vfork
+        case 56:   // vfork
+            {
+                int64_t r = vfork();
+                R_RAX = r;
+            }
+            break;
+        #endif
         #ifndef __NR_fork
         case 57: 
             R_RAX = fork();
@@ -462,6 +473,10 @@ uintptr_t EXPORT my_syscall(x64emu_t *emu)
         #endif
         case 25: // sys_mremap
             return (uintptr_t)my_mremap(emu, (void*)R_RSI, R_RDX, R_RCX, R_R8d, (void*)R_R9);
+        #ifndef __NR_vfork
+        case 56:   // vfork
+            return vfork();
+        #endif
         #ifndef __NR_fork
         case 57: 
             return fork();