From f6f3cedc429f9f5a3b72ca609376bb285f0ad475 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Fri, 7 Jun 2024 08:35:26 +0300 Subject: [PATCH] added dummy rwlock --- CMakeLists.txt | 2 + .../libraries/kernel/thread_management.cpp | 4 + .../libraries/kernel/threads/kernel_threads.h | 51 ++++ .../kernel/threads/kernel_threads_rwlock.cpp | 244 ++++++++++++++++++ 4 files changed, 301 insertions(+) create mode 100644 src/core/libraries/kernel/threads/kernel_threads.h create mode 100644 src/core/libraries/kernel/threads/kernel_threads_rwlock.cpp diff --git a/CMakeLists.txt b/CMakeLists.txt index ba180f89..113c9cf7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -105,6 +105,8 @@ set(KERNEL_LIB src/core/libraries/kernel/event_flag/event_flag.h src/core/libraries/kernel/event_flag/event_flag_obj.cpp src/core/libraries/kernel/event_flag/event_flag_obj.h + src/core/libraries/kernel/threads/kernel_threads.h + src/core/libraries/kernel/threads/kernel_threads_rwlock.cpp src/core/libraries/kernel/cpu_management.cpp src/core/libraries/kernel/cpu_management.h src/core/libraries/kernel/event_queue.cpp diff --git a/src/core/libraries/kernel/thread_management.cpp b/src/core/libraries/kernel/thread_management.cpp index aa51c635..be2eeaee 100644 --- a/src/core/libraries/kernel/thread_management.cpp +++ b/src/core/libraries/kernel/thread_management.cpp @@ -14,6 +14,7 @@ #ifdef _WIN64 #include #endif +#include "core/libraries/kernel/threads/kernel_threads.h" namespace Libraries::Kernel { @@ -1091,6 +1092,9 @@ void pthreadSymbolsRegister(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("7H0iTOciTLo", "libkernel", 1, "libkernel", 1, 1, posix_pthread_mutex_lock); LIB_FUNCTION("2Z+PpY6CaJg", "libkernel", 1, "libkernel", 1, 1, posix_pthread_mutex_unlock); LIB_FUNCTION("mkx2fVhNMsg", "libkernel", 1, "libkernel", 1, 1, posix_pthread_cond_broadcast); + + // libs + ThreadsRwlockSymbolsRegister(sym); } } // namespace Libraries::Kernel diff --git a/src/core/libraries/kernel/threads/kernel_threads.h b/src/core/libraries/kernel/threads/kernel_threads.h new file mode 100644 index 00000000..24d60133 --- /dev/null +++ b/src/core/libraries/kernel/threads/kernel_threads.h @@ -0,0 +1,51 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include "core/libraries/kernel/thread_management.h" + +namespace Core::Loader { +class SymbolsResolver; +} + +namespace Libraries::Kernel { +/**** + * rwlock calls + */ +int PS4_SYSV_ABI posix_pthread_rwlock_destroy(); +int PS4_SYSV_ABI posix_pthread_rwlock_init(); +int PS4_SYSV_ABI posix_pthread_rwlock_rdlock(); +int PS4_SYSV_ABI posix_pthread_rwlock_reltimedrdlock_np(); +int PS4_SYSV_ABI posix_pthread_rwlock_reltimedwrlock_np(); +int PS4_SYSV_ABI posix_pthread_rwlock_setname_np(); +int PS4_SYSV_ABI posix_pthread_rwlock_timedrdlock(); +int PS4_SYSV_ABI posix_pthread_rwlock_timedwrlock(); +int PS4_SYSV_ABI posix_pthread_rwlock_tryrdlock(); +int PS4_SYSV_ABI posix_pthread_rwlock_trywrlock(); +int PS4_SYSV_ABI posix_pthread_rwlock_unlock(); +int PS4_SYSV_ABI posix_pthread_rwlock_wrlock(); +int PS4_SYSV_ABI posix_pthread_rwlockattr_destroy(); +int PS4_SYSV_ABI posix_pthread_rwlockattr_getpshared(); +int PS4_SYSV_ABI posix_pthread_rwlockattr_gettype_np(); +int PS4_SYSV_ABI posix_pthread_rwlockattr_init(); +int PS4_SYSV_ABI posix_pthread_rwlockattr_setpshared(); +int PS4_SYSV_ABI posix_pthread_rwlockattr_settype_np(); +int PS4_SYSV_ABI scePthreadRwlockattrDestroy(); +int PS4_SYSV_ABI scePthreadRwlockattrGetpshared(); +int PS4_SYSV_ABI scePthreadRwlockattrGettype(); +int PS4_SYSV_ABI scePthreadRwlockattrInit(); +int PS4_SYSV_ABI scePthreadRwlockattrSetpshared(); +int PS4_SYSV_ABI scePthreadRwlockattrSettype(); +int PS4_SYSV_ABI scePthreadRwlockDestroy(); +int PS4_SYSV_ABI scePthreadRwlockInit(); +int PS4_SYSV_ABI scePthreadRwlockRdlock(); +int PS4_SYSV_ABI scePthreadRwlockTimedrdlock(); +int PS4_SYSV_ABI scePthreadRwlockTimedwrlock(); +int PS4_SYSV_ABI scePthreadRwlockTryrdlock(); +int PS4_SYSV_ABI scePthreadRwlockTrywrlock(); +int PS4_SYSV_ABI scePthreadRwlockUnlock(); +int PS4_SYSV_ABI scePthreadRwlockWrlock(); + +void ThreadsRwlockSymbolsRegister(Core::Loader::SymbolsResolver* sym); +} // namespace Libraries::Kernel \ No newline at end of file diff --git a/src/core/libraries/kernel/threads/kernel_threads_rwlock.cpp b/src/core/libraries/kernel/threads/kernel_threads_rwlock.cpp new file mode 100644 index 00000000..d5e81a1d --- /dev/null +++ b/src/core/libraries/kernel/threads/kernel_threads_rwlock.cpp @@ -0,0 +1,244 @@ +// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/logging/log.h" +#include "core/libraries/error_codes.h" +#include "core/libraries/libs.h" +#include "kernel_threads.h" + +namespace Libraries::Kernel { + +int PS4_SYSV_ABI posix_pthread_rwlock_destroy() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_init() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_rdlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_reltimedrdlock_np() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_reltimedwrlock_np() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_setname_np() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_timedrdlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_timedwrlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_tryrdlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_trywrlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_unlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlock_wrlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlockattr_destroy() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlockattr_getpshared() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlockattr_gettype_np() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlockattr_init() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlockattr_setpshared() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI posix_pthread_rwlockattr_settype_np() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockattrDestroy() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockattrGetpshared() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockattrGettype() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockattrInit() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockattrSetpshared() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockattrSettype() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockDestroy() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockInit() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockRdlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockTimedrdlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockTimedwrlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockTryrdlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockTrywrlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockUnlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +int PS4_SYSV_ABI scePthreadRwlockWrlock() { + LOG_ERROR(Kernel_Pthread, "(STUBBED) called"); + return ORBIS_OK; +} + +void ThreadsRwlockSymbolsRegister(Core::Loader::SymbolsResolver* sym) { + LIB_FUNCTION("1471ajPzxh0", "libkernel", 1, "libkernel", 1, 1, posix_pthread_rwlock_destroy); + LIB_FUNCTION("ytQULN-nhL4", "libkernel", 1, "libkernel", 1, 1, posix_pthread_rwlock_init); + LIB_FUNCTION("iGjsr1WAtI0", "libkernel", 1, "libkernel", 1, 1, posix_pthread_rwlock_rdlock); + LIB_FUNCTION("dYv-+If2GPk", "libkernel", 1, "libkernel", 1, 1, + posix_pthread_rwlock_reltimedrdlock_np); + LIB_FUNCTION("RRnSj8h8VR4", "libkernel", 1, "libkernel", 1, 1, + posix_pthread_rwlock_reltimedwrlock_np); + LIB_FUNCTION("Uwxgnsi3xeM", "libkernel", 1, "libkernel", 1, 1, posix_pthread_rwlock_setname_np); + LIB_FUNCTION("lb8lnYo-o7k", "libkernel", 1, "libkernel", 1, 1, + posix_pthread_rwlock_timedrdlock); + LIB_FUNCTION("9zklzAl9CGM", "libkernel", 1, "libkernel", 1, 1, + posix_pthread_rwlock_timedwrlock); + LIB_FUNCTION("SFxTMOfuCkE", "libkernel", 1, "libkernel", 1, 1, posix_pthread_rwlock_tryrdlock); + LIB_FUNCTION("XhWHn6P5R7U", "libkernel", 1, "libkernel", 1, 1, posix_pthread_rwlock_trywrlock); + LIB_FUNCTION("EgmLo6EWgso", "libkernel", 1, "libkernel", 1, 1, posix_pthread_rwlock_unlock); + LIB_FUNCTION("sIlRvQqsN2Y", "libkernel", 1, "libkernel", 1, 1, posix_pthread_rwlock_wrlock); + LIB_FUNCTION("qsdmgXjqSgk", "libkernel", 1, "libkernel", 1, 1, + posix_pthread_rwlockattr_destroy); + LIB_FUNCTION("VqEMuCv-qHY", "libkernel", 1, "libkernel", 1, 1, + posix_pthread_rwlockattr_getpshared); + LIB_FUNCTION("l+bG5fsYkhg", "libkernel", 1, "libkernel", 1, 1, + posix_pthread_rwlockattr_gettype_np); + LIB_FUNCTION("xFebsA4YsFI", "libkernel", 1, "libkernel", 1, 1, posix_pthread_rwlockattr_init); + LIB_FUNCTION("OuKg+kRDD7U", "libkernel", 1, "libkernel", 1, 1, + posix_pthread_rwlockattr_setpshared); + LIB_FUNCTION("8NuOHiTr1Vw", "libkernel", 1, "libkernel", 1, 1, + posix_pthread_rwlockattr_settype_np); + LIB_FUNCTION("1471ajPzxh0", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_rwlock_destroy); + LIB_FUNCTION("ytQULN-nhL4", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_rwlock_init); + LIB_FUNCTION("iGjsr1WAtI0", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_rwlock_rdlock); + LIB_FUNCTION("lb8lnYo-o7k", "libScePosix", 1, "libkernel", 1, 1, + posix_pthread_rwlock_timedrdlock); + LIB_FUNCTION("9zklzAl9CGM", "libScePosix", 1, "libkernel", 1, 1, + posix_pthread_rwlock_timedwrlock); + LIB_FUNCTION("SFxTMOfuCkE", "libScePosix", 1, "libkernel", 1, 1, + posix_pthread_rwlock_tryrdlock); + LIB_FUNCTION("XhWHn6P5R7U", "libScePosix", 1, "libkernel", 1, 1, + posix_pthread_rwlock_trywrlock); + LIB_FUNCTION("EgmLo6EWgso", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_rwlock_unlock); + LIB_FUNCTION("sIlRvQqsN2Y", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_rwlock_wrlock); + LIB_FUNCTION("qsdmgXjqSgk", "libScePosix", 1, "libkernel", 1, 1, + posix_pthread_rwlockattr_destroy); + LIB_FUNCTION("VqEMuCv-qHY", "libScePosix", 1, "libkernel", 1, 1, + posix_pthread_rwlockattr_getpshared); + LIB_FUNCTION("l+bG5fsYkhg", "libScePosix", 1, "libkernel", 1, 1, + posix_pthread_rwlockattr_gettype_np); + LIB_FUNCTION("xFebsA4YsFI", "libScePosix", 1, "libkernel", 1, 1, posix_pthread_rwlockattr_init); + LIB_FUNCTION("OuKg+kRDD7U", "libScePosix", 1, "libkernel", 1, 1, + posix_pthread_rwlockattr_setpshared); + LIB_FUNCTION("8NuOHiTr1Vw", "libScePosix", 1, "libkernel", 1, 1, + posix_pthread_rwlockattr_settype_np); + LIB_FUNCTION("i2ifZ3fS2fo", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockattrDestroy); + LIB_FUNCTION("LcOZBHGqbFk", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockattrGetpshared); + LIB_FUNCTION("Kyls1ChFyrc", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockattrGettype); + LIB_FUNCTION("yOfGg-I1ZII", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockattrInit); + LIB_FUNCTION("-ZvQH18j10c", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockattrSetpshared); + LIB_FUNCTION("h-OifiouBd8", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockattrSettype); + LIB_FUNCTION("BB+kb08Tl9A", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockDestroy); + LIB_FUNCTION("6ULAa0fq4jA", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockInit); + LIB_FUNCTION("Ox9i0c7L5w0", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockRdlock); + LIB_FUNCTION("iPtZRWICjrM", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockTimedrdlock); + LIB_FUNCTION("adh--6nIqTk", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockTimedwrlock); + LIB_FUNCTION("XD3mDeybCnk", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockTryrdlock); + LIB_FUNCTION("bIHoZCTomsI", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockTrywrlock); + LIB_FUNCTION("+L98PIbGttk", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockUnlock); + LIB_FUNCTION("mqdNorrB+gI", "libkernel", 1, "libkernel", 1, 1, scePthreadRwlockWrlock); +} +} // namespace Libraries::Kernel \ No newline at end of file