From 71533cf8ca63469367c8a834fd2633489bc8667b Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Mon, 25 Aug 2025 17:28:08 -0400 Subject: [PATCH] some names --- include/libc64/os_malloc.h | 25 +++++++++------- src/boot/libc64/__osMalloc.c | 41 ++++++++++++++------------- tools/disasm/n64-jp-1.1/variables.txt | 3 +- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/include/libc64/os_malloc.h b/include/libc64/os_malloc.h index 30b54cf270..575529e1a7 100644 --- a/include/libc64/os_malloc.h +++ b/include/libc64/os_malloc.h @@ -7,6 +7,8 @@ #include "unk.h" #include "versions.h" +struct Arena; + typedef struct ArenaNode { /* 0x0 */ s16 magic; // Should always be 0x7373 /* 0x2 */ s16 isFree; @@ -14,20 +16,20 @@ typedef struct ArenaNode { /* 0x8 */ struct ArenaNode* next; /* 0xC */ struct ArenaNode* prev; #if MM_VERSION <= N64_JP_1_1 - /* 0x10 */ s32 unk_10; - /* 0x14 */ s32 unk_14; - /* 0x18 */ OSId unk_18; - /* 0x1C */ void *unk_1C; - /* 0x20 */ OSTime unk_20; + /* 0x10 */ const char* filename; + /* 0x14 */ int line; + /* 0x18 */ OSId threadId; + /* 0x1C */ struct Arena *arena; + /* 0x20 */ OSTime time; /* 0x28 */ UNK_TYPE1 unk_28[0x8]; #endif -} ArenaNode; // size = 0x10 +} ArenaNode; // size = 0x10 N64 US, size = 0x30 N64 JP 1.1 typedef struct Arena { /* 0x00 */ ArenaNode* head; /* 0x04 */ void* start; /* 0x08 */ OSMesgQueue lock; - /* 0x20 */ u8 unk20; + /* 0x20 */ u8 allocFailures; /* 0x21 */ u8 isInit; /* 0x22 */ u8 flag; } Arena; // size = 0x24 @@ -43,10 +45,13 @@ void __osGetSizes(Arena* arena, size_t* outMaxFree, size_t* outFree, size_t* out s32 __osCheckArena(Arena* arena); #if MM_VERSION <= N64_JP_1_1 -void *__osMallocDebug(Arena *arena, size_t size, s32 arg2, s32 arg3); -void *__osMallocRDebug(Arena *arena, size_t size, s32 arg2, s32 arg3); - +void *__osMallocDebug(Arena *arena, size_t size, const char* file, int line); +void *__osMallocRDebug(Arena *arena, size_t size, const char* file, int line); +void __osFreeDebug(Arena* arena, void* ptr, const char* file, int line); void *__osReallocDebug(Arena* arena, void* ptr, size_t newSize, const char* file, int line); +u8 ArenaImpl_GetAllocFailures(Arena* arena); + +extern s32 gTotalAllocFailures; #endif #endif diff --git a/src/boot/libc64/__osMalloc.c b/src/boot/libc64/__osMalloc.c index 005bb1b7f9..7705368ee3 100644 --- a/src/boot/libc64/__osMalloc.c +++ b/src/boot/libc64/__osMalloc.c @@ -28,22 +28,22 @@ #else #define SET_DEBUG_INFO(node, f, l, a) \ { \ - node->unk_10 = (f); \ - node->unk_14 = (l); \ - node->unk_18 = osGetThreadId(NULL); \ - node->unk_1C = (a); \ - node->unk_20 = osGetTime(); \ + node->filename = (f); \ + node->line = (l); \ + node->threadId = osGetThreadId(NULL); \ + node->arena = (a); \ + node->time = osGetTime(); \ } (void) 0 -#define CHECK_CORRECT_ARENA(node, arena) ((node)->unk_1C == (arena)) +#define CHECK_CORRECT_ARENA(node, arena) ((node)->arena == (arena)) -s32 D_800984A0_unknown = 0; +s32 gTotalAllocFailures = 0; // "Arena_failcnt" #define CHECK_ALLOC_FAILURE(arena, ptr) \ do { \ if ((ptr) == NULL) { \ - D_800984A0_unknown++; \ - (arena)->unk20++; \ + gTotalAllocFailures++; \ + (arena)->allocFailures++; \ } \ } while (0) #endif @@ -157,7 +157,7 @@ u8 __osMallocIsInitialized(Arena* arena) { } #if MM_VERSION <= N64_JP_1_1 -void *__osMallocDebug(Arena *arena, size_t size, s32 arg2, s32 arg3) { +void *__osMallocDebug(Arena *arena, size_t size, const char* file, int line) { ArenaNode *iter; ArenaNode *newNode; void *alloc = NULL; @@ -191,7 +191,7 @@ void *__osMallocDebug(Arena *arena, size_t size, s32 arg2, s32 arg3) { iter->isFree = false; - SET_DEBUG_INFO(iter, arg2, arg3, arena); + SET_DEBUG_INFO(iter, file, line, arena); alloc = (void*)((uintptr_t)iter + sizeof(ArenaNode)); break; @@ -204,8 +204,10 @@ void *__osMallocDebug(Arena *arena, size_t size, s32 arg2, s32 arg3) { return alloc; } +#endif -void *__osMallocRDebug(Arena *arena, size_t size, s32 arg2, s32 arg3) { +#if MM_VERSION <= N64_JP_1_1 +void *__osMallocRDebug(Arena *arena, size_t size, const char* file, int line) { ArenaNode *iter; ArenaNode *newNode; size_t blockSize; @@ -240,7 +242,7 @@ void *__osMallocRDebug(Arena *arena, size_t size, s32 arg2, s32 arg3) { iter->isFree = false; - SET_DEBUG_INFO(iter, arg2, arg3, arena); + SET_DEBUG_INFO(iter, file, line, arena); alloc = (void*)((uintptr_t)iter + sizeof(ArenaNode)); break; @@ -309,7 +311,7 @@ void* __osMalloc(Arena* arena, size_t size) { iter->isFree = false; - SET_DEBUG_INFO(iter, 0, 0, arena); + SET_DEBUG_INFO(iter, NULL, 0, arena); alloc = (void*)((uintptr_t)iter + sizeof(ArenaNode)); break; @@ -379,7 +381,7 @@ void* __osMallocR(Arena* arena, size_t size) { iter->isFree = false; - SET_DEBUG_INFO(iter, 0, 0, arena); + SET_DEBUG_INFO(iter, NULL, 0, arena); alloc = (void*)((uintptr_t)iter + sizeof(ArenaNode)); break; @@ -427,7 +429,7 @@ void __osFree(Arena* arena, void* ptr) { prev = node->prev; node->isFree = true; - SET_DEBUG_INFO(node, 0, 0, arena); + SET_DEBUG_INFO(node, NULL, 0, arena); // Checks if the next node is contiguous to the current node and if it isn't currently allocated. Then merge the // two nodes into one. @@ -459,9 +461,8 @@ void __osFree(Arena* arena, void* ptr) { ArenaImpl_Unlock(arena); } -// TODO #if MM_VERSION <= N64_JP_1_1 -void __osFreeDebug(Arena* arena, void* ptr, s32 arg2, s32 arg3) { +void __osFreeDebug(Arena* arena, void* ptr, const char* file, int line) { ArenaNode* node; ArenaNode* next; ArenaNode* prev; @@ -482,7 +483,7 @@ void __osFreeDebug(Arena* arena, void* ptr, s32 arg2, s32 arg3) { prev = node->prev; node->isFree = true; - SET_DEBUG_INFO(node, arg2, arg3, arena); + SET_DEBUG_INFO(node, file, line, arena); // Checks if the next node is contiguous to the current node and if it isn't currently allocated. Then merge the // two nodes into one. @@ -674,6 +675,6 @@ s32 __osCheckArena(Arena* arena) { #if MM_VERSION <= N64_JP_1_1 u8 ArenaImpl_GetAllocFailures(Arena* arena) { - return arena->unk20; + return arena->allocFailures; } #endif diff --git a/tools/disasm/n64-jp-1.1/variables.txt b/tools/disasm/n64-jp-1.1/variables.txt index 7ae8402e4c..e02197fde7 100644 --- a/tools/disasm/n64-jp-1.1/variables.txt +++ b/tools/disasm/n64-jp-1.1/variables.txt @@ -40,8 +40,7 @@ qNaN0x10000 = 0x80098484; // type:f32 size:0x4 sNaN0x3FFFFF = 0x80098488; // size:0x4 D_8009848C_unknown = 0x8009848C; sRandInt = 0x80098490; // size:0x4 -D_80098494_unknown = 0x80098494; -D_800984A0_unknown = 0x800984A0; +gTotalAllocFailures = 0x800984A0; // size:0x4 osViModeNtscHpf1 = 0x800984B0; // size:0x50 osViModePalLan1 = 0x80098500; // size:0x50 D_80098550_unknown = 0x80098550; // type:s16