Added GetModuleList

This commit is contained in:
Nokk 2024-09-06 14:48:59 +10:00
parent bad3d5a68e
commit 070b4a82b4
3 changed files with 27 additions and 0 deletions

View file

@ -1,6 +1,7 @@
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <algorithm>
#include <chrono>
#include <thread>
@ -398,6 +399,24 @@ int PS4_SYSV_ABI posix_getpagesize() {
return 4096;
}
int PS4_SYSV_ABI sceKernelGetModuleList(Core::Module** pArray, size_t numArray, size_t* pActualNum) {
auto* linker = Common::Singleton<Core::Linker>::Instance();
int numModules = linker->GetNumberModules();
for (int i = 0; i < std::min(static_cast<int>(numArray), numModules); ++i)
{
auto m = linker->GetModule(i);
if (!m)
{
*pActualNum = i;
break;
}
pArray[i] = m;
}
return ORBIS_OK;
}
void LibKernel_Register(Core::Loader::SymbolsResolver* sym) {
service_thread = std::jthread{KernelServiceThread};
@ -443,6 +462,8 @@ void LibKernel_Register(Core::Loader::SymbolsResolver* sym) {
LIB_FUNCTION("kBJzF8x4SyE", "libkernel", 1, "libkernel", 1, 1, sceKernelBatchMap2);
LIB_FUNCTION("DGMG3JshrZU", "libkernel", 1, "libkernel", 1, 1, sceKernelSetVirtualRangeName);
LIB_FUNCTION("IuxnUuXk6Bg", "libkernel", 1, "libkernel", 1, 1, sceKernelGetModuleList);
// equeue
LIB_FUNCTION("D0OdFMjp46I", "libkernel", 1, "libkernel", 1, 1, sceKernelCreateEqueue);
LIB_FUNCTION("jpFjmgAC5AE", "libkernel", 1, "libkernel", 1, 1, sceKernelDeleteEqueue);

View file

@ -6,6 +6,7 @@
#include <sys/types.h>
#include "common/types.h"
#include "core/module.h"
namespace Core::Loader {
class SymbolsResolver;
@ -34,6 +35,7 @@ typedef struct {
int* PS4_SYSV_ABI __Error();
int PS4_SYSV_ABI sceKernelGetCompiledSdkVersion(int* ver);
int PS4_SYSV_ABI sceKernelGetModuleList(Core::Module** pArray, size_t numArray, size_t* pActualNum);
void LibKernel_Register(Core::Loader::SymbolsResolver* sym);

View file

@ -79,6 +79,10 @@ public:
return m_modules.at(index).get();
}
int GetNumberModules() const {
return m_modules.size();
}
void RelocateAnyImports(Module* m) {
Relocate(m);
for (auto& module : m_modules) {