From 2cac41ee1c1eabc16fa2fd873418b13f9ca14921 Mon Sep 17 00:00:00 2001 From: Ryan Houdek Date: Fri, 17 Apr 2020 15:19:09 -0700 Subject: [PATCH] Adds a bunch more syscalls Some of these are just there to get us farther in some cases. They can result in behaviour the app isn't expecting like when signals are setup but not handled correctly. Is fine for the cases that the app doesn't actually use them. --- External/FEXCore/Source/CMakeLists.txt | 4 +- .../Source/Interface/HLE/Syscalls/EPoll.cpp | 5 + .../Source/Interface/HLE/Syscalls/EPoll.h | 1 + .../Source/Interface/HLE/Syscalls/Sched.cpp | 35 ++ .../Source/Interface/HLE/Syscalls/Sched.h | 7 + .../Interface/HLE/Syscalls/Semaphore.cpp | 33 ++ .../Source/Interface/HLE/Syscalls/Semaphore.h | 16 + .../Source/Interface/HLE/Syscalls/Signals.cpp | 24 ++ .../Source/Interface/HLE/Syscalls/Signals.h | 13 + .../Source/Interface/HLE/x64/Syscalls.cpp | 328 ++++++++++-------- .../Source/Interface/HLE/x64/Syscalls.h | 13 + 11 files changed, 336 insertions(+), 143 deletions(-) create mode 100644 External/FEXCore/Source/Interface/HLE/Syscalls/Semaphore.cpp create mode 100644 External/FEXCore/Source/Interface/HLE/Syscalls/Semaphore.h create mode 100644 External/FEXCore/Source/Interface/HLE/Syscalls/Signals.cpp create mode 100644 External/FEXCore/Source/Interface/HLE/Syscalls/Signals.h diff --git a/External/FEXCore/Source/CMakeLists.txt b/External/FEXCore/Source/CMakeLists.txt index 7556a1d34..e856ef6b8 100644 --- a/External/FEXCore/Source/CMakeLists.txt +++ b/External/FEXCore/Source/CMakeLists.txt @@ -86,8 +86,10 @@ set (SRCS Interface/HLE/Syscalls/Ioctl.cpp Interface/HLE/Syscalls/Memory.cpp Interface/HLE/Syscalls/Numa.cpp - Interface/HLE/Syscalls/SHM.cpp Interface/HLE/Syscalls/Sched.cpp + Interface/HLE/Syscalls/Semaphore.cpp + Interface/HLE/Syscalls/SHM.cpp + Interface/HLE/Syscalls/Signals.cpp Interface/HLE/Syscalls/Socket.cpp Interface/HLE/Syscalls/Thread.cpp Interface/HLE/Syscalls/Time.cpp diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/EPoll.cpp b/External/FEXCore/Source/Interface/HLE/Syscalls/EPoll.cpp index 0fc457011..4c71f088d 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/EPoll.cpp +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/EPoll.cpp @@ -13,6 +13,11 @@ namespace FEXCore::HLE { SYSCALL_ERRNO(); } + uint64_t EPoll_Wait(FEXCore::Core::InternalThreadState *Thread, int epfd, void *events, int maxevents, int timeout) { + uint64_t Result = epoll_wait(epfd, reinterpret_cast(events), maxevents, timeout); + SYSCALL_ERRNO(); + } + uint64_t EPoll_Ctl(FEXCore::Core::InternalThreadState *Thread, int epfd, int op, int fd, void *event) { uint64_t Result = epoll_ctl(epfd, op, fd, reinterpret_cast(event)); SYSCALL_ERRNO(); diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/EPoll.h b/External/FEXCore/Source/Interface/HLE/Syscalls/EPoll.h index 2ce1c4822..c7012e036 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/EPoll.h +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/EPoll.h @@ -7,6 +7,7 @@ struct InternalThreadState; namespace FEXCore::HLE { uint64_t EPoll_Create(FEXCore::Core::InternalThreadState *Thread, int flags); + uint64_t EPoll_Wait(FEXCore::Core::InternalThreadState *Thread, int epfd, void *events, int maxevents, int timeout); uint64_t EPoll_Ctl(FEXCore::Core::InternalThreadState *Thread, int epfd, int op, int fd, void *event); uint64_t EPoll_Pwait(FEXCore::Core::InternalThreadState *Thread, int epfd, void *events, int maxevent, int timeout, const void* sigmask); uint64_t EPoll_Create1(FEXCore::Core::InternalThreadState *Thread, int flags); diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/Sched.cpp b/External/FEXCore/Source/Interface/HLE/Syscalls/Sched.cpp index 7ed280741..cdce7d473 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/Sched.cpp +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/Sched.cpp @@ -25,6 +25,41 @@ namespace FEXCore::HLE { SYSCALL_ERRNO(); } + uint64_t Sched_Setparam(FEXCore::Core::InternalThreadState *Thread, pid_t pid, const struct sched_param *param) { + uint64_t Result = ::sched_setparam(pid, param); + SYSCALL_ERRNO(); + } + + uint64_t Sched_Getparam(FEXCore::Core::InternalThreadState *Thread, pid_t pid, struct sched_param *param) { + uint64_t Result = ::sched_getparam(pid, param); + SYSCALL_ERRNO(); + } + + uint64_t Sched_Setscheduler(FEXCore::Core::InternalThreadState *Thread, pid_t pid, int policy, const struct sched_param *param) { + uint64_t Result = ::sched_setscheduler(pid, policy, param); + SYSCALL_ERRNO(); + } + + uint64_t Sched_Getscheduler(FEXCore::Core::InternalThreadState *Thread, pid_t pid) { + uint64_t Result = ::sched_getscheduler(pid); + SYSCALL_ERRNO(); + } + + uint64_t Sched_Get_priority_max(FEXCore::Core::InternalThreadState *Thread, int policy) { + uint64_t Result = ::sched_get_priority_max(policy); + SYSCALL_ERRNO(); + } + + uint64_t Sched_Get_priority_min(FEXCore::Core::InternalThreadState *Thread, int policy) { + uint64_t Result = ::sched_get_priority_min(policy); + SYSCALL_ERRNO(); + } + + uint64_t Sched_rr_get_interval(FEXCore::Core::InternalThreadState *Thread, pid_t pid, struct timespec *tp) { + uint64_t Result = ::sched_rr_get_interval(pid, tp); + SYSCALL_ERRNO(); + } + uint64_t Sched_Setaffinity(FEXCore::Core::InternalThreadState *Thread, pid_t pid, size_t cpusetsize, const unsigned long *mask) { return 0; } diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/Sched.h b/External/FEXCore/Source/Interface/HLE/Syscalls/Sched.h index 86a8790c9..ecf8e3928 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/Sched.h +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/Sched.h @@ -10,6 +10,13 @@ namespace FEXCore::HLE { uint64_t Sched_Yield(FEXCore::Core::InternalThreadState *Thread); uint64_t Getpriority(FEXCore::Core::InternalThreadState *Thread, int which, int who); uint64_t Setpriority(FEXCore::Core::InternalThreadState *Thread, int which, int who, int prio); + uint64_t Sched_Setparam(FEXCore::Core::InternalThreadState *Thread, pid_t pid, const struct sched_param *param); + uint64_t Sched_Getparam(FEXCore::Core::InternalThreadState *Thread, pid_t pid, struct sched_param *param); + uint64_t Sched_Setscheduler(FEXCore::Core::InternalThreadState *Thread, pid_t pid, int policy, const struct sched_param *param); + uint64_t Sched_Getscheduler(FEXCore::Core::InternalThreadState *Thread, pid_t pid); + uint64_t Sched_Get_priority_max(FEXCore::Core::InternalThreadState *Thread, int policy); + uint64_t Sched_Get_priority_min(FEXCore::Core::InternalThreadState *Thread, int policy); + uint64_t Sched_rr_get_interval(FEXCore::Core::InternalThreadState *Thread, pid_t pid, struct timespec *tp); uint64_t Sched_Setaffinity(FEXCore::Core::InternalThreadState *Thread, pid_t pid, size_t cpusetsize, const unsigned long *mask); uint64_t Sched_Getaffinity(FEXCore::Core::InternalThreadState *Thread, pid_t pid, size_t cpusetsize, unsigned long *mask); } diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/Semaphore.cpp b/External/FEXCore/Source/Interface/HLE/Syscalls/Semaphore.cpp new file mode 100644 index 000000000..ede90cdf1 --- /dev/null +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/Semaphore.cpp @@ -0,0 +1,33 @@ +#include "Interface/HLE/Syscalls.h" +#include "Interface/Context/Context.h" +#include "Interface/Core/InternalThreadState.h" + +#include +#include +#include + +namespace FEXCore::Core { +struct InternalThreadState; +} + +namespace FEXCore::HLE { + uint64_t Semget(FEXCore::Core::InternalThreadState *Thread, key_t key, int nsems, int semflg) { + uint64_t Result = ::semget(key, nsems, semflg); + SYSCALL_ERRNO(); + } + + uint64_t Semop(FEXCore::Core::InternalThreadState *Thread, int semid, struct sembuf *sops, size_t nsops) { + uint64_t Result = ::semop(semid, sops, nsops); + SYSCALL_ERRNO(); + } + + uint64_t Semctl(FEXCore::Core::InternalThreadState *Thread, int semid, int semnum, int cmd, void* semun) { + uint64_t Result = ::semctl(semid, semnum, cmd, semun); + SYSCALL_ERRNO(); + } + + uint64_t Semtimedop(FEXCore::Core::InternalThreadState *Thread, int semid, struct sembuf *sops, size_t nsops, const struct timespec *timeout) { + uint64_t Result = ::semtimedop(semid, sops, nsops, timeout); + SYSCALL_ERRNO(); + } +} diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/Semaphore.h b/External/FEXCore/Source/Interface/HLE/Syscalls/Semaphore.h new file mode 100644 index 000000000..aef962855 --- /dev/null +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/Semaphore.h @@ -0,0 +1,16 @@ +#pragma once +#include +#include +#include +#include + +namespace FEXCore::Core { +struct InternalThreadState; +} + +namespace FEXCore::HLE { + uint64_t Semget(FEXCore::Core::InternalThreadState *Thread, key_t key, int nsems, int semflg); + uint64_t Semop(FEXCore::Core::InternalThreadState *Thread, int semid, struct sembuf *sops, size_t nsops); + uint64_t Semctl(FEXCore::Core::InternalThreadState *Thread, int semid, int semnum, int cmd, void* semun); + uint64_t Semtimedop(FEXCore::Core::InternalThreadState *Thread, int semid, struct sembuf *sops, size_t nsops, const struct timespec *timeout); +} diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/Signals.cpp b/External/FEXCore/Source/Interface/HLE/Syscalls/Signals.cpp new file mode 100644 index 000000000..db6cd1708 --- /dev/null +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/Signals.cpp @@ -0,0 +1,24 @@ +#include "Interface/Context/Context.h" +#include "Interface/Core/InternalThreadState.h" +#include "Interface/HLE/Syscalls.h" + +#include + +#include + +namespace FEXCore::HLE { + uint64_t RT_Sigaction(FEXCore::Core::InternalThreadState *Thread, int signum, const struct sigaction *act, struct sigaction *oldact) { + uint64_t Result = ::sigaction(signum, act, oldact); + SYSCALL_ERRNO(); + } + + uint64_t RT_Sigprocmask(FEXCore::Core::InternalThreadState *Thread, int how, const sigset_t *set, sigset_t *oldset) { + uint64_t Result = ::sigprocmask(how, set, oldset); + SYSCALL_ERRNO(); + } + + uint64_t Sigaltstack(FEXCore::Core::InternalThreadState *Thread, const stack_t *ss, stack_t *old_ss) { + uint64_t Result = ::sigaltstack(ss, old_ss); + SYSCALL_ERRNO(); + } +} diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/Signals.h b/External/FEXCore/Source/Interface/HLE/Syscalls/Signals.h new file mode 100644 index 000000000..2f4c66e64 --- /dev/null +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/Signals.h @@ -0,0 +1,13 @@ +#pragma once +#include +#include + +namespace FEXCore::Core { +struct InternalThreadState; +} + +namespace FEXCore::HLE { + uint64_t RT_Sigaction(FEXCore::Core::InternalThreadState *Thread, int signum, const struct sigaction *act, struct sigaction *oldact); + uint64_t RT_Sigprocmask(FEXCore::Core::InternalThreadState *Thread, int how, const sigset_t *set, sigset_t *oldset); + uint64_t Sigaltstack(FEXCore::Core::InternalThreadState *Thread, const stack_t *ss, stack_t *old_ss); +} diff --git a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp index 9d22add6a..fbd0d820a 100644 --- a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp +++ b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp @@ -9,7 +9,9 @@ #include "Interface/HLE/Syscalls/Memory.h" #include "Interface/HLE/Syscalls/Numa.h" #include "Interface/HLE/Syscalls/Sched.h" +#include "Interface/HLE/Syscalls/Semaphore.h" #include "Interface/HLE/Syscalls/SHM.h" +#include "Interface/HLE/Syscalls/Signals.h" #include "Interface/HLE/Syscalls/Socket.h" #include "Interface/HLE/Syscalls/Thread.h" #include "Interface/HLE/Syscalls/Time.h" @@ -234,6 +236,28 @@ void x64SyscallHandler::Strace(FEXCore::HLE::SyscallArguments *Args, uint64_t Re case SYSCALL_UNAME: LogMan::Msg::D("uname ({...}) = %ld", Ret); break; + case SYSCALL_SEMGET: + LogMan::Msg::D("semget(0x%lx, %d, 0x%lx) = %ld", + Args->Argument[1], + Args->Argument[2], + Args->Argument[3], + Ret); + break; + case SYSCALL_SEMOP: + LogMan::Msg::D("semop(%ld, %p, %ld) = %ld", + Args->Argument[1], + Args->Argument[2], + Args->Argument[3], + Ret); + break; + case SYSCALL_SEMCTL: + LogMan::Msg::D("semctl(%ld, %ld, %ld, %p) = %ld", + Args->Argument[1], + Args->Argument[2], + Args->Argument[3], + Args->Argument[4], + Ret); + break; case SYSCALL_SHMDT: LogMan::Msg::D("shmdt(%p)= %ld", Args->Argument[1], Ret); break; @@ -337,6 +361,14 @@ void x64SyscallHandler::Strace(FEXCore::HLE::SyscallArguments *Args, uint64_t Re case SYSCALL_SET_TID_ADDRESS: LogMan::Msg::D("set_tid_address(%p) = %ld", Args->Argument[1], Ret); break; + case SYSCALL_SEMTIMEDOP: + LogMan::Msg::D("semtimedop(%d, %p, %d, %p) = %ld", + Args->Argument[1], + Args->Argument[2], + Args->Argument[3], + Args->Argument[4], + Ret); + break; case SYSCALL_PPOLL: LogMan::Msg::D("ppoll(%p, %d, %p, %p, %d) = %ld", Args->Argument[1], @@ -648,153 +680,165 @@ void x64SyscallHandler::RegisterSyscallHandlers() { } const std::vector> Syscalls = { - {SYSCALL_READ, cvt(&FEXCore::HLE::Read), 3}, - {SYSCALL_WRITE, cvt(&FEXCore::HLE::Write), 3}, - {SYSCALL_OPEN, cvt(&FEXCore::HLE::Open), 3}, - {SYSCALL_CLOSE, cvt(&FEXCore::HLE::Close), 1}, - {SYSCALL_STAT, cvt(&FEXCore::HLE::Stat), 2}, - {SYSCALL_FSTAT, cvt(&FEXCore::HLE::Fstat), 2}, - {SYSCALL_LSTAT, cvt(&FEXCore::HLE::Lstat), 2}, - {SYSCALL_POLL, cvt(&FEXCore::HLE::Poll), 3}, - {SYSCALL_LSEEK, cvt(&FEXCore::HLE::Lseek), 3}, - {SYSCALL_MMAP, cvt(&FEXCore::HLE::Mmap), 6}, - {SYSCALL_MPROTECT, cvt(&FEXCore::HLE::Mprotect), 3}, - {SYSCALL_MUNMAP, cvt(&FEXCore::HLE::Munmap), 2}, - {SYSCALL_BRK, cvt(&FEXCore::HLE::Brk), 1}, - {SYSCALL_RT_SIGACTION, cvt(&NopSuccess), 0}, - {SYSCALL_RT_SIGPROCMASK, cvt(&NopSuccess), 0}, - {SYSCALL_IOCTL, cvt(&FEXCore::HLE::Ioctl), 3}, - {SYSCALL_PREAD64, cvt(&FEXCore::HLE::PRead64), 4}, - {SYSCALL_PWRITE64, cvt(&FEXCore::HLE::PWrite64), 4}, - {SYSCALL_READV, cvt(&FEXCore::HLE::Readv), 3}, - {SYSCALL_WRITEV, cvt(&FEXCore::HLE::Writev), 3}, - {SYSCALL_ACCESS, cvt(&FEXCore::HLE::Access), 2}, - {SYSCALL_PIPE, cvt(&FEXCore::HLE::Pipe), 1}, - {SYSCALL_SELECT, cvt(&FEXCore::HLE::Select), 5}, - {SYSCALL_SCHED_YIELD, cvt(&FEXCore::HLE::Sched_Yield), 0}, - {SYSCALL_MREMAP, cvt(&FEXCore::HLE::Mremap), 5}, - {SYSCALL_MINCORE, cvt(&FEXCore::HLE::Mincore), 3}, - {SYSCALL_MADVISE, cvt(&FEXCore::HLE::Madvise), 3}, - {SYSCALL_SHMGET, cvt(&FEXCore::HLE::Shmget), 3}, - {SYSCALL_SHMAT, cvt(&FEXCore::HLE::Shmat), 3}, - {SYSCALL_SHMCTL, cvt(&FEXCore::HLE::Shmctl), 3}, - {SYSCALL_DUP, cvt(&FEXCore::HLE::Dup), 1}, - {SYSCALL_DUP2, cvt(&FEXCore::HLE::Dup2), 2}, - {SYSCALL_PAUSE, cvt(&NopFail), 0}, - {SYSCALL_NANOSLEEP, cvt(&FEXCore::HLE::Nanosleep), 2}, - {SYSCALL_GETITIMER, cvt(&NopSuccess), 2}, - {SYSCALL_ALARM, cvt(&NopSuccess), 1}, - {SYSCALL_SETITIMER, cvt(&NopSuccess), 3}, - {SYSCALL_GETPID, cvt(&FEXCore::HLE::Getpid), 0}, - {SYSCALL_SOCKET, cvt(&FEXCore::HLE::Socket), 3}, - {SYSCALL_CONNECT, cvt(&FEXCore::HLE::Connect), 3}, - {SYSCALL_SENDTO, cvt(&FEXCore::HLE::Sendto), 6}, - {SYSCALL_RECVFROM, cvt(&FEXCore::HLE::Recvfrom), 6}, - {SYSCALL_SENDMSG, cvt(&FEXCore::HLE::Sendmsg), 3}, - {SYSCALL_RECVMSG, cvt(&FEXCore::HLE::Recvmsg), 3}, - {SYSCALL_SHUTDOWN, cvt(&FEXCore::HLE::Shutdown), 2}, - {SYSCALL_BIND, cvt(&FEXCore::HLE::Bind), 3}, - {SYSCALL_LISTEN, cvt(&FEXCore::HLE::Listen), 2}, - {SYSCALL_GETSOCKNAME, cvt(&FEXCore::HLE::GetSockName), 3}, - {SYSCALL_GETPEERNAME, cvt(&FEXCore::HLE::GetPeerName), 3}, - {SYSCALL_SETSOCKOPT, cvt(&FEXCore::HLE::SetSockOpt), 5}, - {SYSCALL_GETSOCKOPT, cvt(&FEXCore::HLE::GetSockOpt), 5}, - {SYSCALL_CLONE, cvt(&FEXCore::HLE::Clone), 5}, - {SYSCALL_EXECVE, cvt(&FEXCore::HLE::Execve), 3}, - {SYSCALL_EXIT, cvt(&FEXCore::HLE::Exit), 1}, - {SYSCALL_WAIT4, cvt(&FEXCore::HLE::Wait4), 4}, - {SYSCALL_KILL, cvt(&FEXCore::HLE::Kill), 2}, - {SYSCALL_UNAME, cvt(&FEXCore::HLE::Uname), 1}, - {SYSCALL_SHMDT, cvt(&FEXCore::HLE::Shmdt), 1}, - {SYSCALL_FCNTL, cvt(&FEXCore::HLE::Fcntl), 3}, - {SYSCALL_FLOCK, cvt(&FEXCore::HLE::Flock), 2}, - {SYSCALL_FSYNC, cvt(&FEXCore::HLE::Fsync), 1}, - {SYSCALL_FDATASYNC, cvt(&FEXCore::HLE::Fdatasync), 1}, - {SYSCALL_FTRUNCATE, cvt(&FEXCore::HLE::Ftruncate), 2}, - {SYSCALL_GETCWD, cvt(&FEXCore::HLE::Getcwd), 2}, - {SYSCALL_CHDIR, cvt(&FEXCore::HLE::Chdir), 1}, - {SYSCALL_RENAME, cvt(&FEXCore::HLE::Rename), 2}, - {SYSCALL_MKDIR, cvt(&FEXCore::HLE::Mkdir), 2}, - {SYSCALL_RMDIR, cvt(&FEXCore::HLE::Rmdir), 1}, - {SYSCALL_LINK, cvt(&FEXCore::HLE::Link), 2}, - {SYSCALL_UNLINK, cvt(&FEXCore::HLE::Unlink), 1}, - {SYSCALL_READLINK, cvt(&FEXCore::HLE::Readlink), 3}, - {SYSCALL_CHMOD, cvt(&FEXCore::HLE::Chmod), 2}, - {SYSCALL_FCHMOD, cvt(&FEXCore::HLE::Fchmod), 2}, - {SYSCALL_UMASK, cvt(&FEXCore::HLE::Umask), 1}, - {SYSCALL_GETTIMEOFDAY, cvt(&FEXCore::HLE::Gettimeofday), 2}, - {SYSCALL_SYSINFO, cvt(&FEXCore::HLE::Sysinfo), 1}, - {SYSCALL_GETUID, cvt(&FEXCore::HLE::Getuid), 0}, - {SYSCALL_SYSLOG, cvt(&FEXCore::HLE::Syslog), 6}, // XXX: Verify ABI on vaarg - {SYSCALL_GETGID, cvt(&FEXCore::HLE::Getgid), 0}, - {SYSCALL_SETUID, cvt(&FEXCore::HLE::Setuid), 1}, - {SYSCALL_GETEUID, cvt(&FEXCore::HLE::Geteuid), 0}, - {SYSCALL_GETEGID, cvt(&FEXCore::HLE::Getegid), 0}, - {SYSCALL_GETPPID, cvt(&FEXCore::HLE::Getppid), 0}, - {SYSCALL_SETREGID, cvt(&FEXCore::HLE::Setregid), 2}, - {SYSCALL_SETRESUID, cvt(&FEXCore::HLE::Setresuid), 3}, - {SYSCALL_GETRESUID, cvt(&FEXCore::HLE::Getresuid), 3}, - {SYSCALL_SETRESGID, cvt(&FEXCore::HLE::Setresgid), 3}, - {SYSCALL_GETRESGID, cvt(&FEXCore::HLE::Getresgid), 3}, - {SYSCALL_SIGALTSTACK, cvt(&NopSuccess), 2}, - {SYSCALL_MKNOD, cvt(&FEXCore::HLE::Mknod), 3}, - {SYSCALL_PERSONALITY, cvt(&FEXCore::HLE::Personality), 1}, - {SYSCALL_STATFS, cvt(&FEXCore::HLE::Statfs), 2}, - {SYSCALL_FSTATFS, cvt(&FEXCore::HLE::FStatfs), 2}, - {SYSCALL_GETPRIORITY, cvt(&FEXCore::HLE::Getpriority), 2}, - {SYSCALL_SETPRIORITY, cvt(&FEXCore::HLE::Setpriority), 3}, - {SYSCALL_SCHED_SETSCHEDULER, cvt(&NopSuccess), 3}, - {SYSCALL_MLOCK, cvt(&FEXCore::HLE::Mlock), 2}, - {SYSCALL_MUNLOCK, cvt(&FEXCore::HLE::Munlock), 2}, - {SYSCALL_MLOCKALL, cvt(&FEXCore::HLE::Mlockall), 1}, - {SYSCALL_MUNLOCKALL, cvt(&FEXCore::HLE::Mlockall), 0}, - {SYSCALL_PRCTL, cvt(&FEXCore::HLE::Prctl), 5}, - {SYSCALL_ARCH_PRCTL, cvt(&FEXCore::HLE::Arch_Prctl), 2}, - {SYSCALL_GETTID, cvt(&FEXCore::HLE::Gettid), 0}, - {SYSCALL_TIME, cvt(&FEXCore::HLE::Time), 1}, - {SYSCALL_FUTEX, cvt(&FEXCore::HLE::Futex), 6}, - {SYSCALL_SCHED_SETAFFINITY, cvt(&FEXCore::HLE::Sched_Setaffinity), 3}, - {SYSCALL_SCHED_GETAFFINITY, cvt(&FEXCore::HLE::Sched_Getaffinity), 3}, - {SYSCALL_EPOLL_CREATE, cvt(&FEXCore::HLE::EPoll_Create), 1}, - {SYSCALL_GETDENTS64, cvt(&FEXCore::HLE::Getdents64), 3}, - {SYSCALL_FADVISE64, cvt(&FEXCore::HLE::Fadvise64), 4}, - {SYSCALL_TIMER_CREATE, cvt(&FEXCore::HLE::Timer_Create), 3}, - {SYSCALL_TIMER_SETTIME, cvt(&FEXCore::HLE::Timer_Settime), 4}, - {SYSCALL_TIMER_GETTIME, cvt(&FEXCore::HLE::Timer_Gettime), 2}, - {SYSCALL_TIMER_GETOVERRUN, cvt(&FEXCore::HLE::Timer_Getoverrun), 1}, - {SYSCALL_TIMER_DELETE, cvt(&FEXCore::HLE::Timer_Delete), 1}, - {SYSCALL_SET_TID_ADDRESS, cvt(&FEXCore::HLE::Set_tid_address), 1}, - {SYSCALL_CLOCK_GETTIME, cvt(&FEXCore::HLE::Clock_gettime), 2}, - {SYSCALL_CLOCK_GETRES, cvt(&FEXCore::HLE::Clock_getres), 2}, - {SYSCALL_EXIT_GROUP, cvt(&FEXCore::HLE::Exit_group), 1}, - {SYSCALL_EPOLL_CTL, cvt(&FEXCore::HLE::EPoll_Ctl), 4}, - {SYSCALL_TGKILL, cvt(&NopSuccess), 3}, - {SYSCALL_GET_MEMPOLICY, cvt(&FEXCore::HLE::Get_mempolicy), 5}, - {SYSCALL_INOTIFY_INIT, cvt(&FEXCore::HLE::Inotify_init), 0}, - {SYSCALL_INOTIFY_ADD_WATCH, cvt(&FEXCore::HLE::Inotify_add_watch), 3}, - {SYSCALL_INOTIFY_RM_WATCH, cvt(&FEXCore::HLE::Inotify_rm_watch), 2}, - {SYSCALL_OPENAT, cvt(&FEXCore::HLE::Openat), 4}, - {SYSCALL_NEWFSTATAT, cvt(&FEXCore::HLE::NewFStatat), 4}, - {SYSCALL_READLINKAT, cvt(&FEXCore::HLE::Readlinkat), 4}, - {SYSCALL_FACCESSAT, cvt(&FEXCore::HLE::FAccessat), 4}, - {SYSCALL_PPOLL, cvt(&FEXCore::HLE::Ppoll), 5}, - {SYSCALL_SET_ROBUST_LIST, cvt(&FEXCore::HLE::Set_robust_list), 2}, - {SYSCALL_EPOLL_PWAIT, cvt(&FEXCore::HLE::EPoll_Pwait), 5}, - {SYSCALL_TIMERFD_CREATE, cvt(&FEXCore::HLE::Timerfd_Create), 2}, - {SYSCALL_EVENTFD, cvt(&FEXCore::HLE::Eventfd), 2}, - {SYSCALL_EPOLL_CREATE1, cvt(&FEXCore::HLE::EPoll_Create1), 1}, - {SYSCALL_PIPE2, cvt(&FEXCore::HLE::Pipe2), 2}, - {SYSCALL_PRLIMIT64, cvt(&FEXCore::HLE::Prlimit64), 4}, - {SYSCALL_SENDMMSG, cvt(&FEXCore::HLE::Sendmmsg), 4}, - {SYSCALL_GETRANDOM, cvt(&FEXCore::HLE::Getrandom), 3}, - {SYSCALL_MEMFD_CREATE, cvt(&FEXCore::HLE::Memfd_Create), 2}, - {SYSCALL_MLOCK2, cvt(&FEXCore::HLE::Mlock2), 3}, - {SYSCALL_STATX, cvt(&FEXCore::HLE::Statx), 5}, + {SYSCALL_READ, cvt(&FEXCore::HLE::Read), 3}, + {SYSCALL_WRITE, cvt(&FEXCore::HLE::Write), 3}, + {SYSCALL_OPEN, cvt(&FEXCore::HLE::Open), 3}, + {SYSCALL_CLOSE, cvt(&FEXCore::HLE::Close), 1}, + {SYSCALL_STAT, cvt(&FEXCore::HLE::Stat), 2}, + {SYSCALL_FSTAT, cvt(&FEXCore::HLE::Fstat), 2}, + {SYSCALL_LSTAT, cvt(&FEXCore::HLE::Lstat), 2}, + {SYSCALL_POLL, cvt(&FEXCore::HLE::Poll), 3}, + {SYSCALL_LSEEK, cvt(&FEXCore::HLE::Lseek), 3}, + {SYSCALL_MMAP, cvt(&FEXCore::HLE::Mmap), 6}, + {SYSCALL_MPROTECT, cvt(&FEXCore::HLE::Mprotect), 3}, + {SYSCALL_MUNMAP, cvt(&FEXCore::HLE::Munmap), 2}, + {SYSCALL_BRK, cvt(&FEXCore::HLE::Brk), 1}, + {SYSCALL_RT_SIGACTION, cvt(&FEXCore::HLE::RT_Sigaction), 3}, + {SYSCALL_RT_SIGPROCMASK, cvt(&FEXCore::HLE::RT_Sigprocmask), 3}, + {SYSCALL_IOCTL, cvt(&FEXCore::HLE::Ioctl), 3}, + {SYSCALL_PREAD64, cvt(&FEXCore::HLE::PRead64), 4}, + {SYSCALL_PWRITE64, cvt(&FEXCore::HLE::PWrite64), 4}, + {SYSCALL_READV, cvt(&FEXCore::HLE::Readv), 3}, + {SYSCALL_WRITEV, cvt(&FEXCore::HLE::Writev), 3}, + {SYSCALL_ACCESS, cvt(&FEXCore::HLE::Access), 2}, + {SYSCALL_PIPE, cvt(&FEXCore::HLE::Pipe), 1}, + {SYSCALL_SELECT, cvt(&FEXCore::HLE::Select), 5}, + {SYSCALL_SCHED_YIELD, cvt(&FEXCore::HLE::Sched_Yield), 0}, + {SYSCALL_MREMAP, cvt(&FEXCore::HLE::Mremap), 5}, + {SYSCALL_MINCORE, cvt(&FEXCore::HLE::Mincore), 3}, + {SYSCALL_MADVISE, cvt(&FEXCore::HLE::Madvise), 3}, + {SYSCALL_SHMGET, cvt(&FEXCore::HLE::Shmget), 3}, + {SYSCALL_SHMAT, cvt(&FEXCore::HLE::Shmat), 3}, + {SYSCALL_SHMCTL, cvt(&FEXCore::HLE::Shmctl), 3}, + {SYSCALL_DUP, cvt(&FEXCore::HLE::Dup), 1}, + {SYSCALL_DUP2, cvt(&FEXCore::HLE::Dup2), 2}, + {SYSCALL_PAUSE, cvt(&NopFail), 0}, + {SYSCALL_NANOSLEEP, cvt(&FEXCore::HLE::Nanosleep), 2}, + {SYSCALL_GETITIMER, cvt(&NopSuccess), 2}, + {SYSCALL_ALARM, cvt(&NopSuccess), 1}, + {SYSCALL_SETITIMER, cvt(&NopSuccess), 3}, + {SYSCALL_GETPID, cvt(&FEXCore::HLE::Getpid), 0}, + {SYSCALL_SOCKET, cvt(&FEXCore::HLE::Socket), 3}, + {SYSCALL_CONNECT, cvt(&FEXCore::HLE::Connect), 3}, + {SYSCALL_SENDTO, cvt(&FEXCore::HLE::Sendto), 6}, + {SYSCALL_RECVFROM, cvt(&FEXCore::HLE::Recvfrom), 6}, + {SYSCALL_SENDMSG, cvt(&FEXCore::HLE::Sendmsg), 3}, + {SYSCALL_RECVMSG, cvt(&FEXCore::HLE::Recvmsg), 3}, + {SYSCALL_SHUTDOWN, cvt(&FEXCore::HLE::Shutdown), 2}, + {SYSCALL_BIND, cvt(&FEXCore::HLE::Bind), 3}, + {SYSCALL_LISTEN, cvt(&FEXCore::HLE::Listen), 2}, + {SYSCALL_GETSOCKNAME, cvt(&FEXCore::HLE::GetSockName), 3}, + {SYSCALL_GETPEERNAME, cvt(&FEXCore::HLE::GetPeerName), 3}, + {SYSCALL_SETSOCKOPT, cvt(&FEXCore::HLE::SetSockOpt), 5}, + {SYSCALL_GETSOCKOPT, cvt(&FEXCore::HLE::GetSockOpt), 5}, + {SYSCALL_CLONE, cvt(&FEXCore::HLE::Clone), 5}, + {SYSCALL_EXECVE, cvt(&FEXCore::HLE::Execve), 3}, + {SYSCALL_EXIT, cvt(&FEXCore::HLE::Exit), 1}, + {SYSCALL_WAIT4, cvt(&FEXCore::HLE::Wait4), 4}, + {SYSCALL_KILL, cvt(&FEXCore::HLE::Kill), 2}, + {SYSCALL_UNAME, cvt(&FEXCore::HLE::Uname), 1}, + {SYSCALL_SEMGET, cvt(&FEXCore::HLE::Semget), 3}, + {SYSCALL_SEMOP, cvt(&FEXCore::HLE::Semop), 3}, + {SYSCALL_SEMCTL, cvt(&FEXCore::HLE::Semctl), 4}, + {SYSCALL_SHMDT, cvt(&FEXCore::HLE::Shmdt), 1}, + {SYSCALL_FCNTL, cvt(&FEXCore::HLE::Fcntl), 3}, + {SYSCALL_FLOCK, cvt(&FEXCore::HLE::Flock), 2}, + {SYSCALL_FSYNC, cvt(&FEXCore::HLE::Fsync), 1}, + {SYSCALL_FDATASYNC, cvt(&FEXCore::HLE::Fdatasync), 1}, + {SYSCALL_FTRUNCATE, cvt(&FEXCore::HLE::Ftruncate), 2}, + {SYSCALL_GETCWD, cvt(&FEXCore::HLE::Getcwd), 2}, + {SYSCALL_CHDIR, cvt(&FEXCore::HLE::Chdir), 1}, + {SYSCALL_RENAME, cvt(&FEXCore::HLE::Rename), 2}, + {SYSCALL_MKDIR, cvt(&FEXCore::HLE::Mkdir), 2}, + {SYSCALL_RMDIR, cvt(&FEXCore::HLE::Rmdir), 1}, + {SYSCALL_LINK, cvt(&FEXCore::HLE::Link), 2}, + {SYSCALL_UNLINK, cvt(&FEXCore::HLE::Unlink), 1}, + {SYSCALL_READLINK, cvt(&FEXCore::HLE::Readlink), 3}, + {SYSCALL_CHMOD, cvt(&FEXCore::HLE::Chmod), 2}, + {SYSCALL_FCHMOD, cvt(&FEXCore::HLE::Fchmod), 2}, + {SYSCALL_UMASK, cvt(&FEXCore::HLE::Umask), 1}, + {SYSCALL_GETTIMEOFDAY, cvt(&FEXCore::HLE::Gettimeofday), 2}, + {SYSCALL_SYSINFO, cvt(&FEXCore::HLE::Sysinfo), 1}, + {SYSCALL_GETUID, cvt(&FEXCore::HLE::Getuid), 0}, + {SYSCALL_SYSLOG, cvt(&FEXCore::HLE::Syslog), 6}, // XXX: Verify ABI on vaarg + {SYSCALL_GETGID, cvt(&FEXCore::HLE::Getgid), 0}, + {SYSCALL_SETUID, cvt(&FEXCore::HLE::Setuid), 1}, + {SYSCALL_GETEUID, cvt(&FEXCore::HLE::Geteuid), 0}, + {SYSCALL_GETEGID, cvt(&FEXCore::HLE::Getegid), 0}, + {SYSCALL_GETPPID, cvt(&FEXCore::HLE::Getppid), 0}, + {SYSCALL_SETREGID, cvt(&FEXCore::HLE::Setregid), 2}, + {SYSCALL_SETRESUID, cvt(&FEXCore::HLE::Setresuid), 3}, + {SYSCALL_GETRESUID, cvt(&FEXCore::HLE::Getresuid), 3}, + {SYSCALL_SETRESGID, cvt(&FEXCore::HLE::Setresgid), 3}, + {SYSCALL_GETRESGID, cvt(&FEXCore::HLE::Getresgid), 3}, + {SYSCALL_SIGALTSTACK, cvt(&FEXCore::HLE::Sigaltstack), 2}, + {SYSCALL_MKNOD, cvt(&FEXCore::HLE::Mknod), 3}, + {SYSCALL_PERSONALITY, cvt(&FEXCore::HLE::Personality), 1}, + {SYSCALL_STATFS, cvt(&FEXCore::HLE::Statfs), 2}, + {SYSCALL_FSTATFS, cvt(&FEXCore::HLE::FStatfs), 2}, + {SYSCALL_GETPRIORITY, cvt(&FEXCore::HLE::Getpriority), 2}, + {SYSCALL_SETPRIORITY, cvt(&FEXCore::HLE::Setpriority), 3}, + {SYSCALL_SCHED_SETPARAM, cvt(&FEXCore::HLE::Sched_Setparam), 2}, + {SYSCALL_SCHED_GETPARAM, cvt(&FEXCore::HLE::Sched_Getparam), 2}, + {SYSCALL_SCHED_SETSCHEDULER, cvt(&FEXCore::HLE::Sched_Setscheduler), 3}, + {SYSCALL_SCHED_GETSCHEDULER, cvt(&FEXCore::HLE::Sched_Getscheduler), 1}, + {SYSCALL_SCHED_GET_PRIORITY_MAX, cvt(&FEXCore::HLE::Sched_Get_priority_max), 1}, + {SYSCALL_SCHED_GET_PRIORITY_MIN, cvt(&FEXCore::HLE::Sched_Get_priority_min), 1}, + {SYSCALL_SCHED_RR_GET_INTERVAL, cvt(&FEXCore::HLE::Sched_rr_get_interval), 2}, + {SYSCALL_MLOCK, cvt(&FEXCore::HLE::Mlock), 2}, + {SYSCALL_MUNLOCK, cvt(&FEXCore::HLE::Munlock), 2}, + {SYSCALL_MLOCKALL, cvt(&FEXCore::HLE::Mlockall), 1}, + {SYSCALL_MUNLOCKALL, cvt(&FEXCore::HLE::Mlockall), 0}, + {SYSCALL_PRCTL, cvt(&FEXCore::HLE::Prctl), 5}, + {SYSCALL_ARCH_PRCTL, cvt(&FEXCore::HLE::Arch_Prctl), 2}, + {SYSCALL_GETTID, cvt(&FEXCore::HLE::Gettid), 0}, + {SYSCALL_TIME, cvt(&FEXCore::HLE::Time), 1}, + {SYSCALL_FUTEX, cvt(&FEXCore::HLE::Futex), 6}, + {SYSCALL_SCHED_SETAFFINITY, cvt(&FEXCore::HLE::Sched_Setaffinity), 3}, + {SYSCALL_SCHED_GETAFFINITY, cvt(&FEXCore::HLE::Sched_Getaffinity), 3}, + {SYSCALL_EPOLL_CREATE, cvt(&FEXCore::HLE::EPoll_Create), 1}, + {SYSCALL_GETDENTS64, cvt(&FEXCore::HLE::Getdents64), 3}, + {SYSCALL_FADVISE64, cvt(&FEXCore::HLE::Fadvise64), 4}, + {SYSCALL_TIMER_CREATE, cvt(&FEXCore::HLE::Timer_Create), 3}, + {SYSCALL_TIMER_SETTIME, cvt(&FEXCore::HLE::Timer_Settime), 4}, + {SYSCALL_TIMER_GETTIME, cvt(&FEXCore::HLE::Timer_Gettime), 2}, + {SYSCALL_TIMER_GETOVERRUN, cvt(&FEXCore::HLE::Timer_Getoverrun), 1}, + {SYSCALL_TIMER_DELETE, cvt(&FEXCore::HLE::Timer_Delete), 1}, + {SYSCALL_SET_TID_ADDRESS, cvt(&FEXCore::HLE::Set_tid_address), 1}, + {SYSCALL_SEMTIMEDOP, cvt(&FEXCore::HLE::Semtimedop), 4}, + {SYSCALL_CLOCK_GETTIME, cvt(&FEXCore::HLE::Clock_gettime), 2}, + {SYSCALL_CLOCK_GETRES, cvt(&FEXCore::HLE::Clock_getres), 2}, + {SYSCALL_EXIT_GROUP, cvt(&FEXCore::HLE::Exit_group), 1}, + {SYSCALL_EPOLL_WAIT, cvt(&FEXCore::HLE::EPoll_Wait), 4}, + {SYSCALL_EPOLL_CTL, cvt(&FEXCore::HLE::EPoll_Ctl), 4}, + {SYSCALL_TGKILL, cvt(&NopSuccess), 3}, + {SYSCALL_GET_MEMPOLICY, cvt(&FEXCore::HLE::Get_mempolicy), 5}, + {SYSCALL_INOTIFY_INIT, cvt(&FEXCore::HLE::Inotify_init), 0}, + {SYSCALL_INOTIFY_ADD_WATCH, cvt(&FEXCore::HLE::Inotify_add_watch), 3}, + {SYSCALL_INOTIFY_RM_WATCH, cvt(&FEXCore::HLE::Inotify_rm_watch), 2}, + {SYSCALL_OPENAT, cvt(&FEXCore::HLE::Openat), 4}, + {SYSCALL_NEWFSTATAT, cvt(&FEXCore::HLE::NewFStatat), 4}, + {SYSCALL_READLINKAT, cvt(&FEXCore::HLE::Readlinkat), 4}, + {SYSCALL_FACCESSAT, cvt(&FEXCore::HLE::FAccessat), 4}, + {SYSCALL_PPOLL, cvt(&FEXCore::HLE::Ppoll), 5}, + {SYSCALL_SET_ROBUST_LIST, cvt(&FEXCore::HLE::Set_robust_list), 2}, + {SYSCALL_EPOLL_PWAIT, cvt(&FEXCore::HLE::EPoll_Pwait), 5}, + {SYSCALL_TIMERFD_CREATE, cvt(&FEXCore::HLE::Timerfd_Create), 2}, + {SYSCALL_EVENTFD, cvt(&FEXCore::HLE::Eventfd), 2}, + {SYSCALL_EPOLL_CREATE1, cvt(&FEXCore::HLE::EPoll_Create1), 1}, + {SYSCALL_PIPE2, cvt(&FEXCore::HLE::Pipe2), 2}, + {SYSCALL_PRLIMIT64, cvt(&FEXCore::HLE::Prlimit64), 4}, + {SYSCALL_SENDMMSG, cvt(&FEXCore::HLE::Sendmmsg), 4}, + {SYSCALL_GETRANDOM, cvt(&FEXCore::HLE::Getrandom), 3}, + {SYSCALL_MEMFD_CREATE, cvt(&FEXCore::HLE::Memfd_Create), 2}, + {SYSCALL_MLOCK2, cvt(&FEXCore::HLE::Mlock2), 3}, + {SYSCALL_STATX, cvt(&FEXCore::HLE::Statx), 5}, }; // Set all the new definitions for (auto &Syscall : Syscalls) { auto &Def = Definitions.at(std::get<0>(Syscall)); + LogMan::Throw::A(Def.Ptr == cvt(&Unimplemented), "Oops overwriting sysall problem"); Def.Ptr = std::get<1>(Syscall); Def.NumArgs = std::get<2>(Syscall); } diff --git a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h index 40336c15d..b373d9aed 100644 --- a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h +++ b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h @@ -78,6 +78,9 @@ enum Syscalls { SYSCALL_WAIT4 = 61, ///< __NR_wait4 SYSCALL_KILL = 62, ///< __NR_kill SYSCALL_UNAME = 63, ///< __NR_uname + SYSCALL_SEMGET = 64, ///< __NR_semget + SYSCALL_SEMOP = 65, ///< __NR_semop + SYSCALL_SEMCTL = 66, ///< __NR_semctl SYSCALL_SHMDT = 67, ///< __NR_shmdt SYSCALL_FCNTL = 72, ///< __NR_fcntl SYSCALL_FLOCK = 73, ///< __NR_flock @@ -116,7 +119,13 @@ enum Syscalls { SYSCALL_FSTATFS = 138, ///< __NR_fstatfs SYSCALL_GETPRIORITY = 140, ///< __NR_getpriority SYSCALL_SETPRIORITY = 141, ///< __NR_getpriority + SYSCALL_SCHED_SETPARAM = 142, ///< __NR_sched_setparam + SYSCALL_SCHED_GETPARAM = 143, ///< __NR_sched_getparam SYSCALL_SCHED_SETSCHEDULER = 144, ///< __NR_sched_setscheduler + SYSCALL_SCHED_GETSCHEDULER = 145, ///< __NR_sched_getscheduler + SYSCALL_SCHED_GET_PRIORITY_MAX = 146, ///< __NR_sched_get_priority_max + SYSCALL_SCHED_GET_PRIORITY_MIN = 147, ///< __NR_sched_get_priority_min + SYSCALL_SCHED_RR_GET_INTERVAL = 148, ///< __NR_sched_rr_get_interval SYSCALL_MLOCK = 149, ///< __NR_mlock SYSCALL_MUNLOCK = 150, ///< __NR_munlock SYSCALL_MLOCKALL = 151, ///< __NR_mlockall @@ -129,6 +138,8 @@ enum Syscalls { SYSCALL_SCHED_SETAFFINITY = 203, ///< __NR_sched_setaffinity SYSCALL_SCHED_GETAFFINITY = 204, ///< __NR_sched_getaffinity SYSCALL_EPOLL_CREATE = 213, ///< __NR_epoll_create + SYSCALL_EPOLL_CTL_OLD = 214, ///< __NR_epoll_ctl_old + SYSCALL_EPOLL_WAIT_OLD = 215, ///< __NR_epoll_wait_old SYSCALL_GETDENTS64 = 217, ///< __NR_getdents64 SYSCALL_FADVISE64 = 221, ///< __NR_fadvise64 SYSCALL_TIMER_CREATE = 222, ///< __NR_timer_create @@ -137,9 +148,11 @@ enum Syscalls { SYSCALL_TIMER_GETOVERRUN= 225, ///< __NR_timer_getoverrun SYSCALL_TIMER_DELETE = 226, ///< __NR_timer_delete SYSCALL_SET_TID_ADDRESS = 218, ///< __NR_set_tid_address + SYSCALL_SEMTIMEDOP = 220, ///< __NR_semtimedop SYSCALL_CLOCK_GETTIME = 228, ///< __NR_clock_gettime SYSCALL_CLOCK_GETRES = 229, ///< __NR_clock_getres SYSCALL_EXIT_GROUP = 231, ///< __NR_exit_group + SYSCALL_EPOLL_WAIT = 232, ///< __NR_epoll_wait SYSCALL_EPOLL_CTL = 233, ///< __NR_epoll_ctl SYSCALL_TGKILL = 234, ///< __NR_tgkill SYSCALL_GET_MEMPOLICY = 239, ///< __NR_get_mempolicy