diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp index c34c5907b..cc843d66a 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp @@ -235,7 +235,12 @@ namespace FEXCore::HLE { uint64_t Pipe2(FEXCore::Core::InternalThreadState *Thread, int pipefd[2], int flags) { uint64_t Result = ::pipe2(pipefd, flags); SYSCALL_ERRNO(); - } + } + + uint64_t Inotify_init1(FEXCore::Core::InternalThreadState *Thread, int flags) { + uint64_t Result = ::inotify_init1(flags); + SYSCALL_ERRNO(); + } uint64_t Memfd_Create(FEXCore::Core::InternalThreadState *Thread, const char *name, uint32_t flags) { uint64_t Result = ::memfd_create(name, flags); diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h index 458d5518e..a3fbd36f6 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h @@ -49,6 +49,7 @@ namespace FEXCore::HLE { uint64_t Timerfd_Create(FEXCore::Core::InternalThreadState *Thread, int32_t clockid, int32_t flags); uint64_t Eventfd(FEXCore::Core::InternalThreadState *Thread, uint32_t initval, uint32_t flags); uint64_t Pipe2(FEXCore::Core::InternalThreadState *Thread, int pipefd[2], int flags); + 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 Ppoll(FEXCore::Core::InternalThreadState *Thread, struct pollfd *fds, nfds_t nfds, const struct timespec *timeout_ts, const sigset_t *sigmask, size_t sigsetsize); diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/Socket.cpp b/External/FEXCore/Source/Interface/HLE/Syscalls/Socket.cpp index aa9db0eaf..f3b70cf24 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/Socket.cpp +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/Socket.cpp @@ -64,6 +64,11 @@ namespace FEXCore::HLE { SYSCALL_ERRNO(); } + uint64_t Socketpair(FEXCore::Core::InternalThreadState *Thread, int domain, int type, int protocol, int sv[2]) { + uint64_t Result = ::socketpair(domain, type, protocol, sv); + SYSCALL_ERRNO(); + } + uint64_t SetSockOpt(FEXCore::Core::InternalThreadState *Thread, int sockfd, int level, int optname, const void *optval, socklen_t optlen) { uint64_t Result = ::setsockopt(sockfd, level, optname, optval, optlen); SYSCALL_ERRNO(); diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/Socket.h b/External/FEXCore/Source/Interface/HLE/Syscalls/Socket.h index fe6062a88..ed92a3884 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/Socket.h +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/Socket.h @@ -19,6 +19,7 @@ namespace FEXCore::HLE { uint64_t Listen(FEXCore::Core::InternalThreadState *Thread, int sockfd, int backlog); uint64_t GetSockName(FEXCore::Core::InternalThreadState *Thread, int sockfd, struct sockaddr *addr, socklen_t *addrlen); uint64_t GetPeerName(FEXCore::Core::InternalThreadState *Thread, int sockfd, struct sockaddr *addr, socklen_t *addrlen); + uint64_t Socketpair(FEXCore::Core::InternalThreadState *Thread, int domain, int type, int protocol, int sv[2]); uint64_t SetSockOpt(FEXCore::Core::InternalThreadState *Thread, int sockfd, int level, int optname, const void *optval, socklen_t optlen); uint64_t GetSockOpt(FEXCore::Core::InternalThreadState *Thread, int sockfd, int level, int optname, void *optval, socklen_t *optlen); uint64_t Sendmmsg(FEXCore::Core::InternalThreadState *Thread, int sockfd, struct mmsghdr *msgvec, uint32_t vlen, int flags); diff --git a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp index fbd0d820a..0e0275b96 100644 --- a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp +++ b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp @@ -401,6 +401,9 @@ void x64SyscallHandler::Strace(FEXCore::HLE::SyscallArguments *Args, uint64_t Re case SYSCALL_PIPE2: LogMan::Msg::D("pipe2({...}, %d) = %ld", Args->Argument[2], Ret); break; + case SYSCALL_INOTIFY_INIT1: + LogMan::Msg::D("inotify_init1(%lx) = %ld", Args->Argument[1], Ret); + break; case SYSCALL_RT_SIGACTION: LogMan::Msg::D("rt_sigaction(%ld, %p, %p) = %ld", Args->Argument[1], Args->Argument[2], Args->Argument[3], Ret); break; @@ -471,6 +474,9 @@ void x64SyscallHandler::Strace(FEXCore::HLE::SyscallArguments *Args, uint64_t Re case SYSCALL_GETPEERNAME: LogMan::Msg::D("getpeername(%ld, 0x%lx, 0x%lx) = %ld", Args->Argument[1], Args->Argument[2], Args->Argument[3], Ret); break; + case SYSCALL_SOCKETPAIR: + LogMan::Msg::D("socketpair({...}) = %ld", Ret); + break; case SYSCALL_SETSOCKOPT: LogMan::Msg::D("setsockopt(%ld, %ld, %ld, 0x%lx, %ld) = %ld", Args->Argument[1], @@ -729,6 +735,7 @@ void x64SyscallHandler::RegisterSyscallHandlers() { {SYSCALL_LISTEN, cvt(&FEXCore::HLE::Listen), 2}, {SYSCALL_GETSOCKNAME, cvt(&FEXCore::HLE::GetSockName), 3}, {SYSCALL_GETPEERNAME, cvt(&FEXCore::HLE::GetPeerName), 3}, + {SYSCALL_SOCKETPAIR, cvt(&FEXCore::HLE::Socketpair), 4}, {SYSCALL_SETSOCKOPT, cvt(&FEXCore::HLE::SetSockOpt), 5}, {SYSCALL_GETSOCKOPT, cvt(&FEXCore::HLE::GetSockOpt), 5}, {SYSCALL_CLONE, cvt(&FEXCore::HLE::Clone), 5}, @@ -827,6 +834,7 @@ void x64SyscallHandler::RegisterSyscallHandlers() { {SYSCALL_EVENTFD, cvt(&FEXCore::HLE::Eventfd), 2}, {SYSCALL_EPOLL_CREATE1, cvt(&FEXCore::HLE::EPoll_Create1), 1}, {SYSCALL_PIPE2, cvt(&FEXCore::HLE::Pipe2), 2}, + {SYSCALL_INOTIFY_INIT1, cvt(&FEXCore::HLE::Inotify_init1), 1}, {SYSCALL_PRLIMIT64, cvt(&FEXCore::HLE::Prlimit64), 4}, {SYSCALL_SENDMMSG, cvt(&FEXCore::HLE::Sendmmsg), 4}, {SYSCALL_GETRANDOM, cvt(&FEXCore::HLE::Getrandom), 3}, diff --git a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h index b373d9aed..d41bb6d21 100644 --- a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h +++ b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h @@ -70,6 +70,7 @@ enum Syscalls { SYSCALL_LISTEN = 50, ///< __NR_listen SYSCALL_GETSOCKNAME = 51, ///< __NR_getsockname SYSCALL_GETPEERNAME = 52, ///< __NR_getpeername + SYSCALL_SOCKETPAIR = 53, ///< __NR_socketpair SYSCALL_SETSOCKOPT = 54, ///< __NR_setsockopt SYSCALL_GETSOCKOPT = 55, ///< __NR_getsockopt SYSCALL_CLONE = 56, ///< __NR_clone @@ -170,6 +171,7 @@ enum Syscalls { SYSCALL_EVENTFD = 290, ///< __NR_eventfd SYSCALL_EPOLL_CREATE1 = 291, ///< __NR_epoll_create1 SYSCALL_PIPE2 = 293, ///< __NR_pipe2 + SYSCALL_INOTIFY_INIT1 = 294, ///< __NR_inotify_init1 SYSCALL_PRLIMIT64 = 302, ///< __NR_prlimit64 SYSCALL_SENDMMSG = 307, ///< __NR_sendmmsg SYSCALL_GETRANDOM = 318, ///< __NR_getrandom