From 2c8fccdcf21c74be0eef6787bc01edf4ba964fcc Mon Sep 17 00:00:00 2001 From: Stefanos Kornilios Mitsis Poiitidis Date: Wed, 3 Jun 2020 16:01:06 +0300 Subject: [PATCH] syscalls/x64: Add fchdir --- External/FEXCore/Source/Interface/HLE/Syscalls/FS.cpp | 5 +++++ External/FEXCore/Source/Interface/HLE/Syscalls/FS.h | 1 + External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp | 4 ++++ External/FEXCore/Source/Interface/HLE/x64/Syscalls.h | 1 + 4 files changed, 11 insertions(+) diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/FS.cpp b/External/FEXCore/Source/Interface/HLE/Syscalls/FS.cpp index 12e0706c7..82f1b2c40 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/FS.cpp +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/FS.cpp @@ -23,6 +23,11 @@ namespace FEXCore::HLE { SYSCALL_ERRNO(); } + uint64_t Fchdir(FEXCore::Core::InternalThreadState *Thread, int fd) { + uint64_t Result = ::fchdir(fd); + SYSCALL_ERRNO(); + } + uint64_t Rename(FEXCore::Core::InternalThreadState *Thread, const char *oldpath, const char *newpath) { uint64_t Result = ::rename(oldpath, newpath); SYSCALL_ERRNO(); diff --git a/External/FEXCore/Source/Interface/HLE/Syscalls/FS.h b/External/FEXCore/Source/Interface/HLE/Syscalls/FS.h index 13df16155..90e0dfb34 100644 --- a/External/FEXCore/Source/Interface/HLE/Syscalls/FS.h +++ b/External/FEXCore/Source/Interface/HLE/Syscalls/FS.h @@ -11,6 +11,7 @@ struct InternalThreadState; namespace FEXCore::HLE { uint64_t Getcwd(FEXCore::Core::InternalThreadState *Thread, char *buf, size_t size); uint64_t Chdir(FEXCore::Core::InternalThreadState *Thread, const char *path); + uint64_t Fchdir(FEXCore::Core::InternalThreadState *Thread, int fd); uint64_t Rename(FEXCore::Core::InternalThreadState *Thread, const char *oldpath, const char *newpath); uint64_t Mkdir(FEXCore::Core::InternalThreadState *Thread, const char *pathname, mode_t mode); uint64_t Rmdir(FEXCore::Core::InternalThreadState *Thread, const char *pathname); diff --git a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp index 24ac8cc16..fd65c5eac 100644 --- a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp +++ b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.cpp @@ -310,6 +310,9 @@ void x64SyscallHandler::Strace(FEXCore::HLE::SyscallArguments *Args, uint64_t Re case SYSCALL_CHDIR: LogMan::Msg::D("chdir(\"%s\") = %ld", reinterpret_cast(Args->Argument[1]), Ret); break; + case SYSCALL_CHDIR: + LogMan::Msg::D("fchdir(\"%d\") = %ld", reinterpret_cast(Args->Argument[1]), Ret); + break; case SYSCALL_RENAME: LogMan::Msg::D("rename(\"%s\", \"%s\") = %ld", reinterpret_cast(Args->Argument[1]), reinterpret_cast(Args->Argument[2]), Ret); break; @@ -833,6 +836,7 @@ void x64SyscallHandler::RegisterSyscallHandlers() { {SYSCALL_GETDENTS, cvt(&FEXCore::HLE::Getdents), 3}, {SYSCALL_GETCWD, cvt(&FEXCore::HLE::Getcwd), 2}, {SYSCALL_CHDIR, cvt(&FEXCore::HLE::Chdir), 1}, + {SYSCALL_FCHDIR, cvt(&FEXCore::HLE::Fchdir), 1}, {SYSCALL_RENAME, cvt(&FEXCore::HLE::Rename), 2}, {SYSCALL_MKDIR, cvt(&FEXCore::HLE::Mkdir), 2}, {SYSCALL_RMDIR, cvt(&FEXCore::HLE::Rmdir), 1}, diff --git a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h index b0c953b43..c8f8b5541 100644 --- a/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h +++ b/External/FEXCore/Source/Interface/HLE/x64/Syscalls.h @@ -92,6 +92,7 @@ enum Syscalls { SYSCALL_GETDENTS = 78, ///< __NR_getdents SYSCALL_GETCWD = 79, ///< __NR_getcwd SYSCALL_CHDIR = 80, ///< __NR_chdir + SYSCALL_FCHDIR = 81, ///< __NR_fchdir SYSCALL_RENAME = 82, ///< __NR_rename SYSCALL_MKDIR = 83, ///< __NR_mkdir SYSCALL_RMDIR = 84, ///< __NR_rmdir