diff --git a/src/core/libraries/kernel/kernel.cpp b/src/core/libraries/kernel/kernel.cpp index 8555fe928..cc5dcd58f 100644 --- a/src/core/libraries/kernel/kernel.cpp +++ b/src/core/libraries/kernel/kernel.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include @@ -35,6 +35,7 @@ #include #include #include +#include #include "aio.h" namespace Libraries::Kernel { @@ -47,6 +48,8 @@ static std::condition_variable_any cv_asio_req; static std::atomic asio_requests; static std::jthread service_thread; +Core::EntryParams entry_params{}; + void KernelSignalRequest() { std::unique_lock lock{m_asio_req}; ++asio_requests; @@ -245,6 +248,14 @@ s32 PS4_SYSV_ABI sceKernelGetSystemSwVersion(SwVersionStruct* ret) { return ORBIS_OK; } +s32 PS4_SYSV_ABI getargc() { + return entry_params.argc; +} + +const char** PS4_SYSV_ABI getargv() { + return entry_params.argv; +} + void RegisterLib(Core::Loader::SymbolsResolver* sym) { service_thread = std::jthread{KernelServiceThread}; @@ -314,6 +325,8 @@ void RegisterLib(Core::Loader::SymbolsResolver* sym) { LIB_FUNCTION("4oXYe9Xmk0Q", "libkernel", 1, "libkernel", sceKernelGetGPI); LIB_FUNCTION("ca7v6Cxulzs", "libkernel", 1, "libkernel", sceKernelSetGPO); + LIB_FUNCTION("iKJMWrAumPE", "libkernel", 1, "libkernel", getargc); + LIB_FUNCTION("FJmglmTMdr4", "libkernel", 1, "libkernel", getargv); } } // namespace Libraries::Kernel diff --git a/src/core/libraries/kernel/kernel.h b/src/core/libraries/kernel/kernel.h index 212471ccb..6a3bd58b0 100644 --- a/src/core/libraries/kernel/kernel.h +++ b/src/core/libraries/kernel/kernel.h @@ -1,10 +1,11 @@ -// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once #include "common/types.h" #include "core/libraries/kernel/orbis_error.h" +#include "core/linker.h" namespace Core::Loader { class SymbolsResolver; @@ -17,6 +18,8 @@ s32 ErrnoToSceKernelError(s32 e); void SetPosixErrno(s32 e); s32* PS4_SYSV_ABI __Error(); +extern Core::EntryParams entry_params; + template struct OrbisWrapperImpl; diff --git a/src/core/linker.cpp b/src/core/linker.cpp index c1813b076..ad604b3f0 100644 --- a/src/core/linker.cpp +++ b/src/core/linker.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include "common/alignment.h" @@ -13,6 +13,7 @@ #include "core/aerolib/aerolib.h" #include "core/aerolib/stubs.h" #include "core/devtools/widget/module_list.h" +#include "core/libraries/kernel/kernel.h" #include "core/libraries/kernel/memory.h" #include "core/libraries/kernel/threads.h" #include "core/linker.h" @@ -135,7 +136,7 @@ void Linker::Execute(const std::vector args) { ASSERT_MSG(result == 0, "Unable to emulate libSceGnmDriver initialization"); // Start main module. - EntryParams params{}; + EntryParams& params = Libraries::Kernel::entry_params; params.argc = 1; params.argv[0] = "eboot.bin"; if (!args.empty()) { diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index b63a7abf2..99b5ea971 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project +// SPDX-FileCopyrightText: Copyright 2025 shadPS4 Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #pragma once @@ -17,10 +17,6 @@ #include "video_core/texture_cache/sampler.h" #include "video_core/texture_cache/tile_manager.h" -namespace Core::Libraries::VideoOut { -struct BufferAttributeGroup; -} - namespace VideoCore { class BufferCache;