summaryrefslogtreecommitdiff
path: root/src/core/loader
diff options
context:
space:
mode:
authorGravatar bunnei2019-06-21 14:05:18 -0400
committerGravatar GitHub2019-06-21 14:05:18 -0400
commit96412848a9db0643198ea882824688f23dc19606 (patch)
tree2824eafaf4bc026cc3fc0ee498d1c5c623f3aa65 /src/core/loader
parentMerge pull request #2291 from DarkLordZach/homebrew-testing (diff)
parentloader: Move NSO module tracking to AppLoader (diff)
downloadyuzu-96412848a9db0643198ea882824688f23dc19606.tar.gz
yuzu-96412848a9db0643198ea882824688f23dc19606.tar.xz
yuzu-96412848a9db0643198ea882824688f23dc19606.zip
Merge pull request #2482 from DarkLordZach/prepo
core: Add detailed local reporting feature for development
Diffstat (limited to 'src/core/loader')
-rw-r--r--src/core/loader/deconstructed_rom_directory.cpp11
-rw-r--r--src/core/loader/deconstructed_rom_directory.h4
-rw-r--r--src/core/loader/loader.h6
-rw-r--r--src/core/loader/nax.cpp4
-rw-r--r--src/core/loader/nax.h2
-rw-r--r--src/core/loader/nca.cpp9
-rw-r--r--src/core/loader/nca.h2
-rw-r--r--src/core/loader/nso.cpp9
-rw-r--r--src/core/loader/nso.h5
-rw-r--r--src/core/loader/nsp.cpp4
-rw-r--r--src/core/loader/nsp.h2
-rw-r--r--src/core/loader/xci.cpp4
-rw-r--r--src/core/loader/xci.h2
13 files changed, 64 insertions, 0 deletions
diff --git a/src/core/loader/deconstructed_rom_directory.cpp b/src/core/loader/deconstructed_rom_directory.cpp
index 10b13fb1d..f9e88be2b 100644
--- a/src/core/loader/deconstructed_rom_directory.cpp
+++ b/src/core/loader/deconstructed_rom_directory.cpp
@@ -141,6 +141,7 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect
141 const FileSys::PatchManager pm(metadata.GetTitleID()); 141 const FileSys::PatchManager pm(metadata.GetTitleID());
142 142
143 // Load NSO modules 143 // Load NSO modules
144 modules.clear();
144 const VAddr base_address = process.VMManager().GetCodeRegionBaseAddress(); 145 const VAddr base_address = process.VMManager().GetCodeRegionBaseAddress();
145 VAddr next_load_addr = base_address; 146 VAddr next_load_addr = base_address;
146 for (const auto& module : {"rtld", "main", "subsdk0", "subsdk1", "subsdk2", "subsdk3", 147 for (const auto& module : {"rtld", "main", "subsdk0", "subsdk1", "subsdk2", "subsdk3",
@@ -159,6 +160,7 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect
159 } 160 }
160 161
161 next_load_addr = *tentative_next_load_addr; 162 next_load_addr = *tentative_next_load_addr;
163 modules.insert_or_assign(load_addr, module);
162 LOG_DEBUG(Loader, "loaded module {} @ 0x{:X}", module, load_addr); 164 LOG_DEBUG(Loader, "loaded module {} @ 0x{:X}", module, load_addr);
163 // Register module with GDBStub 165 // Register module with GDBStub
164 GDBStub::RegisterModule(module, load_addr, next_load_addr - 1, false); 166 GDBStub::RegisterModule(module, load_addr, next_load_addr - 1, false);
@@ -212,4 +214,13 @@ bool AppLoader_DeconstructedRomDirectory::IsRomFSUpdatable() const {
212 return false; 214 return false;
213} 215}
214 216
217ResultStatus AppLoader_DeconstructedRomDirectory::ReadNSOModules(Modules& modules) {
218 if (!is_loaded) {
219 return ResultStatus::ErrorNotInitialized;
220 }
221
222 modules = this->modules;
223 return ResultStatus::Success;
224}
225
215} // namespace Loader 226} // namespace Loader
diff --git a/src/core/loader/deconstructed_rom_directory.h b/src/core/loader/deconstructed_rom_directory.h
index 1a65c16a4..1c0a354a4 100644
--- a/src/core/loader/deconstructed_rom_directory.h
+++ b/src/core/loader/deconstructed_rom_directory.h
@@ -45,6 +45,8 @@ public:
45 ResultStatus ReadTitle(std::string& title) override; 45 ResultStatus ReadTitle(std::string& title) override;
46 bool IsRomFSUpdatable() const override; 46 bool IsRomFSUpdatable() const override;
47 47
48 ResultStatus ReadNSOModules(Modules& modules) override;
49
48private: 50private:
49 FileSys::ProgramMetadata metadata; 51 FileSys::ProgramMetadata metadata;
50 FileSys::VirtualFile romfs; 52 FileSys::VirtualFile romfs;
@@ -54,6 +56,8 @@ private:
54 std::string name; 56 std::string name;
55 u64 title_id{}; 57 u64 title_id{};
56 bool override_update; 58 bool override_update;
59
60 Modules modules;
57}; 61};
58 62
59} // namespace Loader 63} // namespace Loader
diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h
index 869406b75..8d3329202 100644
--- a/src/core/loader/loader.h
+++ b/src/core/loader/loader.h
@@ -267,6 +267,12 @@ public:
267 return ResultStatus::ErrorNotImplemented; 267 return ResultStatus::ErrorNotImplemented;
268 } 268 }
269 269
270 using Modules = std::map<VAddr, std::string>;
271
272 virtual ResultStatus ReadNSOModules(Modules& modules) {
273 return ResultStatus::ErrorNotImplemented;
274 }
275
270protected: 276protected:
271 FileSys::VirtualFile file; 277 FileSys::VirtualFile file;
272 bool is_loaded = false; 278 bool is_loaded = false;
diff --git a/src/core/loader/nax.cpp b/src/core/loader/nax.cpp
index 34efef09a..a152981a0 100644
--- a/src/core/loader/nax.cpp
+++ b/src/core/loader/nax.cpp
@@ -94,4 +94,8 @@ ResultStatus AppLoader_NAX::ReadLogo(std::vector<u8>& buffer) {
94 return nca_loader->ReadLogo(buffer); 94 return nca_loader->ReadLogo(buffer);
95} 95}
96 96
97ResultStatus AppLoader_NAX::ReadNSOModules(Modules& modules) {
98 return nca_loader->ReadNSOModules(modules);
99}
100
97} // namespace Loader 101} // namespace Loader
diff --git a/src/core/loader/nax.h b/src/core/loader/nax.h
index 00f1659c1..eaec9bf58 100644
--- a/src/core/loader/nax.h
+++ b/src/core/loader/nax.h
@@ -42,6 +42,8 @@ public:
42 ResultStatus ReadBanner(std::vector<u8>& buffer) override; 42 ResultStatus ReadBanner(std::vector<u8>& buffer) override;
43 ResultStatus ReadLogo(std::vector<u8>& buffer) override; 43 ResultStatus ReadLogo(std::vector<u8>& buffer) override;
44 44
45 ResultStatus ReadNSOModules(Modules& modules) override;
46
45private: 47private:
46 std::unique_ptr<FileSys::NAX> nax; 48 std::unique_ptr<FileSys::NAX> nax;
47 std::unique_ptr<AppLoader_NCA> nca_loader; 49 std::unique_ptr<AppLoader_NCA> nca_loader;
diff --git a/src/core/loader/nca.cpp b/src/core/loader/nca.cpp
index b3f8f1083..0f65fb637 100644
--- a/src/core/loader/nca.cpp
+++ b/src/core/loader/nca.cpp
@@ -105,4 +105,13 @@ ResultStatus AppLoader_NCA::ReadLogo(std::vector<u8>& buffer) {
105 buffer = logo->GetFile("NintendoLogo.png")->ReadAllBytes(); 105 buffer = logo->GetFile("NintendoLogo.png")->ReadAllBytes();
106 return ResultStatus::Success; 106 return ResultStatus::Success;
107} 107}
108
109ResultStatus AppLoader_NCA::ReadNSOModules(Modules& modules) {
110 if (directory_loader == nullptr) {
111 return ResultStatus::ErrorNotInitialized;
112 }
113
114 return directory_loader->ReadNSOModules(modules);
115}
116
108} // namespace Loader 117} // namespace Loader
diff --git a/src/core/loader/nca.h b/src/core/loader/nca.h
index 94f0ed677..e47dc0e47 100644
--- a/src/core/loader/nca.h
+++ b/src/core/loader/nca.h
@@ -42,6 +42,8 @@ public:
42 ResultStatus ReadBanner(std::vector<u8>& buffer) override; 42 ResultStatus ReadBanner(std::vector<u8>& buffer) override;
43 ResultStatus ReadLogo(std::vector<u8>& buffer) override; 43 ResultStatus ReadLogo(std::vector<u8>& buffer) override;
44 44
45 ResultStatus ReadNSOModules(Modules& modules) override;
46
45private: 47private:
46 std::unique_ptr<FileSys::NCA> nca; 48 std::unique_ptr<FileSys::NCA> nca;
47 std::unique_ptr<AppLoader_DeconstructedRomDirectory> directory_loader; 49 std::unique_ptr<AppLoader_DeconstructedRomDirectory> directory_loader;
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp
index 80090b792..29311404a 100644
--- a/src/core/loader/nso.cpp
+++ b/src/core/loader/nso.cpp
@@ -172,11 +172,15 @@ AppLoader_NSO::LoadResult AppLoader_NSO::Load(Kernel::Process& process) {
172 return {ResultStatus::ErrorAlreadyLoaded, {}}; 172 return {ResultStatus::ErrorAlreadyLoaded, {}};
173 } 173 }
174 174
175 modules.clear();
176
175 // Load module 177 // Load module
176 const VAddr base_address = process.VMManager().GetCodeRegionBaseAddress(); 178 const VAddr base_address = process.VMManager().GetCodeRegionBaseAddress();
177 if (!LoadModule(process, *file, base_address, true)) { 179 if (!LoadModule(process, *file, base_address, true)) {
178 return {ResultStatus::ErrorLoadingNSO, {}}; 180 return {ResultStatus::ErrorLoadingNSO, {}};
179 } 181 }
182
183 modules.insert_or_assign(base_address, file->GetName());
180 LOG_DEBUG(Loader, "loaded module {} @ 0x{:X}", file->GetName(), base_address); 184 LOG_DEBUG(Loader, "loaded module {} @ 0x{:X}", file->GetName(), base_address);
181 185
182 is_loaded = true; 186 is_loaded = true;
@@ -184,4 +188,9 @@ AppLoader_NSO::LoadResult AppLoader_NSO::Load(Kernel::Process& process) {
184 LoadParameters{Kernel::THREADPRIO_DEFAULT, Memory::DEFAULT_STACK_SIZE}}; 188 LoadParameters{Kernel::THREADPRIO_DEFAULT, Memory::DEFAULT_STACK_SIZE}};
185} 189}
186 190
191ResultStatus AppLoader_NSO::ReadNSOModules(Modules& modules) {
192 modules = this->modules;
193 return ResultStatus::Success;
194}
195
187} // namespace Loader 196} // namespace Loader
diff --git a/src/core/loader/nso.h b/src/core/loader/nso.h
index fdce9191c..58cbe162d 100644
--- a/src/core/loader/nso.h
+++ b/src/core/loader/nso.h
@@ -85,6 +85,11 @@ public:
85 std::optional<FileSys::PatchManager> pm = {}); 85 std::optional<FileSys::PatchManager> pm = {});
86 86
87 LoadResult Load(Kernel::Process& process) override; 87 LoadResult Load(Kernel::Process& process) override;
88
89 ResultStatus ReadNSOModules(Modules& modules) override;
90
91private:
92 Modules modules;
88}; 93};
89 94
90} // namespace Loader 95} // namespace Loader
diff --git a/src/core/loader/nsp.cpp b/src/core/loader/nsp.cpp
index ad56bbb38..3a22ec2c6 100644
--- a/src/core/loader/nsp.cpp
+++ b/src/core/loader/nsp.cpp
@@ -183,4 +183,8 @@ ResultStatus AppLoader_NSP::ReadLogo(std::vector<u8>& buffer) {
183 return secondary_loader->ReadLogo(buffer); 183 return secondary_loader->ReadLogo(buffer);
184} 184}
185 185
186ResultStatus AppLoader_NSP::ReadNSOModules(Modules& modules) {
187 return secondary_loader->ReadNSOModules(modules);
188}
189
186} // namespace Loader 190} // namespace Loader
diff --git a/src/core/loader/nsp.h b/src/core/loader/nsp.h
index 85e870bdf..868b028d3 100644
--- a/src/core/loader/nsp.h
+++ b/src/core/loader/nsp.h
@@ -49,6 +49,8 @@ public:
49 ResultStatus ReadBanner(std::vector<u8>& buffer) override; 49 ResultStatus ReadBanner(std::vector<u8>& buffer) override;
50 ResultStatus ReadLogo(std::vector<u8>& buffer) override; 50 ResultStatus ReadLogo(std::vector<u8>& buffer) override;
51 51
52 ResultStatus ReadNSOModules(Modules& modules) override;
53
52private: 54private:
53 std::unique_ptr<FileSys::NSP> nsp; 55 std::unique_ptr<FileSys::NSP> nsp;
54 std::unique_ptr<AppLoader> secondary_loader; 56 std::unique_ptr<AppLoader> secondary_loader;
diff --git a/src/core/loader/xci.cpp b/src/core/loader/xci.cpp
index 1e285a053..a5c4d3688 100644
--- a/src/core/loader/xci.cpp
+++ b/src/core/loader/xci.cpp
@@ -149,4 +149,8 @@ ResultStatus AppLoader_XCI::ReadLogo(std::vector<u8>& buffer) {
149 return nca_loader->ReadLogo(buffer); 149 return nca_loader->ReadLogo(buffer);
150} 150}
151 151
152ResultStatus AppLoader_XCI::ReadNSOModules(Modules& modules) {
153 return nca_loader->ReadNSOModules(modules);
154}
155
152} // namespace Loader 156} // namespace Loader
diff --git a/src/core/loader/xci.h b/src/core/loader/xci.h
index ae7145b14..618ae2f47 100644
--- a/src/core/loader/xci.h
+++ b/src/core/loader/xci.h
@@ -49,6 +49,8 @@ public:
49 ResultStatus ReadBanner(std::vector<u8>& buffer) override; 49 ResultStatus ReadBanner(std::vector<u8>& buffer) override;
50 ResultStatus ReadLogo(std::vector<u8>& buffer) override; 50 ResultStatus ReadLogo(std::vector<u8>& buffer) override;
51 51
52 ResultStatus ReadNSOModules(Modules& modules) override;
53
52private: 54private:
53 std::unique_ptr<FileSys::XCI> xci; 55 std::unique_ptr<FileSys::XCI> xci;
54 std::unique_ptr<AppLoader_NCA> nca_loader; 56 std::unique_ptr<AppLoader_NCA> nca_loader;