forked from eden-emu/eden
		
	nro: Make LoadNro method accessible outside of apploader code.
This commit is contained in:
		
							parent
							
								
									a141b46b5c
								
							
						
					
					
						commit
						ef7b2237d9
					
				
					 2 changed files with 18 additions and 6 deletions
				
			
		|  | @ -127,18 +127,23 @@ static constexpr u32 PageAlignSize(u32 size) { | |||
|     return (size + Memory::PAGE_MASK) & ~Memory::PAGE_MASK; | ||||
| } | ||||
| 
 | ||||
| bool AppLoader_NRO::LoadNro(const FileSys::VfsFile& file, VAddr load_base) { | ||||
|     // Read NSO header
 | ||||
|     NroHeader nro_header{}; | ||||
|     if (sizeof(NroHeader) != file.ReadObject(&nro_header)) { | ||||
| /*static*/ bool AppLoader_NRO::LoadNro(const std::vector<u8>& data, const std::string& name, | ||||
|                                        VAddr load_base) { | ||||
| 
 | ||||
|     if (data.size() < sizeof(NroHeader)) { | ||||
|         return {}; | ||||
|     } | ||||
| 
 | ||||
|     // Read NSO header
 | ||||
|     NroHeader nro_header{}; | ||||
|     std::memcpy(&nro_header, data.data(), sizeof(NroHeader)); | ||||
|     if (nro_header.magic != Common::MakeMagic('N', 'R', 'O', '0')) { | ||||
|         return {}; | ||||
|     } | ||||
| 
 | ||||
|     // Build program image
 | ||||
|     std::vector<u8> program_image = file.ReadBytes(PageAlignSize(nro_header.file_size)); | ||||
|     std::vector<u8> program_image(PageAlignSize(nro_header.file_size)); | ||||
|     std::memcpy(program_image.data(), data.data(), program_image.size()); | ||||
|     if (program_image.size() != PageAlignSize(nro_header.file_size)) { | ||||
|         return {}; | ||||
|     } | ||||
|  | @ -182,11 +187,15 @@ bool AppLoader_NRO::LoadNro(const FileSys::VfsFile& file, VAddr load_base) { | |||
|     Core::CurrentProcess()->LoadModule(std::move(codeset), load_base); | ||||
| 
 | ||||
|     // Register module with GDBStub
 | ||||
|     GDBStub::RegisterModule(file.GetName(), load_base, load_base); | ||||
|     GDBStub::RegisterModule(name, load_base, load_base); | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| bool AppLoader_NRO::LoadNro(const FileSys::VfsFile& file, VAddr load_base) { | ||||
|     return AppLoader_NRO::LoadNro(file.ReadAllBytes(), file.GetName(), load_base); | ||||
| } | ||||
| 
 | ||||
| ResultStatus AppLoader_NRO::Load(Kernel::Process& process) { | ||||
|     if (is_loaded) { | ||||
|         return ResultStatus::ErrorAlreadyLoaded; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 bunnei
						bunnei