Merge pull request #11639 from liamwhite/no-program-id-change

loader: don't reassign program ID on npdm reparse
This commit is contained in:
liamwhite 2023-10-07 12:49:32 -04:00 committed by GitHub
commit bf15aa093c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 10 additions and 1 deletions

View File

@ -5,6 +5,7 @@
#include <vector> #include <vector>
#include "common/logging/log.h" #include "common/logging/log.h"
#include "common/scope_exit.h"
#include "core/file_sys/program_metadata.h" #include "core/file_sys/program_metadata.h"
#include "core/file_sys/vfs.h" #include "core/file_sys/vfs.h"
#include "core/loader/loader.h" #include "core/loader/loader.h"
@ -95,6 +96,13 @@ Loader::ResultStatus ProgramMetadata::Load(VirtualFile file) {
return Loader::ResultStatus::Success; return Loader::ResultStatus::Success;
} }
Loader::ResultStatus ProgramMetadata::Reload(VirtualFile file) {
const u64 original_program_id = aci_header.title_id;
SCOPE_EXIT({ aci_header.title_id = original_program_id; });
return this->Load(file);
}
/*static*/ ProgramMetadata ProgramMetadata::GetDefault() { /*static*/ ProgramMetadata ProgramMetadata::GetDefault() {
// Allow use of cores 0~3 and thread priorities 1~63. // Allow use of cores 0~3 and thread priorities 1~63.
constexpr u32 default_thread_info_capability = 0x30007F7; constexpr u32 default_thread_info_capability = 0x30007F7;

View File

@ -56,6 +56,7 @@ public:
static ProgramMetadata GetDefault(); static ProgramMetadata GetDefault();
Loader::ResultStatus Load(VirtualFile file); Loader::ResultStatus Load(VirtualFile file);
Loader::ResultStatus Reload(VirtualFile file);
/// 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,

View File

@ -118,7 +118,7 @@ AppLoader_DeconstructedRomDirectory::LoadResult AppLoader_DeconstructedRomDirect
return {ResultStatus::ErrorMissingNPDM, {}}; return {ResultStatus::ErrorMissingNPDM, {}};
} }
const ResultStatus result2 = metadata.Load(npdm); const ResultStatus result2 = metadata.Reload(npdm);
if (result2 != ResultStatus::Success) { if (result2 != ResultStatus::Success) {
return {result2, {}}; return {result2, {}};
} }