mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-08-09 10:22:16 -04:00
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:
@@ -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
|
||||
@@ -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
|
||||
+7
-6
@@ -156,12 +156,7 @@ extern "C" {
|
||||
|
||||
// OS
|
||||
extern "C" {
|
||||
void OSInitMutex(void);
|
||||
void OSGetArenaLo(void);
|
||||
void OSGetArenaHi(void);
|
||||
void OSInitAlloc(void);
|
||||
void OSSetArenaLo(void);
|
||||
void OSSetArenaHi(void);
|
||||
void OSInitMutex(u8[24]);
|
||||
void OSEnableScheduler(void);
|
||||
void OSDisableScheduler(void);
|
||||
void OSCheckActiveThreads(void);
|
||||
@@ -178,6 +173,12 @@ extern "C" {
|
||||
void OSReportInit(void);
|
||||
void OSGetCurrentThread(void);
|
||||
void OSTicksToCalendarTime(void);
|
||||
|
||||
u32 OSGetArenaLo();
|
||||
u32 OSGetArenaHi();
|
||||
u32 OSInitAlloc(u32 low, u32 high, int param_3);
|
||||
void OSSetArenaLo(u32 param_1);
|
||||
void OSSetArenaHi(u32 param_1);
|
||||
}
|
||||
|
||||
// DVD
|
||||
|
||||
+14
-5
@@ -1,3 +1,7 @@
|
||||
#include "JSystem/JKernel/JKRDisposer/JKRDisposer_vtable.h"
|
||||
#include "JSystem/JKernel/JKRHeap/JKRHeap_vtable.h"
|
||||
|
||||
|
||||
extern float lbl_80451D5C;
|
||||
extern u8 lbl_80379234[0x64];
|
||||
extern int lbl_804061C0;
|
||||
@@ -81,11 +85,11 @@ extern u8 lbl_803BB498;
|
||||
#define _SDA2_BASE_(dummy) 0
|
||||
|
||||
// func_802CE138
|
||||
extern u32 lbl_803CBF70[24];
|
||||
extern _VTABLE_JKRHeap lbl_803CBF70; // JKRHeap::__vt
|
||||
|
||||
extern void* lbl_80451370; // JKRHeap::sSystemHeap
|
||||
extern void* lbl_80451378; // JKRHeap::sRootHeap
|
||||
extern void* lbl_80451374; // JKRHeap::sCurrentHeap
|
||||
extern JKRHeap* lbl_80451370; // JKRHeap::sSystemHeap
|
||||
extern JKRHeap* lbl_80451378; // JKRHeap::sRootHeap
|
||||
extern JKRHeap* lbl_80451374; // JKRHeap::sCurrentHeap
|
||||
extern void* lbl_8045137C; // JKRHeap::mErrorHandler
|
||||
|
||||
extern u8 lbl_804508B0[8]; // ::*fill*
|
||||
@@ -98,9 +102,14 @@ extern void* lbl_8045138C; // JKRHeap::mUserRamStart
|
||||
extern void* lbl_80451390; // JKRHeap::mUserRamEnd
|
||||
extern u32 lbl_80451394; // JKRHeap::mMemorySize
|
||||
|
||||
extern u8 lbl_80000000;
|
||||
extern u32 lbl_80000028;
|
||||
|
||||
#define OS_GLOBAL(T, ADDR) *((T*)((void*)ADDR))
|
||||
#define OS_GLOBAL_ADDR(T, ADDR) ((T*)((void*)ADDR))
|
||||
|
||||
// func_802CEB40
|
||||
extern char lbl_8039CAD8[12]; // "JKRHeap.cpp"
|
||||
|
||||
// func_802D147C
|
||||
extern void* lbl_803CC0F0[4]; // JKRDisposer::__vt
|
||||
extern _VTABLE_JKRDisposer lbl_803CC0F0; // JKRDisposer::__vt
|
||||
Reference in New Issue
Block a user