diff options
| author | Anghelo Carvajal <angheloalf95@gmail.com> | 2023-08-09 20:45:25 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-08-09 20:45:25 -0400 |
| commit | cfa703f013a1e595a418e47ac05df06e9ae4f9b8 (patch) | |
| tree | 6f22ff1f665ac5dfd8f62b321895f846af4bfab5 /include/libc64 | |
| parent | bd0c96e41818de39d243604f2a56bdee779956f2 (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.h | 17 | ||||
| -rw-r--r-- | include/libc64/osmalloc.h | 34 |
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 |
