diff --git a/src/core/core.cpp b/src/core/core.cpp index 7106151bd8..96ba6a569d 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -270,6 +270,8 @@ struct System::Impl { /// Telemetry session for this emulation session std::unique_ptr telemetry_session; + std::map> modules; + ResultStatus status = ResultStatus::Success; std::string status_details = ""; @@ -509,6 +511,14 @@ void System::ClearContentProvider(FileSys::ContentProviderUnionSlot slot) { impl->content_provider->ClearSlot(slot); } +void System::RegisterNSOModule(std::string name, VAddr start_address) { + impl->modules.insert_or_assign(start_address, name); +} + +const std::map>& System::GetRegisteredNSOModules() const { + return impl->modules; +} + System::ResultStatus System::Init(Frontend::EmuWindow& emu_window) { return impl->Init(*this, emu_window); } diff --git a/src/core/core.h b/src/core/core.h index a9a756a4c0..10542ba211 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -8,6 +8,7 @@ #include #include +#include #include "common/common_types.h" #include "core/file_sys/vfs_types.h" #include "core/hle/kernel/object.h" @@ -285,6 +286,10 @@ public: void ClearContentProvider(FileSys::ContentProviderUnionSlot slot); + void RegisterNSOModule(std::string name, VAddr start_address); + + const std::map>& GetRegisteredNSOModules() const; + private: System(); diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp index 8592b1f440..7beeaaff3f 100644 --- a/src/core/loader/nso.cpp +++ b/src/core/loader/nso.cpp @@ -164,6 +164,9 @@ std::optional AppLoader_NSO::LoadModule(Kernel::Process& process, // Register module with GDBStub GDBStub::RegisterModule(file.GetName(), load_base, load_base); + // Register module for ARMInterface with System + Core::System::GetInstance().RegisterNSOModule(file.GetName(), load_base); + return load_base + image_size; }