From 358050cfc6cb88b5bfd3997f1e3f1e135ae808e6 Mon Sep 17 00:00:00 2001 From: N00byKing Date: Fri, 6 Apr 2018 17:06:32 +0200 Subject: core, main.h: Abort on 32Bit ROMs (#309) * core, main.h: Abort on 32Bit ROMs * main.cpp: Fix Grammar --- src/core/core.cpp | 4 ++++ src/core/core.h | 1 + src/core/loader/deconstructed_rom_directory.cpp | 5 +++++ src/core/loader/loader.h | 1 + 4 files changed, 11 insertions(+) (limited to 'src/core') diff --git a/src/core/core.cpp b/src/core/core.cpp index 11654d4da..9f5507a65 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -92,6 +92,8 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file return ResultStatus::ErrorLoader_ErrorEncrypted; case Loader::ResultStatus::ErrorInvalidFormat: return ResultStatus::ErrorLoader_ErrorInvalidFormat; + case Loader::ResultStatus::ErrorUnsupportedArch: + return ResultStatus::ErrorUnsupportedArch; default: return ResultStatus::ErrorSystemMode; } @@ -115,6 +117,8 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file return ResultStatus::ErrorLoader_ErrorEncrypted; case Loader::ResultStatus::ErrorInvalidFormat: return ResultStatus::ErrorLoader_ErrorInvalidFormat; + case Loader::ResultStatus::ErrorUnsupportedArch: + return ResultStatus::ErrorUnsupportedArch; default: return ResultStatus::ErrorLoader; } diff --git a/src/core/core.h b/src/core/core.h index ade456cfc..f497dc022 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -44,6 +44,7 @@ public: ErrorSystemFiles, ///< Error in finding system files ErrorSharedFont, ///< Error in finding shared font ErrorVideoCore, ///< Error in the video core + ErrorUnsupportedArch, ///< Unsupported Architecture (32-Bit ROMs) ErrorUnknown ///< Any other error }; diff --git a/src/core/loader/deconstructed_rom_directory.cpp b/src/core/loader/deconstructed_rom_directory.cpp index 8b4ee970f..8696c28bd 100644 --- a/src/core/loader/deconstructed_rom_directory.cpp +++ b/src/core/loader/deconstructed_rom_directory.cpp @@ -119,6 +119,11 @@ ResultStatus AppLoader_DeconstructedRomDirectory::Load( } metadata.Print(); + const FileSys::ProgramAddressSpaceType arch_bits{metadata.GetAddressSpaceType()}; + if (arch_bits == FileSys::ProgramAddressSpaceType::Is32Bit) { + return ResultStatus::ErrorUnsupportedArch; + } + // Load NSO modules VAddr next_load_addr{Memory::PROCESS_IMAGE_VADDR}; for (const auto& module : {"rtld", "main", "subsdk0", "subsdk1", "subsdk2", "subsdk3", diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h index dd44ee9a6..b1aabb1cb 100644 --- a/src/core/loader/loader.h +++ b/src/core/loader/loader.h @@ -72,6 +72,7 @@ enum class ResultStatus { ErrorAlreadyLoaded, ErrorMemoryAllocationFailed, ErrorEncrypted, + ErrorUnsupportedArch, }; /// Interface for loading an application -- cgit v1.2.3