diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp index f651be3eb..3d237b462 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.cpp @@ -190,6 +190,11 @@ namespace FEXCore::HLE { SYSCALL_ERRNO(); } + uint64_t Fallocate(FEXCore::Core::InternalThreadState *Thread, int fd, int mode, off_t offset, off_t len) { + uint64_t Result = ::fallocate(fd, mode, offset, len); + SYSCALL_ERRNO(); + } + uint64_t Getdents(FEXCore::Core::InternalThreadState *Thread, int fd, void *dirp, uint32_t count) { #ifdef SYS_getdents uint64_t Result = syscall(SYS_getdents, diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h index a0572b31e..c320a5b05 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/FD.h @@ -39,6 +39,7 @@ namespace FEXCore::HLE { uint64_t Fsync(FEXCore::Core::InternalThreadState *Thread, int fd); uint64_t Fdatasync(FEXCore::Core::InternalThreadState *Thread, int fd); uint64_t Ftruncate(FEXCore::Core::InternalThreadState *Thread, int fd, off_t length); + uint64_t Fallocate(FEXCore::Core::InternalThreadState *Thread, int fd, int mode, off_t offset, off_t len); uint64_t Getdents(FEXCore::Core::InternalThreadState *Thread, int fd, void *dirp, uint32_t count); uint64_t Fchmod(FEXCore::Core::InternalThreadState *Thread, int fd, int mode); uint64_t Getdents64(FEXCore::Core::InternalThreadState *Thread, int fd, void *dirp, uint32_t count); diff --git a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp index f2d8f8908..e081a38ac 100644 --- a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp +++ b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp @@ -430,6 +430,13 @@ void x64SyscallHandler::Strace(FEXCore::HLE::SyscallArguments *Args, uint64_t Re case SYSCALL_TIMERFD_CREATE: LogMan::Msg::D("timerfd_create(%lx, %lx) = %ld", Args->Argument[1], Args->Argument[2], Ret); break; + case SYSCALL_FALLOCATE: + LogMan::Msg::D("fallocate(%lx, %lx, %p, %p) = %ld", + Args->Argument[1], + Args->Argument[2], + Args->Argument[3], + Args->Argument[4], + Ret); case SYSCALL_TIMERFD_SETTIME: LogMan::Msg::D("timerfd_settime(%ld, %lx, %p, %p) = %ld", Args->Argument[1], @@ -936,6 +943,7 @@ void x64SyscallHandler::RegisterSyscallHandlers() { {SYSCALL_GET_ROBUST_LIST, cvt(&FEXCore::HLE::Get_robust_list), 3}, {SYSCALL_EPOLL_PWAIT, cvt(&FEXCore::HLE::EPoll_Pwait), 5}, {SYSCALL_TIMERFD_CREATE, cvt(&FEXCore::HLE::Timerfd_Create), 2}, + {SYSCALL_FALLOCATE, cvt(&FEXCore::HLE::Fallocate), 4}, {SYSCALL_TIMERFD_SETTIME, cvt(&FEXCore::HLE::Timerfd_Settime), 4}, {SYSCALL_TIMERFD_GETTIME, cvt(&FEXCore::HLE::Timerfd_Gettime), 2}, {SYSCALL_ACCEPT4, cvt(&FEXCore::HLE::Accept4), 4}, diff --git a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h index a43d5acc3..c38264237 100644 --- a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h +++ b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h @@ -180,6 +180,7 @@ enum Syscalls { SYSCALL_GET_ROBUST_LIST = 274, ///< __NR_get_robust_list SYSCALL_EPOLL_PWAIT = 281, ///< __NR_epoll_pwait SYSCALL_TIMERFD_CREATE = 283, ///< __NR_timerfd_create + SYSCALL_FALLOCATE = 285, ///< __NR_fallocate SYSCALL_TIMERFD_SETTIME = 286, ///< __NR_timerfd_settime SYSCALL_TIMERFD_GETTIME = 287, ///< __NR_timerfd_gettime SYSCALL_ACCEPT4 = 288, ///< __NR_accept4