feat: Enhanced Nintendo SDK crash detection and recovery system

* Enhanced ARM interface backtrace logging with Nintendo SDK crash detection
  - Detects nnSdk module crashes and initialization-time failures
  - Provides detailed recovery suggestions and logging
  - Identifies recoverable vs non-recoverable crashes

* Improved physical core crash handling
  - Enhanced prefetch abort and data abort recovery
  - Continues execution for Nintendo SDK crashes instead of suspending
  - Better logging for crash analysis and debugging

* Expanded SVC exception handling
  - Added Nintendo SDK-specific crash recovery logic
  - Enhanced general crash recovery for low-address and assertion failures
  - Improved UE4 crash handling integration

* Updated Horizon OS version to 20.4.0
  - Updated HOS_VERSION_MINOR from 1 to 4
  - Updated HOS_VERSION_MICRO from 5 to 0
  - Updated version hash and display strings accordingly

* Fixed Vulkan turbo mode performance metrics
  - Added proper type casting for execution time comparisons
  - Prevents potential integer overflow issues

Signed-off-by: Zephyron <zephyron@citron-emu.org>
This commit is contained in:
Zephyron
2025-09-05 14:57:58 +10:00
parent ae46d4629f
commit 50afaefffb
5 changed files with 128 additions and 14 deletions

View File

@@ -215,7 +215,7 @@ void TurboMode::UpdatePerformanceMetrics(std::chrono::nanoseconds execution_time
// Update max execution time
u64 current_max = performance_stats.max_execution_time_ns.load(std::memory_order_relaxed);
while (time_ns > current_max &&
while (static_cast<u64>(time_ns) > current_max &&
!performance_stats.max_execution_time_ns.compare_exchange_weak(current_max, time_ns,
std::memory_order_relaxed)) {
// Retry if compare_exchange failed
@@ -223,7 +223,7 @@ void TurboMode::UpdatePerformanceMetrics(std::chrono::nanoseconds execution_time
// Update min execution time
u64 current_min = performance_stats.min_execution_time_ns.load(std::memory_order_relaxed);
while (time_ns < current_min &&
while (static_cast<u64>(time_ns) < current_min &&
!performance_stats.min_execution_time_ns.compare_exchange_weak(current_min, time_ns,
std::memory_order_relaxed)) {
// Retry if compare_exchange failed