program_metadata: Set a default resource size when a NPDM is not present

Sets a default size of 0x1FE00000 bytes (510 MiB) for the system_resource_size when a NPDM is not present.
This commit is contained in:
Morph 2021-04-23 09:37:35 -04:00
parent 19bbdedf00
commit 1c65b3ee53
3 changed files with 8 additions and 4 deletions

View file

@ -58,7 +58,8 @@ Loader::ResultStatus ProgramMetadata::Load(VirtualFile file) {
result.LoadManual( result.LoadManual(
true /*is_64_bit*/, FileSys::ProgramAddressSpaceType::Is39Bit /*address_space*/, true /*is_64_bit*/, FileSys::ProgramAddressSpaceType::Is39Bit /*address_space*/,
0x2c /*main_thread_prio*/, 0 /*main_thread_core*/, 0x00100000 /*main_thread_stack_size*/, 0x2c /*main_thread_prio*/, 0 /*main_thread_core*/, 0x00100000 /*main_thread_stack_size*/,
{}, 0xFFFFFFFFFFFFFFFF /*filesystem_permissions*/, {} /*capabilities*/); 0 /*title_id*/, 0xFFFFFFFFFFFFFFFF /*filesystem_permissions*/,
0x1FE00000 /*system_resource_size*/, {} /*capabilities*/);
return result; return result;
} }
@ -66,7 +67,7 @@ Loader::ResultStatus ProgramMetadata::Load(VirtualFile file) {
void ProgramMetadata::LoadManual(bool is_64_bit, ProgramAddressSpaceType address_space, void ProgramMetadata::LoadManual(bool is_64_bit, ProgramAddressSpaceType address_space,
s32 main_thread_prio, u32 main_thread_core, s32 main_thread_prio, u32 main_thread_core,
u32 main_thread_stack_size, u64 title_id, u32 main_thread_stack_size, u64 title_id,
u64 filesystem_permissions, u64 filesystem_permissions, u32 system_resource_size,
KernelCapabilityDescriptors capabilities) { KernelCapabilityDescriptors capabilities) {
npdm_header.has_64_bit_instructions.Assign(is_64_bit); npdm_header.has_64_bit_instructions.Assign(is_64_bit);
npdm_header.address_space_type.Assign(address_space); npdm_header.address_space_type.Assign(address_space);
@ -75,6 +76,7 @@ void ProgramMetadata::LoadManual(bool is_64_bit, ProgramAddressSpaceType address
npdm_header.main_stack_size = main_thread_stack_size; npdm_header.main_stack_size = main_thread_stack_size;
aci_header.title_id = title_id; aci_header.title_id = title_id;
aci_file_access.permissions = filesystem_permissions; aci_file_access.permissions = filesystem_permissions;
npdm_header.system_resource_size = system_resource_size;
aci_kernel_capabilities = std ::move(capabilities); aci_kernel_capabilities = std ::move(capabilities);
} }

View file

@ -53,7 +53,8 @@ public:
/// Load from parameters instead of NPDM file, used for KIP /// Load from parameters instead of NPDM file, used for KIP
void LoadManual(bool is_64_bit, ProgramAddressSpaceType address_space, s32 main_thread_prio, void LoadManual(bool is_64_bit, ProgramAddressSpaceType address_space, s32 main_thread_prio,
u32 main_thread_core, u32 main_thread_stack_size, u64 title_id, u32 main_thread_core, u32 main_thread_stack_size, u64 title_id,
u64 filesystem_permissions, KernelCapabilityDescriptors capabilities); u64 filesystem_permissions, u32 system_resource_size,
KernelCapabilityDescriptors capabilities);
bool Is64BitProgram() const; bool Is64BitProgram() const;
ProgramAddressSpaceType GetAddressSpaceType() const; ProgramAddressSpaceType GetAddressSpaceType() const;

View file

@ -68,7 +68,8 @@ AppLoader::LoadResult AppLoader_KIP::Load(Kernel::Process& process,
FileSys::ProgramMetadata metadata; FileSys::ProgramMetadata metadata;
metadata.LoadManual(kip->Is64Bit(), address_space, kip->GetMainThreadPriority(), metadata.LoadManual(kip->Is64Bit(), address_space, kip->GetMainThreadPriority(),
kip->GetMainThreadCpuCore(), kip->GetMainThreadStackSize(), kip->GetMainThreadCpuCore(), kip->GetMainThreadStackSize(),
kip->GetTitleID(), 0xFFFFFFFFFFFFFFFF, kip->GetKernelCapabilities()); kip->GetTitleID(), 0xFFFFFFFFFFFFFFFF, 0x1FE00000,
kip->GetKernelCapabilities());
const VAddr base_address = process.PageTable().GetCodeRegionStart(); const VAddr base_address = process.PageTable().GetCodeRegionStart();
Kernel::CodeSet codeset; Kernel::CodeSet codeset;