diff options
| author | 2015-05-15 09:42:36 -0400 | |
|---|---|---|
| committer | 2015-05-15 09:42:36 -0400 | |
| commit | ef8d0e9823e0ac61624002b89912e8995a3588e4 (patch) | |
| tree | dfaee1cefb39e627bd90562c416d19fe6002209c /src/core/loader | |
| parent | Merge pull request #675 from jroweboy/windows-build-fixes (diff) | |
| parent | Core/ResourceLimits: Implemented the basic structure of ResourceLimits. (diff) | |
| download | yuzu-ef8d0e9823e0ac61624002b89912e8995a3588e4.tar.gz yuzu-ef8d0e9823e0ac61624002b89912e8995a3588e4.tar.xz yuzu-ef8d0e9823e0ac61624002b89912e8995a3588e4.zip | |
Merge pull request #761 from Subv/resource_limits
Core/ResourceLimits: Implemented the basic structure of ResourceLimits.
Diffstat (limited to 'src/core/loader')
| -rw-r--r-- | src/core/loader/3dsx.cpp | 4 | ||||
| -rw-r--r-- | src/core/loader/elf.cpp | 4 | ||||
| -rw-r--r-- | src/core/loader/ncch.cpp | 5 |
3 files changed, 13 insertions, 0 deletions
diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp index 84b13ee52..ad5e929ce 100644 --- a/src/core/loader/3dsx.cpp +++ b/src/core/loader/3dsx.cpp | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | 9 | ||
| 10 | #include "core/file_sys/archive_romfs.h" | 10 | #include "core/file_sys/archive_romfs.h" |
| 11 | #include "core/hle/kernel/process.h" | 11 | #include "core/hle/kernel/process.h" |
| 12 | #include "core/hle/kernel/resource_limit.h" | ||
| 12 | #include "core/hle/service/fs/archive.h" | 13 | #include "core/hle/service/fs/archive.h" |
| 13 | #include "core/loader/elf.h" | 14 | #include "core/loader/elf.h" |
| 14 | #include "core/loader/ncch.h" | 15 | #include "core/loader/ncch.h" |
| @@ -233,6 +234,9 @@ ResultStatus AppLoader_THREEDSX::Load() { | |||
| 233 | Kernel::g_current_process = Kernel::Process::Create(filename, 0); | 234 | Kernel::g_current_process = Kernel::Process::Create(filename, 0); |
| 234 | Kernel::g_current_process->svc_access_mask.set(); | 235 | Kernel::g_current_process->svc_access_mask.set(); |
| 235 | Kernel::g_current_process->address_mappings = default_address_mappings; | 236 | Kernel::g_current_process->address_mappings = default_address_mappings; |
| 237 | |||
| 238 | // Attach the default resource limit (APPLICATION) to the process | ||
| 239 | Kernel::g_current_process->resource_limit = Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | ||
| 236 | 240 | ||
| 237 | Load3DSXFile(*file, Memory::PROCESS_IMAGE_VADDR); | 241 | Load3DSXFile(*file, Memory::PROCESS_IMAGE_VADDR); |
| 238 | 242 | ||
diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp index a951bc80f..f00753a79 100644 --- a/src/core/loader/elf.cpp +++ b/src/core/loader/elf.cpp | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include "common/symbols.h" | 11 | #include "common/symbols.h" |
| 12 | 12 | ||
| 13 | #include "core/hle/kernel/kernel.h" | 13 | #include "core/hle/kernel/kernel.h" |
| 14 | #include "core/hle/kernel/resource_limit.h" | ||
| 14 | #include "core/loader/elf.h" | 15 | #include "core/loader/elf.h" |
| 15 | #include "core/memory.h" | 16 | #include "core/memory.h" |
| 16 | 17 | ||
| @@ -354,6 +355,9 @@ ResultStatus AppLoader_ELF::Load() { | |||
| 354 | Kernel::g_current_process->svc_access_mask.set(); | 355 | Kernel::g_current_process->svc_access_mask.set(); |
| 355 | Kernel::g_current_process->address_mappings = default_address_mappings; | 356 | Kernel::g_current_process->address_mappings = default_address_mappings; |
| 356 | 357 | ||
| 358 | // Attach the default resource limit (APPLICATION) to the process | ||
| 359 | Kernel::g_current_process->resource_limit = Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); | ||
| 360 | |||
| 357 | ElfReader elf_reader(&buffer[0]); | 361 | ElfReader elf_reader(&buffer[0]); |
| 358 | elf_reader.LoadInto(Memory::PROCESS_IMAGE_VADDR); | 362 | elf_reader.LoadInto(Memory::PROCESS_IMAGE_VADDR); |
| 359 | // TODO: Fill application title | 363 | // TODO: Fill application title |
diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 36e341fd4..08993c4fa 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp | |||
| @@ -11,6 +11,7 @@ | |||
| 11 | #include "common/swap.h" | 11 | #include "common/swap.h" |
| 12 | 12 | ||
| 13 | #include "core/hle/kernel/kernel.h" | 13 | #include "core/hle/kernel/kernel.h" |
| 14 | #include "core/hle/kernel/resource_limit.h" | ||
| 14 | #include "core/loader/ncch.h" | 15 | #include "core/loader/ncch.h" |
| 15 | #include "core/memory.h" | 16 | #include "core/memory.h" |
| 16 | 17 | ||
| @@ -126,6 +127,10 @@ ResultStatus AppLoader_NCCH::LoadExec() const { | |||
| 126 | u64 program_id = *reinterpret_cast<u64_le const*>(&ncch_header.program_id[0]); | 127 | u64 program_id = *reinterpret_cast<u64_le const*>(&ncch_header.program_id[0]); |
| 127 | Kernel::g_current_process = Kernel::Process::Create(process_name, program_id); | 128 | Kernel::g_current_process = Kernel::Process::Create(process_name, program_id); |
| 128 | 129 | ||
| 130 | // Attach a resource limit to the process based on the resource limit category | ||
| 131 | Kernel::g_current_process->resource_limit = Kernel::ResourceLimit::GetForCategory( | ||
| 132 | static_cast<Kernel::ResourceLimitCategory>(exheader_header.arm11_system_local_caps.resource_limit_category)); | ||
| 133 | |||
| 129 | // Copy data while converting endianess | 134 | // Copy data while converting endianess |
| 130 | std::array<u32, ARRAY_SIZE(exheader_header.arm11_kernel_caps.descriptors)> kernel_caps; | 135 | std::array<u32, ARRAY_SIZE(exheader_header.arm11_kernel_caps.descriptors)> kernel_caps; |
| 131 | std::copy_n(exheader_header.arm11_kernel_caps.descriptors, kernel_caps.size(), begin(kernel_caps)); | 136 | std::copy_n(exheader_header.arm11_kernel_caps.descriptors, kernel_caps.size(), begin(kernel_caps)); |