From 63ea0358bd25d359e2edd38aaa727d638f97efff Mon Sep 17 00:00:00 2001 From: Stefanos Kornilios Mitsis Poiitidis Date: Sun, 31 May 2020 11:19:20 +0300 Subject: [PATCH] syscalls/x64: Add pselect6 --- External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp | 5 +++++ External/FEXCore/Source/Interface/HLE/Syscalls/FD.h | 1 + .../FEXCore/Source/Interface/HLE/x64/Syscalls.cpp | 11 +++++++++++ External/FEXCore/Source/Interface/HLE/x64/Syscalls.h | 1 + 4 files changed, 18 insertions(+) diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp index fdff7e174..6eb22042c 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp @@ -293,6 +293,11 @@ namespace FEXCore::HLE { SYSCALL_ERRNO(); } + uint64_t Pselect6(FEXCore::Core::InternalThreadState *Thread, int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask) { + uint64_t Result = pselect(nfds, readfds, writefds, exceptfds, timeout, sigmask); + SYSCALL_ERRNO(); + } + uint64_t Ppoll(FEXCore::Core::InternalThreadState *Thread, struct pollfd *fds, nfds_t nfds, const struct timespec *timeout_ts, const sigset_t *sigmask, size_t sigsetsize) { // sigsetsize is unused here since it is currently a constant and not exposed through glibc uint64_t Result = ::ppoll(fds, nfds, timeout_ts, sigmask); diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h index e8aa1f8d9..d49a2884d 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h @@ -56,6 +56,7 @@ namespace FEXCore::HLE { uint64_t Inotify_init1(FEXCore::Core::InternalThreadState *Thread, int flags); uint64_t Memfd_Create(FEXCore::Core::InternalThreadState *Thread, const char *name, uint32_t flags); uint64_t Statx(FEXCore::Core::InternalThreadState *Thread, int dirfd, const char *pathname, int flags, uint32_t mask, struct statx *statxbuf); + uint64_t Pselect6(FEXCore::Core::InternalThreadState *Thread, int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, const struct timespec *timeout, const sigset_t *sigmask); uint64_t Ppoll(FEXCore::Core::InternalThreadState *Thread, struct pollfd *fds, nfds_t nfds, const struct timespec *timeout_ts, const sigset_t *sigmask, size_t sigsetsize); uint64_t Name_to_handle_at(FEXCore::Core::InternalThreadState *Thread, int dirfd, const char *pathname, struct file_handle *handle, int *mount_id, int flags); uint64_t Open_by_handle_at(FEXCore::Core::InternalThreadState *Thread, int mount_fd, struct file_handle *handle, int flags); diff --git a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp index fddf4ec24..ad06c1d19 100644 --- a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp +++ b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp @@ -391,6 +391,16 @@ void x64SyscallHandler::Strace(FEXCore::HLE::SyscallArguments *Args, uint64_t Re Args->Argument[4], Ret); break; + case SYSCALL_PSELECT6: + LogMan::Msg::D("pselect6(%d, %p, %p, %p, %p, %p) = %ld", + Args->Argument[1], + Args->Argument[2], + Args->Argument[3], + Args->Argument[4], + Args->Argument[5], + Args->Argument[6], + Ret); + break; case SYSCALL_PPOLL: LogMan::Msg::D("ppoll(%p, %d, %p, %p, %d) = %ld", Args->Argument[1], @@ -895,6 +905,7 @@ void x64SyscallHandler::RegisterSyscallHandlers() { {SYSCALL_NEWFSTATAT, cvt(&FEXCore::HLE::NewFStatat), 4}, {SYSCALL_READLINKAT, cvt(&FEXCore::HLE::Readlinkat), 4}, {SYSCALL_FACCESSAT, cvt(&FEXCore::HLE::FAccessat), 4}, + {SYSCALL_PSELECT6, cvt(&FEXCore::HLE::Pselect6), 6}, {SYSCALL_PPOLL, cvt(&FEXCore::HLE::Ppoll), 5}, {SYSCALL_SET_ROBUST_LIST, cvt(&FEXCore::HLE::Set_robust_list), 2}, {SYSCALL_GET_ROBUST_LIST, cvt(&FEXCore::HLE::Get_robust_list), 3}, diff --git a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h index 6ea05f31a..2c878a4c4 100644 --- a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h +++ b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h @@ -172,6 +172,7 @@ enum Syscalls { SYSCALL_NEWFSTATAT = 262, ///< __NR_newfstatat SYSCALL_READLINKAT = 267, ///< __NR_readlinkat SYSCALL_FACCESSAT = 269, ///< __NR_faccessat + SYSCALL_PSELECT6 = 270, ///< __NR_pselect6 SYSCALL_PPOLL = 271, ///< __NR_ppoll SYSCALL_SET_ROBUST_LIST = 273, ///< __NR_set_robust_list SYSCALL_GET_ROBUST_LIST = 274, ///< __NR_get_robust_list