From 6257c0f76dc70820a2970b7452b5f3bce02024aa Mon Sep 17 00:00:00 2001 From: DH Date: Mon, 25 Nov 2024 19:06:56 +0300 Subject: [PATCH] ps4: proto fw tweaks --- orbis-kernel/include/orbis/module/Module.hpp | 1 + orbis-kernel/src/sys/sys_sce.cpp | 2 +- orbis-kernel/src/sys/sys_sysctl.cpp | 5 +++++ rpcsx/linker.cpp | 5 ++++- 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/orbis-kernel/include/orbis/module/Module.hpp b/orbis-kernel/include/orbis/module/Module.hpp index 70114029b..8758d39a8 100644 --- a/orbis-kernel/include/orbis/module/Module.hpp +++ b/orbis-kernel/include/orbis/module/Module.hpp @@ -17,6 +17,7 @@ struct Process; enum class DynType : std::uint8_t { None, + FreeBsd, Ps4, Ps5, }; diff --git a/orbis-kernel/src/sys/sys_sce.cpp b/orbis-kernel/src/sys/sys_sce.cpp index 857168508..ec5e69811 100644 --- a/orbis-kernel/src/sys/sys_sce.cpp +++ b/orbis-kernel/src/sys/sys_sce.cpp @@ -201,7 +201,7 @@ orbis::SysResult orbis::sys_dl_get_info(Thread *thread /* TODO */) { return ErrorCode::NOSYS; } orbis::SysResult orbis::sys_dl_notify_event(Thread *thread /* TODO */) { - return ErrorCode::NOSYS; + return {}; } orbis::SysResult orbis::sys_evf_create(Thread *thread, ptr name, sint attrs, uint64_t initPattern) { diff --git a/orbis-kernel/src/sys/sys_sysctl.cpp b/orbis-kernel/src/sys/sys_sysctl.cpp index 6c29d1fca..ab7d162f5 100644 --- a/orbis-kernel/src/sys/sys_sysctl.cpp +++ b/orbis-kernel/src/sys/sys_sysctl.cpp @@ -92,6 +92,11 @@ SysResult kern_sysctl(Thread *thread, ptr name, uint namelen, // 4.17.0.0.3.0 if (name[0] == net && name[1] == 17 && name[2] == 0 && name[3] == 0 && name[4] == 3 && name[5] == 0) { + if (g_context.fwSdkVersion == 0) { + // proto fw + return {}; + } + return ErrorCode::OPNOTSUPP; } } diff --git a/rpcsx/linker.cpp b/rpcsx/linker.cpp index 3d3448203..e9b8144bf 100644 --- a/rpcsx/linker.cpp +++ b/rpcsx/linker.cpp @@ -806,7 +806,10 @@ Ref rx::linker::loadModule(std::span image, std::fprintf(stderr, "unexpected import type\n"); std::abort(); } - if (hasPs4Dyn) { + + if (!hasPs4Dyn && !hasPs5Dyn && interpPhdrIndex >= 0) { + result->dynType = orbis::DynType::FreeBsd; + } else if (hasPs4Dyn) { result->dynType = orbis::DynType::Ps4; } else if (hasPs5Dyn) { result->dynType = orbis::DynType::Ps5;