mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-09 14:05:28 -04:00
Fix error handler typedefs
This commit is contained in:
@@ -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<JUTException::JUTExMapFile> 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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user