forked from eden-emu/eden
		
	loader: Check error on NPDM load, use TID for CodeSet
This commit is contained in:
		
							parent
							
								
									013d8828a3
								
							
						
					
					
						commit
						d5e38de1ec
					
				
					 3 changed files with 10 additions and 6 deletions
				
			
		|  | @ -114,7 +114,11 @@ ResultStatus AppLoader_DeconstructedRomDirectory::Load( | ||||||
| 
 | 
 | ||||||
|     const std::string directory = filepath.substr(0, filepath.find_last_of("/\\")) + DIR_SEP; |     const std::string directory = filepath.substr(0, filepath.find_last_of("/\\")) + DIR_SEP; | ||||||
|     const std::string npdm_path = directory + DIR_SEP + "main.npdm"; |     const std::string npdm_path = directory + DIR_SEP + "main.npdm"; | ||||||
|     metadata.Load(npdm_path); | 
 | ||||||
|  |     ResultStatus result = metadata.Load(npdm_path); | ||||||
|  |     if (result != ResultStatus::Success) { | ||||||
|  |         return result; | ||||||
|  |     } | ||||||
|     metadata.Print(); |     metadata.Print(); | ||||||
| 
 | 
 | ||||||
|     // Load NSO modules
 |     // Load NSO modules
 | ||||||
|  | @ -123,7 +127,7 @@ ResultStatus AppLoader_DeconstructedRomDirectory::Load( | ||||||
|                                "subsdk4", "subsdk5", "subsdk6", "subsdk7", "sdk"}) { |                                "subsdk4", "subsdk5", "subsdk6", "subsdk7", "sdk"}) { | ||||||
|         const std::string path = directory + DIR_SEP + module; |         const std::string path = directory + DIR_SEP + module; | ||||||
|         const VAddr load_addr = next_load_addr; |         const VAddr load_addr = next_load_addr; | ||||||
|         next_load_addr = AppLoader_NSO::LoadModule(path, load_addr); |         next_load_addr = AppLoader_NSO::LoadModule(path, load_addr, metadata.GetTitleID()); | ||||||
|         if (next_load_addr) { |         if (next_load_addr) { | ||||||
|             LOG_DEBUG(Loader, "loaded module %s @ 0x%" PRIx64, module, load_addr); |             LOG_DEBUG(Loader, "loaded module %s @ 0x%" PRIx64, module, load_addr); | ||||||
|         } else { |         } else { | ||||||
|  |  | ||||||
|  | @ -92,7 +92,7 @@ static constexpr u32 PageAlignSize(u32 size) { | ||||||
|     return (size + Memory::PAGE_MASK) & ~Memory::PAGE_MASK; |     return (size + Memory::PAGE_MASK) & ~Memory::PAGE_MASK; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| VAddr AppLoader_NSO::LoadModule(const std::string& path, VAddr load_base) { | VAddr AppLoader_NSO::LoadModule(const std::string& path, VAddr load_base, u64 tid) { | ||||||
|     FileUtil::IOFile file(path, "rb"); |     FileUtil::IOFile file(path, "rb"); | ||||||
|     if (!file.IsOpen()) { |     if (!file.IsOpen()) { | ||||||
|         return {}; |         return {}; | ||||||
|  | @ -109,7 +109,7 @@ VAddr AppLoader_NSO::LoadModule(const std::string& path, VAddr load_base) { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Build program image
 |     // Build program image
 | ||||||
|     Kernel::SharedPtr<Kernel::CodeSet> codeset = Kernel::CodeSet::Create("", 0); |     Kernel::SharedPtr<Kernel::CodeSet> codeset = Kernel::CodeSet::Create("", tid); | ||||||
|     std::vector<u8> program_image; |     std::vector<u8> program_image; | ||||||
|     for (int i = 0; i < nso_header.segments.size(); ++i) { |     for (int i = 0; i < nso_header.segments.size(); ++i) { | ||||||
|         std::vector<u8> data = |         std::vector<u8> data = | ||||||
|  | @ -158,7 +158,7 @@ ResultStatus AppLoader_NSO::Load(Kernel::SharedPtr<Kernel::Process>& process) { | ||||||
|     process = Kernel::Process::Create("main"); |     process = Kernel::Process::Create("main"); | ||||||
| 
 | 
 | ||||||
|     // Load module
 |     // Load module
 | ||||||
|     LoadModule(filepath, Memory::PROCESS_IMAGE_VADDR); |     LoadModule(filepath, Memory::PROCESS_IMAGE_VADDR, 0); | ||||||
|     LOG_DEBUG(Loader, "loaded module %s @ 0x%" PRIx64, filepath.c_str(), |     LOG_DEBUG(Loader, "loaded module %s @ 0x%" PRIx64, filepath.c_str(), | ||||||
|               Memory::PROCESS_IMAGE_VADDR); |               Memory::PROCESS_IMAGE_VADDR); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -29,7 +29,7 @@ public: | ||||||
|         return IdentifyType(file, filepath); |         return IdentifyType(file, filepath); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     static VAddr LoadModule(const std::string& path, VAddr load_base); |     static VAddr LoadModule(const std::string& path, VAddr load_base, u64 tid); | ||||||
| 
 | 
 | ||||||
|     ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override; |     ResultStatus Load(Kernel::SharedPtr<Kernel::Process>& process) override; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 shinyquagsire23
						shinyquagsire23