From 43773d12d9231dacc191bb9e4c84245e2085442e Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Thu, 16 May 2024 20:09:08 +0300 Subject: [PATCH 1/6] added scePthreadEqual --- src/core/libraries/kernel/thread_management.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/core/libraries/kernel/thread_management.cpp b/src/core/libraries/kernel/thread_management.cpp index 95f7b35b..7bfc913e 100644 --- a/src/core/libraries/kernel/thread_management.cpp +++ b/src/core/libraries/kernel/thread_management.cpp @@ -987,6 +987,11 @@ int PS4_SYSV_ABI scePthreadMutexTrylock(ScePthreadMutex* mutex) { } } + +int PS4_SYSV_ABI scePthreadEqual(ScePthread thread1, ScePthread thread2) { + return (thread1 == thread2 ? 1 : 0); +} + void pthreadSymbolsRegister(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("4+h9EzwKF4I", "libkernel", 1, "libkernel", 1, 1, scePthreadAttrSetschedpolicy); LIB_FUNCTION("-Wreprtu0Qs", "libkernel", 1, "libkernel", 1, 1, scePthreadAttrSetdetachstate); @@ -995,6 +1000,7 @@ void pthreadSymbolsRegister(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("nsYoNRywwNg", "libkernel", 1, "libkernel", 1, 1, scePthreadAttrInit); LIB_FUNCTION("62KCwEMmzcM", "libkernel", 1, "libkernel", 1, 1, scePthreadAttrDestroy); LIB_FUNCTION("4qGrR6eoP9Y", "libkernel", 1, "libkernel", 1, 1, scePthreadDetach); + LIB_FUNCTION("3PtV6p3QNX4", "libkernel", 1, "libkernel", 1, 1, scePthreadEqual); LIB_FUNCTION("aI+OeCz8xrQ", "libkernel", 1, "libkernel", 1, 1, scePthreadSelf); LIB_FUNCTION("EotR8a3ASf4", "libkernel", 1, "libkernel", 1, 1, pthread_self); From cc98b11860f9f0eb506974f80dfb3b619db18c9b Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Thu, 16 May 2024 20:10:57 +0300 Subject: [PATCH 2/6] clang format --- src/core/libraries/kernel/thread_management.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/core/libraries/kernel/thread_management.cpp b/src/core/libraries/kernel/thread_management.cpp index 7bfc913e..42cb2cbb 100644 --- a/src/core/libraries/kernel/thread_management.cpp +++ b/src/core/libraries/kernel/thread_management.cpp @@ -987,7 +987,6 @@ int PS4_SYSV_ABI scePthreadMutexTrylock(ScePthreadMutex* mutex) { } } - int PS4_SYSV_ABI scePthreadEqual(ScePthread thread1, ScePthread thread2) { return (thread1 == thread2 ? 1 : 0); } From 4b5e2e80fc839266847edad0a0b53670ea661013 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Thu, 16 May 2024 23:24:51 +0300 Subject: [PATCH 3/6] added sceKernelGetCompiledSdkVersion (which return games system version ) --- src/core/libraries/kernel/libkernel.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/core/libraries/kernel/libkernel.cpp b/src/core/libraries/kernel/libkernel.cpp index 3aced046..fa06f209 100644 --- a/src/core/libraries/kernel/libkernel.cpp +++ b/src/core/libraries/kernel/libkernel.cpp @@ -23,6 +23,7 @@ #else #include #endif +#include namespace Libraries::Kernel { @@ -181,6 +182,12 @@ int PS4_SYSV_ABI sceKernelConvertUtcToLocaltime(time_t time, time_t* local_time, return ORBIS_OK; } +int PS4_SYSV_ABI sceKernelGetCompiledSdkVersion() { + auto* param_sfo = Common::Singleton::Instance(); + int version = param_sfo->GetInteger("SYSTEM_VER"); + LOG_INFO(Kernel, "returned system version = {:#x}", version); + return version; +} void LibKernel_Register(Core::Loader::SymbolsResolver* sym) { // obj LIB_OBJ("f7uOxY9mM1U", "libkernel", 1, "libkernel", 1, 1, &g_stack_chk_guard); @@ -207,6 +214,7 @@ void LibKernel_Register(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("YSHRBRLn2pI", "libkernel", 1, "libkernel", 1, 1, _writev); LIB_FUNCTION("959qrazPIrg", "libkernel", 1, "libkernel", 1, 1, sceKernelGetProcParam); LIB_FUNCTION("-o5uEDpN+oY", "libkernel", 1, "libkernel", 1, 1, sceKernelConvertUtcToLocaltime); + LIB_FUNCTION("WB66evu8bsU", "libkernel", 1, "libkernel", 1, 1, sceKernelGetCompiledSdkVersion); Libraries::Kernel::fileSystemSymbolsRegister(sym); Libraries::Kernel::timeSymbolsRegister(sym); From 42fb9f6473235a6752fdd01d6fbf38c03dbd49ac Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Fri, 17 May 2024 08:01:02 +0300 Subject: [PATCH 4/6] fixed sceKernelGetCompiledSdkVersion thanks raziel1000 --- src/core/libraries/kernel/libkernel.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/core/libraries/kernel/libkernel.cpp b/src/core/libraries/kernel/libkernel.cpp index fa06f209..48390e8f 100644 --- a/src/core/libraries/kernel/libkernel.cpp +++ b/src/core/libraries/kernel/libkernel.cpp @@ -182,11 +182,12 @@ int PS4_SYSV_ABI sceKernelConvertUtcToLocaltime(time_t time, time_t* local_time, return ORBIS_OK; } -int PS4_SYSV_ABI sceKernelGetCompiledSdkVersion() { +int PS4_SYSV_ABI sceKernelGetCompiledSdkVersion(int* ver) { auto* param_sfo = Common::Singleton::Instance(); int version = param_sfo->GetInteger("SYSTEM_VER"); LOG_INFO(Kernel, "returned system version = {:#x}", version); - return version; + *ver = version; + return ORBIS_OK; } void LibKernel_Register(Core::Loader::SymbolsResolver* sym) { // obj From 67c1772771b4050d738633cb977093c503e56a0b Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Fri, 17 May 2024 22:53:02 +0300 Subject: [PATCH 5/6] added _read in libkernel --- src/core/libraries/kernel/libkernel.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/core/libraries/kernel/libkernel.cpp b/src/core/libraries/kernel/libkernel.cpp index 48390e8f..003e45e1 100644 --- a/src/core/libraries/kernel/libkernel.cpp +++ b/src/core/libraries/kernel/libkernel.cpp @@ -189,6 +189,14 @@ int PS4_SYSV_ABI sceKernelGetCompiledSdkVersion(int* ver) { *ver = version; return ORBIS_OK; } + +s64 PS4_SYSV_ABI ps4__read(int d, void* buf, u64 nbytes) { + ASSERT_MSG(d == 0, "d is not 0!"); + + return static_cast( + strlen(std::fgets(static_cast(buf), static_cast(nbytes), stdin))); +} + void LibKernel_Register(Core::Loader::SymbolsResolver* sym) { // obj LIB_OBJ("f7uOxY9mM1U", "libkernel", 1, "libkernel", 1, 1, &g_stack_chk_guard); @@ -216,6 +224,7 @@ void LibKernel_Register(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("959qrazPIrg", "libkernel", 1, "libkernel", 1, 1, sceKernelGetProcParam); LIB_FUNCTION("-o5uEDpN+oY", "libkernel", 1, "libkernel", 1, 1, sceKernelConvertUtcToLocaltime); LIB_FUNCTION("WB66evu8bsU", "libkernel", 1, "libkernel", 1, 1, sceKernelGetCompiledSdkVersion); + LIB_FUNCTION("DRuBt2pvICk", "libkernel", 1, "libkernel", 1, 1, ps4__read); Libraries::Kernel::fileSystemSymbolsRegister(sym); Libraries::Kernel::timeSymbolsRegister(sym); From 0b8baedab72d7453722a41d638789e2e659800b0 Mon Sep 17 00:00:00 2001 From: georgemoralis Date: Sat, 18 May 2024 10:02:40 +0300 Subject: [PATCH 6/6] improved sceKernelWaitEqueue --- src/core/libraries/kernel/event_queues.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/core/libraries/kernel/event_queues.cpp b/src/core/libraries/kernel/event_queues.cpp index d8d3bfdf..0949ea33 100644 --- a/src/core/libraries/kernel/event_queues.cpp +++ b/src/core/libraries/kernel/event_queues.cpp @@ -64,13 +64,17 @@ int PS4_SYSV_ABI sceKernelWaitEqueue(SceKernelEqueue eq, SceKernelEvent* ev, int if (timo != nullptr) { // Only events that have already arrived at the time of this function call can be received if (*timo == 0) { - UNREACHABLE(); + *out = eq->getTriggeredEvents(ev, num); } else { // Wait until an event arrives with timing out - UNREACHABLE(); + *out = eq->waitForEvents(ev, num, *timo); } } + if (*out == 0) { + return ORBIS_KERNEL_ERROR_ETIMEDOUT; + } + return ORBIS_OK; }