diff --git a/src/core/libraries/kernel/kernel.cpp b/src/core/libraries/kernel/kernel.cpp index e392506d1..054f34c15 100644 --- a/src/core/libraries/kernel/kernel.cpp +++ b/src/core/libraries/kernel/kernel.cpp @@ -23,6 +23,7 @@ #include "core/libraries/kernel/process.h" #include "core/libraries/kernel/threads.h" #include "core/libraries/kernel/threads/exception.h" +#include "core/libraries/kernel/threads/pthread.h" #include "core/libraries/kernel/time.h" #include "core/libraries/libs.h" #include "core/libraries/network/sys_net.h" @@ -256,6 +257,18 @@ const char** PS4_SYSV_ABI getargv() { return entry_params.argv; } +s32 PS4_SYSV_ABI get_authinfo(int pid, AuthInfoData* p2) { + LOG_WARNING(Lib_Kernel, "(STUBBED) called, pid: {}", pid); + if ((pid != 0) && (pid != GLOBAL_PID)) { + *Kernel::__Error() = POSIX_ESRCH; + return -1; + } + + *p2 = {}; + p2->caps[0] = 0x2000000000000000; + return ORBIS_OK; +} + void RegisterLib(Core::Loader::SymbolsResolver* sym) { service_thread = std::jthread{KernelServiceThread}; @@ -273,6 +286,7 @@ void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_OBJ("f7uOxY9mM1U", "libkernel", 1, "libkernel", &g_stack_chk_guard); LIB_FUNCTION("D4yla3vx4tY", "libkernel", 1, "libkernel", sceKernelError); LIB_FUNCTION("Mv1zUObHvXI", "libkernel", 1, "libkernel", sceKernelGetSystemSwVersion); + LIB_FUNCTION("igMefp4SAv0", "libkernel", 1, "libkernel", get_authinfo); LIB_FUNCTION("PfccT7qURYE", "libkernel", 1, "libkernel", kernel_ioctl); LIB_FUNCTION("wW+k21cmbwQ", "libkernel", 1, "libkernel", kernel_ioctl); LIB_FUNCTION("JGfTMBOdUJo", "libkernel", 1, "libkernel", sceKernelGetFsSandboxRandomWord); diff --git a/src/core/libraries/kernel/kernel.h b/src/core/libraries/kernel/kernel.h index 6a3bd58b0..74c457dc5 100644 --- a/src/core/libraries/kernel/kernel.h +++ b/src/core/libraries/kernel/kernel.h @@ -44,6 +44,13 @@ struct SwVersionStruct { u32 hex_representation; }; +struct AuthInfoData { + u64 paid; + u64 caps[4]; + u64 attrs[4]; + u64 ucred[8]; +}; + void RegisterLib(Core::Loader::SymbolsResolver* sym); } // namespace Libraries::Kernel diff --git a/src/core/libraries/kernel/threads/pthread.cpp b/src/core/libraries/kernel/threads/pthread.cpp index ccf1ead9c..09e8b9558 100644 --- a/src/core/libraries/kernel/threads/pthread.cpp +++ b/src/core/libraries/kernel/threads/pthread.cpp @@ -337,7 +337,7 @@ void PS4_SYSV_ABI sched_yield() { } int PS4_SYSV_ABI posix_getpid() { - return g_curthread->tid; + return GLOBAL_PID; } int PS4_SYSV_ABI posix_pthread_once(PthreadOnce* once_control, diff --git a/src/core/libraries/kernel/threads/pthread.h b/src/core/libraries/kernel/threads/pthread.h index a285c6caf..cc1cb3829 100644 --- a/src/core/libraries/kernel/threads/pthread.h +++ b/src/core/libraries/kernel/threads/pthread.h @@ -16,6 +16,8 @@ #include "core/thread.h" #include "core/tls.h" +#define GLOBAL_PID 0xBAD1 + namespace Core::Loader { class SymbolsResolver; }