From a4752154f7c7253eade3a5c0cf1ed95d2e2735e3 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Fri, 1 May 2026 08:50:42 +0200 Subject: [PATCH 1/4] Nicely plumb OSReport error/warning/etc through Aurora's logger This makes a new implementation in the dusk src folder, and makes the existing file containing these functions not compiled anymore. A ton of dead code is now gone. --- files.cmake | 3 +- src/dusk/OSReport.cpp | 91 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 src/dusk/OSReport.cpp diff --git a/files.cmake b/files.cmake index f91756a9d5..6cec4672fb 100644 --- a/files.cmake +++ b/files.cmake @@ -1,7 +1,7 @@ set(DOLZEL_FILES src/m_Do/m_Do_main.cpp - src/m_Do/m_Do_printf.cpp + #src/m_Do/m_Do_printf.cpp src/m_Do/m_Do_audio.cpp src/m_Do/m_Do_controller_pad.cpp #src/m_Do/m_Re_controller_pad.cpp @@ -1467,6 +1467,7 @@ set(DUSK_FILES src/dusk/livesplit.cpp src/dusk/offset_ptr.cpp src/dusk/OSContext.cpp + src/dusk/OSReport.cpp src/dusk/OSThread.cpp src/dusk/OSMutex.cpp src/dusk/discord_presence.cpp diff --git a/src/dusk/OSReport.cpp b/src/dusk/OSReport.cpp new file mode 100644 index 0000000000..b89a708d78 --- /dev/null +++ b/src/dusk/OSReport.cpp @@ -0,0 +1,91 @@ +#include "aurora/lib/logging.hpp" +#include "os_report.h" + +aurora::Module Log("dusk::osReport"); + +bool dusk::OSReportReallyForceEnable = false; + +u8 __OSReport_disable; + +void OSReportDisable() { + __OSReport_disable = true; +} + +void OSReportEnable() { + __OSReport_disable = false; +} + +static bool checkEnabled() { + return !__OSReport_disable || dusk::OSReportReallyForceEnable; +} + +static std::string FormatToString(const char* msg, va_list list) { + int ret = vsnprintf(nullptr, 0, msg, list); + std::string buf(ret, '\0'); + vsnprintf(buf.data(), buf.size(), msg, list); + buf.pop_back(); + return buf; +} + +void OSReport_Error(const char* fmt, ...) { + if (!checkEnabled()) { + return; + } + + va_list args; + va_start(args, fmt); + const auto str = FormatToString(fmt, args); + va_end(args); + + Log.error("{}", str); +} + +void OSReport_FatalError(const char* fmt, ...) { + if (!checkEnabled()) { + return; + } + + va_list args; + va_start(args, fmt); + const auto str = FormatToString(fmt, args); + va_end(args); + + Log.fatal("{}", str); +} + +void OSReport_Warning(const char* fmt, ...) { + if (!checkEnabled()) { + return; + } + + va_list args; + va_start(args, fmt); + const auto str = FormatToString(fmt, args); + va_end(args); + + Log.warn("{}", str); +} + +void OSReport_System(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + OSVAttention(fmt, args); + va_end(args); +} + +void OSVAttention(const char* fmt, va_list args) { + if (!checkEnabled()) { + return; + } + + const auto str = FormatToString(fmt, args); + + Log.info("{}", str); +} + +void OSAttention(const char* fmt, ...) { + va_list args; + va_start(args, fmt); + OSVAttention(fmt, args); + va_end(args); +} \ No newline at end of file From 48b98a543215e4b8915f4e5073e3ad67dc759620 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Fri, 1 May 2026 08:50:55 +0200 Subject: [PATCH 2/4] Make JKRExpHeap OOM logging more verbose --- libs/JSystem/src/JKernel/JKRExpHeap.cpp | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/libs/JSystem/src/JKernel/JKRExpHeap.cpp b/libs/JSystem/src/JKernel/JKRExpHeap.cpp index 4a6712cb65..dc88090a47 100644 --- a/libs/JSystem/src/JKernel/JKRExpHeap.cpp +++ b/libs/JSystem/src/JKernel/JKRExpHeap.cpp @@ -222,16 +222,11 @@ void* JKRExpHeap::do_alloc(u32 size, int alignment) { OSReport_Error("Free block list as follows:\n"); OSReport_Error("Start | End | Size \n"); - int i = 0; for (const CMemBlock* block = mHeadFreeList; block; block = block->mNext) { if (block->mMagic) { // Allocated, ignore. continue; } - if (i++ > 10) { - OSReport_Error("\n"); - break; - } auto blockStart = (uintptr_t)block - (uintptr_t)mStart; auto blockEnd = (uintptr_t)block + block->size - (uintptr_t)mStart; @@ -239,6 +234,14 @@ void* JKRExpHeap::do_alloc(u32 size, int alignment) { OSReport_Error("%08X | %08X | %08X\n", (u32) blockStart, (u32) blockEnd, (u32) blockSize); } + OSReport_Error("Child heaps as follows:\n"); + OSReport_Error("Start | End | Name \n"); + + const JSUTree& tree = getHeapTree(); + for (JSUTreeIterator iter(tree.getFirstChild()); iter != tree.getEndChild(); ++iter) { + OSReport_Error("%08X | %08X | %s\n", iter->getStartAddr(), iter->getEndAddr(), iter->getName()); + } + CRASH("Aborting due to allocation failure!"); } #else From f2ac4d6f44170ccdbee32f4359656fe0808b74da Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Fri, 1 May 2026 08:52:41 +0200 Subject: [PATCH 3/4] Leave OSReport enabled. --- src/m_Do/m_Do_machine.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index 6b186a77e6..f4fb0f6286 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -753,9 +753,11 @@ void myGXVerifyCallback(GXWarningLevel param_1, u32 param_2, const char* param_3 #endif int mDoMch_Create() { +#if !TARGET_PC // We want crash logs. if (mDoMain::developmentMode == 0 || !(OSGetConsoleType() & 0x10000000)) { OSReportDisable(); } +#endif JKRHeap::setDefaultDebugFill(mDoMch::mDebugFill); #if DEBUG From e4ff38a712a752f116fe79858a90183a4730e334 Mon Sep 17 00:00:00 2001 From: PJB3005 Date: Fri, 1 May 2026 08:54:32 +0200 Subject: [PATCH 4/4] Disable spammy mDoGph_Painter log line What was this even debugging? Who knows. --- src/m_Do/m_Do_graphic.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/m_Do/m_Do_graphic.cpp b/src/m_Do/m_Do_graphic.cpp index 9bd6e5e327..f7866850df 100644 --- a/src/m_Do/m_Do_graphic.cpp +++ b/src/m_Do/m_Do_graphic.cpp @@ -2041,11 +2041,12 @@ static void drawItem3D() { int mDoGph_Painter() { ZoneScoped; + // Diagnostic: log windowNum to track game state machine progress static bool sDiagLoggedWindow = false; if (!sDiagLoggedWindow) { int wn = dComIfGp_getWindowNum(); - DuskLog.debug("mDoGph_Painter: windowNum={}", wn); + // DuskLog.debug("mDoGph_Painter: windowNum={}", wn); if (wn != 0) sDiagLoggedWindow = true; }