JKRHeap functions (#6)

* becomeSystemHeap OK! becomeCurrentHeap OK!

* initArena OK!

* static-alloc OK! static-free OK! static-resize OK!

* operator new OK! operator delete OK!

* removed asm/d/file/sel/d_file_sel_info.o from obj_files.mk

* fixed vtable names
This commit is contained in:
Jonathan Wase
2020-11-30 23:24:05 +01:00
committed by GitHub
parent 8a1439e50c
commit 89f4055593
10 changed files with 363 additions and 89 deletions
@@ -3,6 +3,7 @@
#include "dolphin/types.h"
#include "JSystem/JSupport/JSUList/JSUList.h"
#include "JSystem/JKernel/JKRDisposer/JKRDisposer_vtable.h"
class JKRHeap;
class JKRDisposer {
@@ -11,7 +12,7 @@ class JKRDisposer {
~JKRDisposer();
public:
void** __vt;
_VTABLE_JKRDisposer* __vt;
JKRHeap* heap;
JSUPtrLink ptr_link;
};
@@ -0,0 +1,14 @@
#ifndef __JKRDISPOSER_VTABLE_H__
#define __JKRDISPOSER_VTABLE_H__
#include "dolphin/types.h"
class JKRDisposer;
struct _VTABLE_JKRDisposer {
void (*func0)(JKRDisposer*);
void (*_ct)(JKRDisposer*);
void (*_dt)(JKRDisposer*, int);
void (*func4)(JKRDisposer*);
};
#endif
+21 -9
View File
@@ -1,16 +1,20 @@
#ifndef __JKRHEAP_H__
#define __JKRHEAP_H__
#include "dolphin/types.h"
#include "JSystem/JKernel/JKRDisposer/JKRDisposer.h"
#include "JSystem/JKernel/JKRHeap/JKRHeap_vtable.h"
typedef void (*JKRErrorHandler)(void*, unsigned long, int);
class JKRHeap : JKRDisposer {
class JKRHeap {
public:
JKRHeap(void*, u32, JKRHeap*, bool);
~JKRHeap();
static bool initArena(char**, u32*, int);
void becomeSystemHeap();
void becomeCurrentHeap();
JKRHeap* becomeSystemHeap();
JKRHeap* becomeCurrentHeap();
void destroy();
static void* alloc(u32 size, int alignment, JKRHeap* heap);
@@ -30,17 +34,17 @@ class JKRHeap : JKRDisposer {
s32 getSize(void* ptr);
s32 getFreeSize();
u32 getMaxFreeBlock();
u32 getTotalFreeSize();
s32 getMaxFreeBlock();
s32 getTotalFreeSize();
u8 changeGroupID(u8 param_1);
u32 getMaxAllocatableSize(int alignment);
s32 getMaxAllocatableSize(int alignment);
static JKRHeap* findFromRoot(void* ptr);
JKRHeap* find(void* ptr) const;
JKRHeap* findAllHeap(void* ptr) const;
void dispose_subroutine(u32 begin, u32 end);
void dispose(void* ptr, u32 size);
bool dispose(void* ptr, u32 size);
void dispose(void* begin, void* end);
void dispose();
@@ -53,6 +57,11 @@ class JKRHeap : JKRDisposer {
bool isSubHeap(JKRHeap* heap) const;
public:
union {
JKRDisposer __base;
_VTABLE_JKRHeap* __vt;
};
u8 mutex[24];
u32 begin;
u32 end;
@@ -64,8 +73,9 @@ class JKRHeap : JKRDisposer {
JSUPtrList child_list;
JSUPtrLink heap_link;
JSUPtrList disposable_list;
bool error_handler;
bool error_flag;
u8 field_0x69;
u8 field_0x6a[4];
};
void* operator new(u32 size);
@@ -77,4 +87,6 @@ void* operator new[](u32 size, int alignment);
void* operator new[](u32 size, JKRHeap* heap, int alignment);
void operator delete(void* ptr);
void operator delete[](void* ptr);
void operator delete[](void* ptr);
#endif
@@ -0,0 +1,34 @@
#ifndef __JKRHEAP_VTABLE_H__
#define __JKRHEAP_VTABLE_H__
#include "dolphin/types.h"
class JKRHeap;
struct _VTABLE_JKRHeap {
void (*func0)(JKRHeap*);
void (*_ct)(JKRHeap*);
void (*_dt)(JKRHeap*);
void (*callAllDisposer)(JKRHeap*);
void (*func4)(JKRHeap*);
void (*func5)(JKRHeap*);
void (*dump_sort)(JKRHeap*);
void (*func7)(JKRHeap*);
void (*do_destroy)(JKRHeap*);
void* (*do_alloc)(JKRHeap*,u32 size, int alignment);
void (*do_free)(JKRHeap*,void*ptr);
void (*do_freeAll)(JKRHeap*);
void (*do_freeTail)(JKRHeap*);
void (*func13)(JKRHeap*);
s32 (*do_resize)(JKRHeap*, void* ptr, u32 size);
s32 (*do_getSize)(JKRHeap*, void* ptr);
s32 (*do_getFreeSize)(JKRHeap*);
s32 (*do_getMaxFreeBlock)(JKRHeap*);
s32 (*do_getTotalFreeSize)(JKRHeap*);
u8 (*do_changeGroupID)(JKRHeap*, u8 param_1);
void (*do_getCurrent)(JKRHeap*);
void (*state_register)(JKRHeap*);
void (*state_compare)(JKRHeap*);
void (*state_dump)(JKRHeap*);
};
#endif