diff options
| author | Dragorn421 <Dragorn421@users.noreply.github.com> | 2024-09-08 23:47:25 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-09-08 17:47:25 -0400 |
| commit | fb37d7c6cd930ebe170874eb88abc32678403669 (patch) | |
| tree | 8e371c25bf72a9dd5f04b3e6307144311df1b15a /include/libc64 | |
| parent | 900c2f0f686fc391a50d24f391d7a1cb4e2ed614 (diff) | |
[headers 13] osMalloc.h -> include/libc64/os_malloc.h (#2175)
* [headers 13] osMalloc.h -> include/libc64/os_malloc.h
* also update the #includes :)
Diffstat (limited to 'include/libc64')
| -rw-r--r-- | include/libc64/os_malloc.h | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/include/libc64/os_malloc.h b/include/libc64/os_malloc.h new file mode 100644 index 000000000..e31a6f08f --- /dev/null +++ b/include/libc64/os_malloc.h @@ -0,0 +1,72 @@ +#ifndef LIBC64_OS_MALLOC_H +#define LIBC64_OS_MALLOC_H + +#include "ultra64.h" + +struct ArenaNode; + +typedef struct Arena { + /* 0x00 */ struct ArenaNode* head; + /* 0x04 */ void* start; +#if PLATFORM_N64 + /* 0x08 */ u32 size; + /* 0x0C */ u8 allocFailures; +#elif PLATFORM_GC + /* 0x08 */ OSMesgQueue lockQueue; + /* 0x20 */ u8 allocFailures; // only used in non-debug builds + /* 0x21 */ u8 isInit; + /* 0x22 */ u8 flag; +#endif +} Arena; // size = 0x10 (N64), size = 0x24 (GC) + +typedef struct ArenaNode { + /* 0x00 */ s16 magic; + /* 0x02 */ s16 isFree; + /* 0x04 */ u32 size; + /* 0x08 */ struct ArenaNode* next; + /* 0x0C */ struct ArenaNode* prev; +#if PLATFORM_N64 || OOT_DEBUG + /* 0x10 */ const char* filename; + /* 0x14 */ int line; + /* 0x18 */ OSId threadId; + /* 0x1C */ Arena* arena; + /* 0x20 */ OSTime time; + /* 0x28 */ u8 unk_28[0x30-0x28]; // probably padding +#endif +} ArenaNode; // size = 0x30 (N64 and GC debug), size = 0x10 (GC retail) + +#if PLATFORM_N64 +#define DECLARE_INTERRUPT_MASK OSIntMask __mask; +#define CLEAR_INTERRUPTS() __mask = osSetIntMask(OS_IM_NONE) +#define DISABLE_INTERRUPTS() __mask = osSetIntMask(OS_IM_NONE) +#define RESTORE_INTERRUPTS() osSetIntMask(__mask) +#else +#define DECLARE_INTERRUPT_MASK +#define CLEAR_INTERRUPTS() (void)0 +#define DISABLE_INTERRUPTS() (void)0 +#define RESTORE_INTERRUPTS() (void)0 +#endif + +void __osMallocInit(Arena* arena, void* start, s32 size); +void __osMallocCleanup(Arena* arena); +s32 __osMallocIsInitialized(Arena* arena); +void* __osMalloc(Arena* arena, u32 size); +void* __osMallocR(Arena* arena, u32 size); +void __osFree(Arena* arena, void* ptr); +void* __osRealloc(Arena* arena, void* ptr, u32 newSize); +void ArenaImpl_GetSizes(Arena* arena, u32* outMaxFree, u32* outFree, u32* outAlloc); +s32 __osCheckArena(Arena* arena); + +#if OOT_DEBUG +void* __osMallocDebug(Arena* arena, u32 size, const char* file, int line); +void* __osMallocRDebug(Arena* arena, u32 size, const char* file, int line); +void __osFreeDebug(Arena* arena, void* ptr, const char* file, int line); +void* __osReallocDebug(Arena* arena, void* ptr, u32 newSize, const char* file, int line); +void __osDisplayArena(Arena* arena); + +extern u32 __osMalloc_FreeBlockTest_Enable; +#else +extern u32 gTotalAllocFailures; +#endif + +#endif |
