diff --git a/src/core/libraries/kernel/process.cpp b/src/core/libraries/kernel/process.cpp index 8a37e78d5..e22509a3a 100644 --- a/src/core/libraries/kernel/process.cpp +++ b/src/core/libraries/kernel/process.cpp @@ -103,7 +103,7 @@ s32 PS4_SYSV_ABI sceKernelGetModuleInfoForUnwind(VAddr addr, s32 flags, auto* linker = Common::Singleton::Instance(); auto* module = linker->FindByAddress(addr); if (!module) { - return ORBIS_KERNEL_ERROR_EFAULT; + return ORBIS_KERNEL_ERROR_ESRCH; } const auto mod_info = module->GetModuleInfoEx(); @@ -118,11 +118,23 @@ s32 PS4_SYSV_ABI sceKernelGetModuleInfoForUnwind(VAddr addr, s32 flags, return ORBIS_OK; } -int PS4_SYSV_ABI sceKernelGetModuleInfoFromAddr(VAddr addr, int flags, +s32 PS4_SYSV_ABI sceKernelGetModuleInfoFromAddr(VAddr addr, s32 flags, Core::OrbisKernelModuleInfoEx* info) { + if (flags >= 3) { + std::memset(info, 0, sizeof(Core::OrbisKernelModuleInfoEx)); + return ORBIS_KERNEL_ERROR_EINVAL; + } + if (info == nullptr) { + return ORBIS_KERNEL_ERROR_EFAULT; + } + LOG_INFO(Lib_Kernel, "called addr = {:#x}, flags = {:#x}", addr, flags); auto* linker = Common::Singleton::Instance(); auto* module = linker->FindByAddress(addr); + if (!module) { + return ORBIS_KERNEL_ERROR_ESRCH; + } + *info = module->GetModuleInfoEx(); return ORBIS_OK; }