From 76bd617b2de80c7b8a36ebd59e6ba483c54e78bc Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sun, 5 Jul 2020 11:25:08 +0100 Subject: memory: Set page-table pointers before setting attribute = Memory --- src/core/memory.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/core') diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 7def00768..2c5588933 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -548,9 +548,9 @@ struct Memory::Impl { // longer exist, and we should just leave the pagetable entry blank. page_type = Common::PageType::Unmapped; } else { - page_type = Common::PageType::Memory; current_page_table->pointers[vaddr >> PAGE_BITS] = pointer - (vaddr & ~PAGE_MASK); + page_type = Common::PageType::Memory; } break; } @@ -591,9 +591,12 @@ struct Memory::Impl { base + page_table.pointers.size()); if (!target) { + ASSERT_MSG(type != Common::PageType::Memory, + "Mapping memory page without a pointer @ {:016x}", base * PAGE_SIZE); + while (base != end) { - page_table.pointers[base] = nullptr; page_table.attributes[base] = type; + page_table.pointers[base] = nullptr; page_table.backing_addr[base] = 0; base += 1; -- cgit v1.2.3 From 7bd3558c64d69aafb1f88f745e1d0bc11d7837fb Mon Sep 17 00:00:00 2001 From: CrazyMax Date: Sun, 5 Jul 2020 01:49:41 +0300 Subject: GetDisplayVersion should return a null-terminated version string. also, in case of failed to get of the basic version, we will try get it from application update. --- src/core/hle/service/am/am.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/core') diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 1bb544dd8..24cfb370b 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp @@ -10,6 +10,7 @@ #include "core/core.h" #include "core/file_sys/control_metadata.h" #include "core/file_sys/patch_manager.h" +#include "core/file_sys/registered_cache.h" #include "core/file_sys/savedata_factory.h" #include "core/hle/ipc_helpers.h" #include "core/hle/kernel/kernel.h" @@ -1353,14 +1354,25 @@ void IApplicationFunctions::GetDisplayVersion(Kernel::HLERequestContext& ctx) { std::array version_string{}; - FileSys::PatchManager pm{system.CurrentProcess()->GetTitleID()}; - const auto res = pm.GetControlMetadata(); + const auto res = [this] { + const auto title_id = system.CurrentProcess()->GetTitleID(); + + FileSys::PatchManager pm{title_id}; + auto res = pm.GetControlMetadata(); + if (res.first != nullptr) { + return res; + } + + FileSys::PatchManager pm_update{FileSys::GetUpdateTitleID(title_id)}; + return pm_update.GetControlMetadata(); + }(); + if (res.first != nullptr) { const auto& version = res.first->GetVersionString(); std::copy(version.begin(), version.end(), version_string.begin()); } else { - constexpr u128 default_version = {1, 0}; - std::memcpy(version_string.data(), default_version.data(), sizeof(u128)); + constexpr char default_version[]{"1.0.0"}; + std::memcpy(version_string.data(), default_version, sizeof(default_version)); } IPC::ResponseBuilder rb{ctx, 6}; -- cgit v1.2.3 From e7c77b90c44d0a423a5d041b2e658fb3e611a79d Mon Sep 17 00:00:00 2001 From: MerryMage Date: Tue, 7 Jul 2020 22:47:00 +0100 Subject: cpu_interrupt_handler: Remove #pragma once from .cpp file --- src/core/arm/cpu_interrupt_handler.cpp | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/core') diff --git a/src/core/arm/cpu_interrupt_handler.cpp b/src/core/arm/cpu_interrupt_handler.cpp index 2f1a1a269..df0350881 100644 --- a/src/core/arm/cpu_interrupt_handler.cpp +++ b/src/core/arm/cpu_interrupt_handler.cpp @@ -2,8 +2,6 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#pragma once - #include "common/thread.h" #include "core/arm/cpu_interrupt_handler.h" -- cgit v1.2.3