summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorDragorn421 <Dragorn421@users.noreply.github.com>2024-09-08 23:47:25 +0200
committerGitHub <noreply@github.com>2024-09-08 17:47:25 -0400
commitfb37d7c6cd930ebe170874eb88abc32678403669 (patch)
tree8e371c25bf72a9dd5f04b3e6307144311df1b15a /include
parent900c2f0f686fc391a50d24f391d7a1cb4e2ed614 (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')
-rw-r--r--include/libc64/os_malloc.h72
-rw-r--r--include/variables.h2
2 files changed, 73 insertions, 1 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
diff --git a/include/variables.h b/include/variables.h
index a242ec05c..92f68735b 100644
--- a/include/variables.h
+++ b/include/variables.h
@@ -2,7 +2,7 @@
#define VARIABLES_H
#include "z64.h"
-#include "osMalloc.h"
+#include "libc64/os_malloc.h"
#include "segment_symbols.h"
extern Mtx D_01000000;