From e063db96973a6dfa52d24b0d715018f1f33067ae Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 17 May 2025 14:16:26 -0400 Subject: [PATCH] Fix error handler typedefs --- include/JSystem/JUtility/JUTException.h | 10 +++++---- include/dolphin/os/OSError.h | 4 +--- src/JSystem/JUtility/JUTException.cpp | 28 ++++++++++++------------- src/dolphin/os/OSError.c | 8 +++---- src/dolphin/os/OSMemory.c | 2 +- src/dolphin/os/OSThread.c | 2 +- src/m_Do/m_Do_machine.cpp | 2 +- 7 files changed, 28 insertions(+), 28 deletions(-) diff --git a/include/JSystem/JUtility/JUTException.h b/include/JSystem/JUtility/JUTException.h index 20bdb1408..189603ac9 100644 --- a/include/JSystem/JUtility/JUTException.h +++ b/include/JSystem/JUtility/JUTException.h @@ -34,6 +34,8 @@ STATIC_ASSERT(sizeof(JUTExternalFB) == 0x14); #define JUT_PRINT_FLOAT 8 #define JUT_PRINT_STACK 16 +typedef void (*JUTExceptionUserCallback)(OSError, OSContext*, u32, u32); + class JUTException : public JKRThread { public: enum EInfoPage { @@ -79,8 +81,8 @@ public: static void panic_f(char const*, int, char const*, ...); static void setFPException(u32); static bool searchPartialModule(u32, u32*, u32*, u32*, u32*); - static OSErrorHandler setPreUserCallback(OSErrorHandler); - static OSErrorHandler setPostUserCallback(OSErrorHandler); + static JUTExceptionUserCallback setPreUserCallback(JUTExceptionUserCallback); + static JUTExceptionUserCallback setPostUserCallback(JUTExceptionUserCallback); static void appendMapFile(char const*); static bool queryMapAddress(char*, u32, s32, u32*, u32*, char*, u32, bool, bool); static bool queryMapAddress_single(char*, u32, s32, u32*, u32*, char*, u32, bool, @@ -109,8 +111,8 @@ private: static JSUList sMapFileList; static OSMessage sMessageBuffer[1]; static JUTException* sErrorManager; - static OSErrorHandler sPreUserCallback; - static OSErrorHandler sPostUserCallback; + static JUTExceptionUserCallback sPreUserCallback; + static JUTExceptionUserCallback sPostUserCallback; static void* sConsoleBuffer; static u32 sConsoleBufferSize; static JUTConsole* sConsole; diff --git a/include/dolphin/os/OSError.h b/include/dolphin/os/OSError.h index c7b8239b3..6f78c79bf 100644 --- a/include/dolphin/os/OSError.h +++ b/include/dolphin/os/OSError.h @@ -53,9 +53,7 @@ typedef enum { typedef u8 __OSException; -typedef void (*OSErrorHandler)(OSError error, OSContext* context, u32, u32); -// Using this type for the C++ handlers makes stuff not match -typedef void (*OSErrorHandlerEx)(OSError error, OSContext* context, u32, u32, ...); +typedef void (*OSErrorHandler)(OSError error, OSContext* context, ...); OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler); void __OSUnhandledException(__OSException exception, OSContext* context, u32 dsisr, u32 dar); diff --git a/src/JSystem/JUtility/JUTException.cpp b/src/JSystem/JUtility/JUTException.cpp index 968de1dc2..eafcf4c20 100644 --- a/src/JSystem/JUtility/JUTException.cpp +++ b/src/JSystem/JUtility/JUTException.cpp @@ -17,7 +17,7 @@ #include "dolphin/vi/vi.h" struct CallbackObject { - /* 0x00 */ OSErrorHandler callback; + /* 0x00 */ JUTExceptionUserCallback callback; /* 0x04 */ u16 error; /* 0x06 */ u16 pad_0x06; /* 0x08 */ OSContext* context; @@ -49,17 +49,17 @@ const char* JUTException::sCpuExpName[] = { "FLOATING POINT", }; JUTException* JUTException::sErrorManager; -OSErrorHandler JUTException::sPreUserCallback; -OSErrorHandler JUTException::sPostUserCallback; +JUTExceptionUserCallback JUTException::sPreUserCallback; +JUTExceptionUserCallback JUTException::sPostUserCallback; /* 802C4AC8-802C4BAC .text __ct__12JUTExceptionFP14JUTDirectPrint */ JUTException::JUTException(JUTDirectPrint* directPrint) : JKRThread(0x4000, 0x10, 0) { mDirectPrint = directPrint; - OSSetErrorHandler(EXCEPTION_DSI, errorHandler); - OSSetErrorHandler(EXCEPTION_ISI, errorHandler); - OSSetErrorHandler(EXCEPTION_PROGRAM, errorHandler); - OSSetErrorHandler(EXCEPTION_ALIGNMENT, errorHandler); - OSSetErrorHandler(EXCEPTION_MEMORY_PROTECTION, errorHandler); + OSSetErrorHandler(EXCEPTION_DSI, (OSErrorHandler)errorHandler); + OSSetErrorHandler(EXCEPTION_ISI, (OSErrorHandler)errorHandler); + OSSetErrorHandler(EXCEPTION_PROGRAM, (OSErrorHandler)errorHandler); + OSSetErrorHandler(EXCEPTION_ALIGNMENT, (OSErrorHandler)errorHandler); + OSSetErrorHandler(EXCEPTION_MEMORY_PROTECTION, (OSErrorHandler)errorHandler); setFPException(0); sPreUserCallback = NULL; @@ -96,7 +96,7 @@ void* JUTException::run() { while (true) { OSReceiveMessage(&sMessageQueue, &message, OS_MESSAGE_BLOCK); CallbackObject* cb = (CallbackObject*)message; - OSErrorHandler callback = cb->callback; + JUTExceptionUserCallback callback = cb->callback; u16 error = cb->error; OSContext* context = cb->context; int r24 = cb->param_3; @@ -214,7 +214,7 @@ void JUTException::errorHandler(OSError error, OSContext* context, u32 param_3, void JUTException::setFPException(u32 fpscr_enable_bits) { __OSFpscrEnableBits = fpscr_enable_bits; if (fpscr_enable_bits) { - OSSetErrorHandler(EXCEPTION_FLOATING_POINT_EXCEPTION, errorHandler); + OSSetErrorHandler(EXCEPTION_FLOATING_POINT_EXCEPTION, (OSErrorHandler)errorHandler); } else { OSSetErrorHandler(EXCEPTION_FLOATING_POINT_EXCEPTION, NULL); } @@ -802,15 +802,15 @@ void JUTException::createFB() { } /* 802C6868-802C6878 .text setPreUserCallback__12JUTExceptionFPFUsP9OSContextUlUl_v */ -OSErrorHandler JUTException::setPreUserCallback(OSErrorHandler callback) { - OSErrorHandler previous = sPreUserCallback; +JUTExceptionUserCallback JUTException::setPreUserCallback(JUTExceptionUserCallback callback) { + JUTExceptionUserCallback previous = sPreUserCallback; sPreUserCallback = callback; return previous; } /* 802C6878-802C6888 .text setPostUserCallback__12JUTExceptionFPFUsP9OSContextUlUl_v */ -OSErrorHandler JUTException::setPostUserCallback(OSErrorHandler callback) { - OSErrorHandler previous = sPostUserCallback; +JUTExceptionUserCallback JUTException::setPostUserCallback(JUTExceptionUserCallback callback) { + JUTExceptionUserCallback previous = sPostUserCallback; sPostUserCallback = callback; return previous; } diff --git a/src/dolphin/os/OSError.c b/src/dolphin/os/OSError.c index dc72b4563..1ebe52776 100644 --- a/src/dolphin/os/OSError.c +++ b/src/dolphin/os/OSError.c @@ -12,8 +12,8 @@ extern volatile u32 __OSLastInterruptSrr0; extern volatile s16 __OSLastInterrupt; extern volatile OSTime __OSLastInterruptTime; -extern OSErrorHandlerEx __OSErrorTable[EXCEPTION_MAX]; -OSErrorHandlerEx __OSErrorTable[EXCEPTION_MAX]; +extern OSErrorHandler __OSErrorTable[EXCEPTION_MAX]; +OSErrorHandler __OSErrorTable[EXCEPTION_MAX]; #define FPSCR_ENABLE (FPSCR_VE | FPSCR_OE | FPSCR_UE | FPSCR_ZE | FPSCR_XE) u32 __OSFpscrEnableBits = FPSCR_ENABLE; @@ -53,12 +53,12 @@ __declspec(weak) void OSPanic(const char* file, s32 line, const char* msg, ...) } OSErrorHandler OSSetErrorHandler(OSError error, OSErrorHandler handler) { - OSErrorHandlerEx oldHandler; + OSErrorHandler oldHandler; BOOL enabled; enabled = OSDisableInterrupts(); oldHandler = __OSErrorTable[error]; - __OSErrorTable[error] = (OSErrorHandlerEx)handler; + __OSErrorTable[error] = (OSErrorHandler)handler; if (error == EXCEPTION_FLOATING_POINT_EXCEPTION) { u32 msr; diff --git a/src/dolphin/os/OSMemory.c b/src/dolphin/os/OSMemory.c index f53e44308..05ce86939 100644 --- a/src/dolphin/os/OSMemory.c +++ b/src/dolphin/os/OSMemory.c @@ -6,7 +6,7 @@ vu16 __MEMRegs[64] AT_ADDRESS(0xCC004000); -extern OSErrorHandlerEx __OSErrorTable[16]; +extern OSErrorHandler __OSErrorTable[EXCEPTION_MAX]; u32 OSGetConsoleSimulatedMemSize() { return *(u32*)(OSPhysicalToCached(0x00F0)); diff --git a/src/dolphin/os/OSThread.c b/src/dolphin/os/OSThread.c index b156818f9..ad7faca62 100644 --- a/src/dolphin/os/OSThread.c +++ b/src/dolphin/os/OSThread.c @@ -78,7 +78,7 @@ volatile OSContext* __OSFPUContext AT_ADDRESS(OS_BASE_CACHED + 0x00D8); // External References: // -extern OSErrorHandlerEx __OSErrorTable[17]; +extern OSErrorHandler __OSErrorTable[EXCEPTION_MAX]; extern u32 __OSFpscrEnableBits; void _epilog(); diff --git a/src/m_Do/m_Do_machine.cpp b/src/m_Do/m_Do_machine.cpp index 9d6b290df..e43ebd119 100644 --- a/src/m_Do/m_Do_machine.cpp +++ b/src/m_Do/m_Do_machine.cpp @@ -258,7 +258,7 @@ void myExceptionCallback(OSError, OSContext*, u32, u32) { } /* 8000C3C0-8000C70C .text fault_callback_scroll__FUsP9OSContextUlUl */ -void fault_callback_scroll(u16, OSContext* p_context, u32, u32) { +void fault_callback_scroll(OSError, OSContext* p_context, u32, u32) { JUTException* manager = JUTException::getManager(); JUTConsole* exConsole = manager->getConsole();