Browse Source

UserspaceEmulator: Implement profiling, disown, purge syscalls

Brendan Coles 4 years ago
parent
commit
9ca34c3047
2 changed files with 32 additions and 0 deletions
  1. 28 0
      DevTools/UserspaceEmulator/Emulator.cpp
  2. 4 0
      DevTools/UserspaceEmulator/Emulator.h

+ 28 - 0
DevTools/UserspaceEmulator/Emulator.cpp

@@ -395,6 +395,14 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
         return virt$shbuf_seal(arg1);
         return virt$shbuf_seal(arg1);
     case SC_shbuf_set_volatile:
     case SC_shbuf_set_volatile:
         return virt$shbuf_set_volatile(arg1, arg2);
         return virt$shbuf_set_volatile(arg1, arg2);
+    case SC_profiling_enable:
+        return virt$profiling_enable(arg1);
+    case SC_profiling_disable:
+        return virt$profiling_disable(arg1);
+    case SC_disown:
+        return virt$disown(arg1);
+    case SC_purge:
+        return virt$purge(arg1);
     case SC_mmap:
     case SC_mmap:
         return virt$mmap(arg1);
         return virt$mmap(arg1);
     case SC_mount:
     case SC_mount:
@@ -590,6 +598,26 @@ int Emulator::virt$shbuf_set_volatile(int shbuf_id, bool is_volatile)
     return region->set_volatile(is_volatile);
     return region->set_volatile(is_volatile);
 }
 }
 
 
+int Emulator::virt$profiling_enable(pid_t pid)
+{
+    return syscall(SC_profiling_enable, pid);
+}
+
+int Emulator::virt$profiling_disable(pid_t pid)
+{
+    return syscall(SC_profiling_disable, pid);
+}
+
+int Emulator::virt$disown(pid_t pid)
+{
+    return syscall(SC_disown, pid);
+}
+
+int Emulator::virt$purge(int mode)
+{
+    return syscall(SC_purge, mode);
+}
+
 int Emulator::virt$fstat(int fd, FlatPtr statbuf)
 int Emulator::virt$fstat(int fd, FlatPtr statbuf)
 {
 {
     struct stat local_statbuf;
     struct stat local_statbuf;

+ 4 - 0
DevTools/UserspaceEmulator/Emulator.h

@@ -98,6 +98,10 @@ private:
     int virt$shbuf_release(int shbuf_id);
     int virt$shbuf_release(int shbuf_id);
     int virt$shbuf_seal(int shbuf_id);
     int virt$shbuf_seal(int shbuf_id);
     int virt$shbuf_set_volatile(int shbuf_id, bool);
     int virt$shbuf_set_volatile(int shbuf_id, bool);
+    int virt$profiling_enable(pid_t);
+    int virt$profiling_disable(pid_t);
+    int virt$disown(pid_t);
+    int virt$purge(int mode);
     u32 virt$mmap(u32);
     u32 virt$mmap(u32);
     u32 virt$mount(u32);
     u32 virt$mount(u32);
     u32 virt$munmap(FlatPtr address, u32 size);
     u32 virt$munmap(FlatPtr address, u32 size);