diff options
Diffstat (limited to 'src/core/loader')
| -rw-r--r-- | src/core/loader/deconstructed_rom_directory.cpp | 4 | ||||
| -rw-r--r-- | src/core/loader/elf.cpp | 7 | ||||
| -rw-r--r-- | src/core/loader/nro.cpp | 6 | ||||
| -rw-r--r-- | src/core/loader/nso.cpp | 6 |
4 files changed, 16 insertions, 7 deletions
diff --git a/src/core/loader/deconstructed_rom_directory.cpp b/src/core/loader/deconstructed_rom_directory.cpp index 4c79d7902..a53fa6e00 100644 --- a/src/core/loader/deconstructed_rom_directory.cpp +++ b/src/core/loader/deconstructed_rom_directory.cpp | |||
| @@ -6,6 +6,7 @@ | |||
| 6 | #include "common/common_funcs.h" | 6 | #include "common/common_funcs.h" |
| 7 | #include "common/file_util.h" | 7 | #include "common/file_util.h" |
| 8 | #include "common/logging/log.h" | 8 | #include "common/logging/log.h" |
| 9 | #include "core/core.h" | ||
| 9 | #include "core/file_sys/content_archive.h" | 10 | #include "core/file_sys/content_archive.h" |
| 10 | #include "core/file_sys/control_metadata.h" | 11 | #include "core/file_sys/control_metadata.h" |
| 11 | #include "core/file_sys/romfs_factory.h" | 12 | #include "core/file_sys/romfs_factory.h" |
| @@ -117,10 +118,11 @@ ResultStatus AppLoader_DeconstructedRomDirectory::Load( | |||
| 117 | } | 118 | } |
| 118 | } | 119 | } |
| 119 | 120 | ||
| 121 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 120 | process->program_id = metadata.GetTitleID(); | 122 | process->program_id = metadata.GetTitleID(); |
| 121 | process->svc_access_mask.set(); | 123 | process->svc_access_mask.set(); |
| 122 | process->resource_limit = | 124 | process->resource_limit = |
| 123 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | 125 | kernel.ResourceLimitForCategory(Kernel::ResourceLimitCategory::APPLICATION); |
| 124 | process->Run(Memory::PROCESS_IMAGE_VADDR, metadata.GetMainThreadPriority(), | 126 | process->Run(Memory::PROCESS_IMAGE_VADDR, metadata.GetMainThreadPriority(), |
| 125 | metadata.GetMainThreadStackSize()); | 127 | metadata.GetMainThreadStackSize()); |
| 126 | 128 | ||
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp index 6420a7f11..3702a8478 100644 --- a/src/core/loader/elf.cpp +++ b/src/core/loader/elf.cpp | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include "common/common_types.h" | 9 | #include "common/common_types.h" |
| 10 | #include "common/file_util.h" | 10 | #include "common/file_util.h" |
| 11 | #include "common/logging/log.h" | 11 | #include "common/logging/log.h" |
| 12 | #include "core/core.h" | ||
| 12 | #include "core/hle/kernel/process.h" | 13 | #include "core/hle/kernel/process.h" |
| 13 | #include "core/hle/kernel/resource_limit.h" | 14 | #include "core/hle/kernel/resource_limit.h" |
| 14 | #include "core/loader/elf.h" | 15 | #include "core/loader/elf.h" |
| @@ -300,7 +301,8 @@ SharedPtr<CodeSet> ElfReader::LoadInto(u32 vaddr) { | |||
| 300 | std::vector<u8> program_image(total_image_size); | 301 | std::vector<u8> program_image(total_image_size); |
| 301 | size_t current_image_position = 0; | 302 | size_t current_image_position = 0; |
| 302 | 303 | ||
| 303 | SharedPtr<CodeSet> codeset = CodeSet::Create(""); | 304 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 305 | SharedPtr<CodeSet> codeset = CodeSet::Create(kernel, ""); | ||
| 304 | 306 | ||
| 305 | for (unsigned int i = 0; i < header->e_phnum; ++i) { | 307 | for (unsigned int i = 0; i < header->e_phnum; ++i) { |
| 306 | Elf32_Phdr* p = &segments[i]; | 308 | Elf32_Phdr* p = &segments[i]; |
| @@ -400,8 +402,9 @@ ResultStatus AppLoader_ELF::Load(Kernel::SharedPtr<Kernel::Process>& process) { | |||
| 400 | process->svc_access_mask.set(); | 402 | process->svc_access_mask.set(); |
| 401 | 403 | ||
| 402 | // Attach the default resource limit (APPLICATION) to the process | 404 | // Attach the default resource limit (APPLICATION) to the process |
| 405 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 403 | process->resource_limit = | 406 | process->resource_limit = |
| 404 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | 407 | kernel.ResourceLimitForCategory(Kernel::ResourceLimitCategory::APPLICATION); |
| 405 | 408 | ||
| 406 | process->Run(codeset->entrypoint, 48, Memory::DEFAULT_STACK_SIZE); | 409 | process->Run(codeset->entrypoint, 48, Memory::DEFAULT_STACK_SIZE); |
| 407 | 410 | ||
diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp index 2179cf2ea..00205d1d2 100644 --- a/src/core/loader/nro.cpp +++ b/src/core/loader/nro.cpp | |||
| @@ -136,7 +136,8 @@ bool AppLoader_NRO::LoadNro(FileSys::VirtualFile file, VAddr load_base) { | |||
| 136 | } | 136 | } |
| 137 | 137 | ||
| 138 | // Build program image | 138 | // Build program image |
| 139 | Kernel::SharedPtr<Kernel::CodeSet> codeset = Kernel::CodeSet::Create(""); | 139 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 140 | Kernel::SharedPtr<Kernel::CodeSet> codeset = Kernel::CodeSet::Create(kernel, ""); | ||
| 140 | std::vector<u8> program_image = file->ReadBytes(PageAlignSize(nro_header.file_size)); | 141 | std::vector<u8> program_image = file->ReadBytes(PageAlignSize(nro_header.file_size)); |
| 141 | if (program_image.size() != PageAlignSize(nro_header.file_size)) { | 142 | if (program_image.size() != PageAlignSize(nro_header.file_size)) { |
| 142 | return {}; | 143 | return {}; |
| @@ -185,9 +186,10 @@ ResultStatus AppLoader_NRO::Load(Kernel::SharedPtr<Kernel::Process>& process) { | |||
| 185 | return ResultStatus::ErrorLoadingNRO; | 186 | return ResultStatus::ErrorLoadingNRO; |
| 186 | } | 187 | } |
| 187 | 188 | ||
| 189 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 188 | process->svc_access_mask.set(); | 190 | process->svc_access_mask.set(); |
| 189 | process->resource_limit = | 191 | process->resource_limit = |
| 190 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | 192 | kernel.ResourceLimitForCategory(Kernel::ResourceLimitCategory::APPLICATION); |
| 191 | process->Run(base_addr, THREADPRIO_DEFAULT, Memory::DEFAULT_STACK_SIZE); | 193 | process->Run(base_addr, THREADPRIO_DEFAULT, Memory::DEFAULT_STACK_SIZE); |
| 192 | 194 | ||
| 193 | is_loaded = true; | 195 | is_loaded = true; |
diff --git a/src/core/loader/nso.cpp b/src/core/loader/nso.cpp index a94558ac5..0c992d662 100644 --- a/src/core/loader/nso.cpp +++ b/src/core/loader/nso.cpp | |||
| @@ -100,7 +100,8 @@ VAddr AppLoader_NSO::LoadModule(FileSys::VirtualFile file, VAddr load_base) { | |||
| 100 | return {}; | 100 | return {}; |
| 101 | 101 | ||
| 102 | // Build program image | 102 | // Build program image |
| 103 | Kernel::SharedPtr<Kernel::CodeSet> codeset = Kernel::CodeSet::Create(""); | 103 | auto& kernel = Core::System::GetInstance().Kernel(); |
| 104 | Kernel::SharedPtr<Kernel::CodeSet> codeset = Kernel::CodeSet::Create(kernel, ""); | ||
| 104 | std::vector<u8> program_image; | 105 | std::vector<u8> program_image; |
| 105 | for (std::size_t i = 0; i < nso_header.segments.size(); ++i) { | 106 | for (std::size_t i = 0; i < nso_header.segments.size(); ++i) { |
| 106 | const std::vector<u8> compressed_data = | 107 | const std::vector<u8> compressed_data = |
| @@ -151,9 +152,10 @@ ResultStatus AppLoader_NSO::Load(Kernel::SharedPtr<Kernel::Process>& process) { | |||
| 151 | LoadModule(file, Memory::PROCESS_IMAGE_VADDR); | 152 | LoadModule(file, Memory::PROCESS_IMAGE_VADDR); |
| 152 | LOG_DEBUG(Loader, "loaded module {} @ 0x{:X}", file->GetName(), Memory::PROCESS_IMAGE_VADDR); | 153 | LOG_DEBUG(Loader, "loaded module {} @ 0x{:X}", file->GetName(), Memory::PROCESS_IMAGE_VADDR); |
| 153 | 154 | ||
| 155 | auto& kernel = Core::System::GetInstance().Kernel(); | ||
| 154 | process->svc_access_mask.set(); | 156 | process->svc_access_mask.set(); |
| 155 | process->resource_limit = | 157 | process->resource_limit = |
| 156 | Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | 158 | kernel.ResourceLimitForCategory(Kernel::ResourceLimitCategory::APPLICATION); |
| 157 | process->Run(Memory::PROCESS_IMAGE_VADDR, THREADPRIO_DEFAULT, Memory::DEFAULT_STACK_SIZE); | 159 | process->Run(Memory::PROCESS_IMAGE_VADDR, THREADPRIO_DEFAULT, Memory::DEFAULT_STACK_SIZE); |
| 158 | 160 | ||
| 159 | is_loaded = true; | 161 | is_loaded = true; |