From 563c5eaa2ed19a741de0a83eabe681583225307e Mon Sep 17 00:00:00 2001 From: DH Date: Mon, 30 Oct 2023 22:08:18 +0300 Subject: [PATCH] [rpcsx-os] add --system flag --- orbis-kernel/include/orbis/thread/Process.hpp | 1 + orbis-kernel/src/sys/sys_sysctl.cpp | 2 +- rpcsx-os/main.cpp | 8 ++++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/orbis-kernel/include/orbis/thread/Process.hpp b/orbis-kernel/include/orbis/thread/Process.hpp index 6fd7b49ed..fbcfc1c44 100644 --- a/orbis-kernel/include/orbis/thread/Process.hpp +++ b/orbis-kernel/include/orbis/thread/Process.hpp @@ -56,6 +56,7 @@ struct Process final { std::uint64_t nextTlsSlot = 1; std::uint64_t lastTlsOffset = 0; + bool isSystem = false; utils::RcIdMap evfMap; utils::RcIdMap semMap; diff --git a/orbis-kernel/src/sys/sys_sysctl.cpp b/orbis-kernel/src/sys/sys_sysctl.cpp index 1314da838..7debed486 100644 --- a/orbis-kernel/src/sys/sys_sysctl.cpp +++ b/orbis-kernel/src/sys/sys_sysctl.cpp @@ -139,7 +139,7 @@ orbis::SysResult orbis::sys___sysctl(Thread *thread, ptr name, // std::printf(" kern.14.35.%u\n", name[3]); app_info result{ .appType = 0, - // .unk5 = slong(0x80000000'00000000), + .unk5 = (thread->tproc->isSystem ? slong(0x80000000'00000000) : 0), }; return uwrite((ptr)old, result); diff --git a/rpcsx-os/main.cpp b/rpcsx-os/main.cpp index bb56fd332..cb3dc5e6c 100644 --- a/rpcsx-os/main.cpp +++ b/rpcsx-os/main.cpp @@ -561,6 +561,7 @@ int main(int argc, const char *argv[]) { bool enableAudio = false; bool asRoot = false; + bool isSystem = false; int argIndex = 1; while (argIndex < argc) { @@ -596,6 +597,12 @@ int main(int argc, const char *argv[]) { continue; } + if (argv[argIndex] == std::string_view("--system")) { + argIndex++; + isSystem = true; + continue; + } + if (argv[argIndex] == std::string_view("--override") || argv[argIndex] == std::string_view("-o")) { if (argc <= argIndex + 2) { @@ -704,6 +711,7 @@ int main(int argc, const char *argv[]) { initProcess->onSysEnter = onSysEnter; initProcess->onSysExit = onSysExit; initProcess->ops = &rx::procOpsTable; + initProcess->isSystem = isSystem; auto [baseId, mainThread] = initProcess->threadsMap.emplace(); mainThread->tproc = initProcess;