From 10e9e0e8f926b11c2c7de16ffe15bea7d7ec2cdf Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Mon, 26 Oct 2020 15:59:09 -0700 Subject: [PATCH] docs/fatal error: update for 0.15.0 --- .../board/nintendo/nx/kern_k_system_control.cpp | 13 +++++++++++++ libstratosphere/source/ams/ams_environment.cpp | 5 ++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/libmesosphere/source/board/nintendo/nx/kern_k_system_control.cpp b/libmesosphere/source/board/nintendo/nx/kern_k_system_control.cpp index 0441af3f..6f4987ed 100644 --- a/libmesosphere/source/board/nintendo/nx/kern_k_system_control.cpp +++ b/libmesosphere/source/board/nintendo/nx/kern_k_system_control.cpp @@ -308,6 +308,15 @@ namespace ams::kern::board::nintendo::nx { g_secure_applet_memory_used = false; } + u64 GetVersionIdentifier() { + u64 value = kern::GetTargetFirmware(); + value |= static_cast(ATMOSPHERE_RELEASE_VERSION_MICRO) << 32; + value |= static_cast(ATMOSPHERE_RELEASE_VERSION_MINOR) << 40; + value |= static_cast(ATMOSPHERE_RELEASE_VERSION_MAJOR) << 48; + value |= static_cast('M') << 56; + return value; + } + } /* Initialization. */ @@ -557,6 +566,10 @@ namespace ams::kern::board::nintendo::nx { /* Set module base. */ f_ctx->module_base = KMemoryLayout::GetKernelCodeRegionExtents().GetAddress(); + /* Set afsr1. */ + f_ctx->afsr0 = 0; + f_ctx->afsr1 = GetVersionIdentifier(); + /* Copy registers. */ for (size_t i = 0; i < util::size(e_ctx->x); ++i) { f_ctx->gprs[i] = e_ctx->x[i]; diff --git a/libstratosphere/source/ams/ams_environment.cpp b/libstratosphere/source/ams/ams_environment.cpp index 67e60b85..3a0bb3ed 100644 --- a/libstratosphere/source/ams/ams_environment.cpp +++ b/libstratosphere/source/ams/ams_environment.cpp @@ -74,7 +74,10 @@ namespace ams { ams_ctx.pc = ctx->pc.x; ams_ctx.pstate = ctx->pstate; ams_ctx.afsr0 = ctx->afsr0; - ams_ctx.afsr1 = ctx->afsr1; + ams_ctx.afsr1 = (static_cast(::ams::exosphere::GetVersion(ATMOSPHERE_RELEASE_VERSION)) << 32) | static_cast(hos::GetVersion()); + if (svc::IsKernelMesosphere()) { + ams_ctx.afsr1 |= (static_cast('M') << (BITSIZEOF(u64) - BITSIZEOF(u8))); + } ams_ctx.far = ctx->far.x; ams_ctx.report_identifier = armGetSystemTick();