diff options
| author | Anghelo Carvajal <angheloalf95@gmail.com> | 2021-08-18 08:48:08 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-18 08:48:08 -0400 |
| commit | 49922b4856655a48389dbc45138930650e252dea (patch) | |
| tree | 868e4c705a23808e7af2e34f2ed02318d0ffde2f /src/boot_O2/system_malloc.c | |
| parent | 9eb438860cf1bcfe3ee31b1f50c43114606d4f79 (diff) | |
`system_malloc` OK (#261)
* move system_malloc to boot_O2
* Rename StartHeap into SystemArena
* match
* fake system_malloc data
* fix return types
* Rename Alloc to Malloc
* Update tools/disasm/files.txt
Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>
* fix spec
Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>
Diffstat (limited to 'src/boot_O2/system_malloc.c')
| -rw-r--r-- | src/boot_O2/system_malloc.c | 67 |
1 files changed, 48 insertions, 19 deletions
diff --git a/src/boot_O2/system_malloc.c b/src/boot_O2/system_malloc.c index ee8fcd709..61906ce42 100644 --- a/src/boot_O2/system_malloc.c +++ b/src/boot_O2/system_malloc.c @@ -1,21 +1,50 @@ #include "global.h" -#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_Alloc.s") - -#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_AllocR.s") - -#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_Realloc.s") - -#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_Free.s") - -#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_Calloc.s") - -#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_AnalyzeArena.s") - -#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_CheckArena.s") - -#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_InitArena.s") - -#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_Cleanup.s") - -#pragma GLOBAL_ASM("asm/non_matchings/boot/system_malloc/StartHeap_IsInitialized.s") +Arena gSystemArena; + +void* SystemArena_Malloc(u32 size) { + return __osMalloc(&gSystemArena, size); +} + +void* SystemArena_MallocR(u32 size) { + return __osMallocR(&gSystemArena, size); +} + +void* SystemArena_Realloc(void* oldPtr, u32 newSize) { + return __osRealloc(&gSystemArena, oldPtr, newSize); +} + +void SystemArena_Free(void* ptr) { + __osFree(&gSystemArena, ptr); +} + +void* SystemArena_Calloc(u32 elements, u32 size) { + void* ptr; + u32 totalSize = elements * size; + + ptr = __osMalloc(&gSystemArena, totalSize); + if (ptr != NULL) { + bzero(ptr, totalSize); + } + return ptr; +} + +void SystemArena_AnalyzeArena(u32* maxFreeBlock, u32* bytesFree, u32* bytesAllocated) { + __osAnalyzeArena(&gSystemArena, maxFreeBlock, bytesFree, bytesAllocated); +} + +u32 SystemArena_CheckArena(void) { + return __osCheckArena(&gSystemArena); +} + +void SystemArena_InitArena(void* start, u32 size) { + __osMallocInit(&gSystemArena, start, size); +} + +void SystemArena_Cleanup(void) { + __osMallocCleanup(&gSystemArena); +} + +u8 SystemArena_IsInitialized(void) { + return __osMallocIsInitalized(&gSystemArena); +} |
