Loaders: Don't automatically set the current process every time we load an application.
The loaders will now just create a Kernel::Process, construct it and return it to the caller, which is responsible for setting it as the current process and configuring the global page table.
This commit is contained in:
parent
3165466b66
commit
7f48aa8d25
8 changed files with 40 additions and 37 deletions
|
@ -91,8 +91,8 @@ static u32 TranslateAddr(u32 addr, const THREEloadinfo* loadinfo, u32* offsets)
|
|||
return loadinfo->seg_addrs[2] + addr - offsets[1];
|
||||
}
|
||||
|
||||
using Kernel::SharedPtr;
|
||||
using Kernel::CodeSet;
|
||||
using Kernel::SharedPtr;
|
||||
|
||||
static THREEDSX_Error Load3DSXFile(FileUtil::IOFile& file, u32 base_addr,
|
||||
SharedPtr<CodeSet>* out_codeset) {
|
||||
|
@ -255,7 +255,7 @@ FileType AppLoader_THREEDSX::IdentifyType(FileUtil::IOFile& file) {
|
|||
return FileType::Error;
|
||||
}
|
||||
|
||||
ResultStatus AppLoader_THREEDSX::Load() {
|
||||
ResultStatus AppLoader_THREEDSX::Load(Kernel::SharedPtr<Kernel::Process>& process) {
|
||||
if (is_loaded)
|
||||
return ResultStatus::ErrorAlreadyLoaded;
|
||||
|
||||
|
@ -267,16 +267,15 @@ ResultStatus AppLoader_THREEDSX::Load() {
|
|||
return ResultStatus::Error;
|
||||
codeset->name = filename;
|
||||
|
||||
Kernel::g_current_process = Kernel::Process::Create(std::move(codeset));
|
||||
Kernel::g_current_process->svc_access_mask.set();
|
||||
Kernel::g_current_process->address_mappings = default_address_mappings;
|
||||
Memory::SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table);
|
||||
process = Kernel::Process::Create(std::move(codeset));
|
||||
process->svc_access_mask.set();
|
||||
process->address_mappings = default_address_mappings;
|
||||
|
||||
// Attach the default resource limit (APPLICATION) to the process
|
||||
Kernel::g_current_process->resource_limit =
|
||||
process->resource_limit =
|
||||
Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION);
|
||||
|
||||
Kernel::g_current_process->Run(48, Kernel::DEFAULT_STACK_SIZE);
|
||||
process->Run(48, Kernel::DEFAULT_STACK_SIZE);
|
||||
|
||||
Service::FS::RegisterSelfNCCH(*this);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue