diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/loader/kip.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/core/loader/kip.cpp b/src/core/loader/kip.cpp index 3ae9e6e0e..99ed34b00 100644 --- a/src/core/loader/kip.cpp +++ b/src/core/loader/kip.cpp | |||
| @@ -71,7 +71,6 @@ AppLoader::LoadResult AppLoader_KIP::Load(Kernel::KProcess& process, | |||
| 71 | kip->GetTitleID(), 0xFFFFFFFFFFFFFFFF, 0x1FE00000, | 71 | kip->GetTitleID(), 0xFFFFFFFFFFFFFFFF, 0x1FE00000, |
| 72 | kip->GetKernelCapabilities()); | 72 | kip->GetKernelCapabilities()); |
| 73 | 73 | ||
| 74 | const VAddr base_address = process.PageTable().GetCodeRegionStart(); | ||
| 75 | Kernel::CodeSet codeset; | 74 | Kernel::CodeSet codeset; |
| 76 | Kernel::PhysicalMemory program_image; | 75 | Kernel::PhysicalMemory program_image; |
| 77 | 76 | ||
| @@ -91,7 +90,14 @@ AppLoader::LoadResult AppLoader_KIP::Load(Kernel::KProcess& process, | |||
| 91 | program_image.resize(PageAlignSize(kip->GetBSSOffset()) + kip->GetBSSSize()); | 90 | program_image.resize(PageAlignSize(kip->GetBSSOffset()) + kip->GetBSSSize()); |
| 92 | codeset.DataSegment().size += kip->GetBSSSize(); | 91 | codeset.DataSegment().size += kip->GetBSSSize(); |
| 93 | 92 | ||
| 93 | // Setup the process code layout | ||
| 94 | if (process.LoadFromMetadata(FileSys::ProgramMetadata::GetDefault(), program_image.size()) | ||
| 95 | .IsError()) { | ||
| 96 | return {ResultStatus::ErrorNotInitialized, {}}; | ||
| 97 | } | ||
| 98 | |||
| 94 | codeset.memory = std::move(program_image); | 99 | codeset.memory = std::move(program_image); |
| 100 | const VAddr base_address = process.PageTable().GetCodeRegionStart(); | ||
| 95 | process.LoadModule(std::move(codeset), base_address); | 101 | process.LoadModule(std::move(codeset), base_address); |
| 96 | 102 | ||
| 97 | LOG_DEBUG(Loader, "loaded module {} @ 0x{:X}", kip->GetName(), base_address); | 103 | LOG_DEBUG(Loader, "loaded module {} @ 0x{:X}", kip->GetName(), base_address); |