summaryrefslogtreecommitdiff
path: root/include/libc64
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2023-08-09 20:45:25 -0400
committerGitHub <noreply@github.com>2023-08-09 20:45:25 -0400
commitcfa703f013a1e595a418e47ac05df06e9ae4f9b8 (patch)
tree6f22ff1f665ac5dfd8f62b321895f846af4bfab5 /include/libc64
parentbd0c96e41818de39d243604f2a56bdee779956f2 (diff)
`malloc.c` (#42)
* malloc * match * bss * Fix naming * move __osMalloc to libc64 folder * move headers to libc64 folder
Diffstat (limited to 'include/libc64')
-rw-r--r--include/libc64/malloc.h17
-rw-r--r--include/libc64/osmalloc.h34
2 files changed, 51 insertions, 0 deletions
diff --git a/include/libc64/malloc.h b/include/libc64/malloc.h
new file mode 100644
index 0000000..47367a3
--- /dev/null
+++ b/include/libc64/malloc.h
@@ -0,0 +1,17 @@
+#ifndef MALLOC_H
+#define MALLOC_H
+
+#include "ultra64.h"
+
+void* malloc(size_t size);
+void* malloc_r(size_t size);
+void* realloc(void* ptr, size_t size);
+void free(void* ptr);
+void* calloc(s32 num, size_t size);
+void GetFreeArena(size_t* outMaxFree, size_t* outFree, size_t* outAlloc);
+s32 CheckArena(void);
+void MallocInit(void* heap, size_t size);
+void MallocCleanup(void);
+s32 MallocIsInitialized(void);
+
+#endif
diff --git a/include/libc64/osmalloc.h b/include/libc64/osmalloc.h
new file mode 100644
index 0000000..9be9095
--- /dev/null
+++ b/include/libc64/osmalloc.h
@@ -0,0 +1,34 @@
+#ifndef OS_MALLOC_H
+#define OS_MALLOC_H
+
+#include "ultra64.h"
+
+typedef struct ArenaNode {
+ /* 0x0 */ s16 magic; // Should always be 0x7373
+ /* 0x2 */ s16 isFree;
+ /* 0x4 */ size_t size;
+ /* 0x8 */ struct ArenaNode* next;
+ /* 0xC */ struct ArenaNode* prev;
+} ArenaNode; // size = 0x10
+
+typedef struct Arena {
+ /* 0x00 */ ArenaNode* head;
+ /* 0x04 */ void* start;
+ /* 0x08 */ OSMesgQueue lock;
+ /* 0x20 */ u8 unk20;
+ /* 0x21 */ u8 isInit;
+ /* 0x22 */ u8 flag;
+} Arena; // size = 0x24
+
+void __osMallocInit(Arena* arena, void* heap, size_t size);
+void __osMallocCleanup(Arena* arena);
+u8 __osMallocIsInitalized(Arena* arena);
+void* __osMalloc(Arena* arena, size_t size);
+void* __osMallocR(Arena* arena, size_t size);
+void __osFree(Arena* arena, void* ptr);
+void* __osRealloc(Arena* arena, void* ptr, size_t newSize);
+void __osGetFreeArena(Arena* arena, size_t* outMaxFree, size_t* outFree, size_t* outAlloc);
+void ArenaImpl_FaultClient(Arena* arena);
+s32 __osCheckArena(Arena* arena);
+
+#endif