loader: nro: Fix process initialization using ProgramMetadata default.
This commit is contained in:
		
							parent
							
								
									68039addbc
								
							
						
					
					
						commit
						9c12aef2f8
					
				| @ -131,7 +131,7 @@ static constexpr u32 PageAlignSize(u32 size) { | ||||
| } | ||||
| 
 | ||||
| static bool LoadNroImpl(Kernel::Process& process, const std::vector<u8>& data, | ||||
|                         const std::string& name, VAddr load_base) { | ||||
|                         const std::string& name) { | ||||
|     if (data.size() < sizeof(NroHeader)) { | ||||
|         return {}; | ||||
|     } | ||||
| @ -187,19 +187,25 @@ static bool LoadNroImpl(Kernel::Process& process, const std::vector<u8>& data, | ||||
|     codeset.DataSegment().size += bss_size; | ||||
|     program_image.resize(static_cast<u32>(program_image.size()) + bss_size); | ||||
| 
 | ||||
|     // Setup the process code layout
 | ||||
|     if (process.LoadFromMetadata(FileSys::ProgramMetadata::GetDefault(), program_image.size()) | ||||
|             .IsError()) { | ||||
|         return false; | ||||
|     } | ||||
| 
 | ||||
|     // Load codeset for current process
 | ||||
|     codeset.memory = std::move(program_image); | ||||
|     process.LoadModule(std::move(codeset), load_base); | ||||
|     process.LoadModule(std::move(codeset), process.PageTable().GetCodeRegionStart()); | ||||
| 
 | ||||
|     // Register module with GDBStub
 | ||||
|     GDBStub::RegisterModule(name, load_base, load_base); | ||||
|     GDBStub::RegisterModule(name, process.PageTable().GetCodeRegionStart(), | ||||
|                             process.PageTable().GetCodeRegionEnd()); | ||||
| 
 | ||||
|     return true; | ||||
| } | ||||
| 
 | ||||
| bool AppLoader_NRO::LoadNro(Kernel::Process& process, const FileSys::VfsFile& file, | ||||
|                             VAddr load_base) { | ||||
|     return LoadNroImpl(process, file.ReadAllBytes(), file.GetName(), load_base); | ||||
| bool AppLoader_NRO::LoadNro(Kernel::Process& process, const FileSys::VfsFile& file) { | ||||
|     return LoadNroImpl(process, file.ReadAllBytes(), file.GetName()); | ||||
| } | ||||
| 
 | ||||
| AppLoader_NRO::LoadResult AppLoader_NRO::Load(Kernel::Process& process) { | ||||
| @ -207,10 +213,7 @@ AppLoader_NRO::LoadResult AppLoader_NRO::Load(Kernel::Process& process) { | ||||
|         return {ResultStatus::ErrorAlreadyLoaded, {}}; | ||||
|     } | ||||
| 
 | ||||
|     // Load NRO
 | ||||
|     const VAddr base_address = process.PageTable().GetCodeRegionStart(); | ||||
| 
 | ||||
|     if (!LoadNro(process, *file, base_address)) { | ||||
|     if (!LoadNro(process, *file)) { | ||||
|         return {ResultStatus::ErrorLoadingNRO, {}}; | ||||
|     } | ||||
| 
 | ||||
|  | ||||
| @ -47,7 +47,7 @@ public: | ||||
|     bool IsRomFSUpdatable() const override; | ||||
| 
 | ||||
| private: | ||||
|     bool LoadNro(Kernel::Process& process, const FileSys::VfsFile& file, VAddr load_base); | ||||
|     bool LoadNro(Kernel::Process& process, const FileSys::VfsFile& file); | ||||
| 
 | ||||
|     std::vector<u8> icon_data; | ||||
|     std::unique_ptr<FileSys::NACP> nacp; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei