From 7e97dfab7bf2ed99a1ba31d78703816f1b6d5e38 Mon Sep 17 00:00:00 2001 From: jdflyer Date: Tue, 11 Jan 2022 19:36:28 -0700 Subject: [PATCH] Match destructor and msl_c header include fixes --- include/DynamicLink.h | 67 ++++++++++ include/d/save/d_save.h | 4 +- include/dolphin/os/OSLink.h | 2 +- libs/JSystem/JKernel/JKRThread.cpp | 2 +- libs/JSystem/JUtility/JUTDirectPrint.cpp | 2 +- src/DynamicLink.cpp | 156 +++++++---------------- 6 files changed, 115 insertions(+), 118 deletions(-) diff --git a/include/DynamicLink.h b/include/DynamicLink.h index 0ad0393ecea..633ba0abf8f 100644 --- a/include/DynamicLink.h +++ b/include/DynamicLink.h @@ -2,5 +2,72 @@ #define DYNAMICLINK_H #include "dolphin/types.h" +#include "dolphin/os/OSLink.h" +#include "m_Do/m_Do_dvd_thread.h" +#include "JSystem/JKernel/JKRFileCache.h" + +struct DynamicModuleControlBase { + u16 mLinkCount; //0x0 + u16 mDoLinkCount; //0x2 + DynamicModuleControlBase* mPrev; //0x4 + DynamicModuleControlBase* mNext; //0x8 + + /* 802621CC */ virtual ~DynamicModuleControlBase(); //0xC + /* 800188DC */ virtual const char* getModuleName() const; + /* 80263210 */ virtual int getModuleSize() const; + /* 80263200 */ virtual const char* getModuleTypeString() const; + /* 80262470 */ virtual void dump(); + /* 802631FC */ virtual void dump2(); + /* 802631DC */ virtual bool do_load(); + /* 802631F4 */ virtual bool do_load_async(); + /* 802631E4 */ virtual bool do_unload(); + /* 802631D4 */ virtual BOOL do_link(); + /* 802631EC */ virtual bool do_unlink(); + /* 80262284 */ DynamicModuleControlBase(); + /* 802622D0 */ bool link(); + /* 80262364 */ bool unlink(); + /* 802623EC */ bool load_async(); + /* 8026242C */ bool force_unlink(); + + static inline DynamicModuleControlBase* getFirstClass() {return mFirst;} + inline DynamicModuleControlBase* getNextClass() {return mNext;} + + + static DynamicModuleControlBase* mFirst; + static DynamicModuleControlBase* mLast; +}; + +struct DynamicModuleControl : DynamicModuleControlBase { + /* 800188E4 */ virtual ~DynamicModuleControl(); + /* 80263218 */ virtual const char* getModuleName() const; + /* 80263000 */ virtual int getModuleSize() const; + /* 80263070 */ virtual const char* getModuleTypeString() const; + virtual void dump() = 0; + /* 80262C0C */ virtual void dump2(); + /* 802627E8 */ virtual bool do_load(); + /* 80262AFC */ virtual bool do_load_async(); + /* 80262BC4 */ virtual bool do_unload(); + /* 80262C5C */ virtual BOOL do_link(); + /* 80262F28 */ virtual bool do_unlink(); + /* 80262660 */ DynamicModuleControl(char const*); + /* 802626D0 */ static JKRArchive* mountCallback(void*); + /* 8026275C */ bool initialize(); + /* 80262794 */ static void* callback(void*); + + OSModuleInfo* mModule; //0x10 + void* mBss; //0x14 + u32 unk_24; //0x18 + const char* mName; //0x1c + u8 mResourceType; //0x20 + u8 unk_33; //0x21 + u16 mChecksum; //0x22 + s32 mSize; //0x24 + mDoDvdThd_callback_c* mAsyncLoadCallback; //0x28 + + static u32 sAllocBytes; + static JKRArchive* sArchive; + static JKRFileCache* sFileCache; +}; + #endif /* DYNAMICLINK_H */ diff --git a/include/d/save/d_save.h b/include/d/save/d_save.h index 217ba4c4190..f7c906c0e97 100644 --- a/include/d/save/d_save.h +++ b/include/d/save/d_save.h @@ -1,8 +1,8 @@ #ifndef D_SAVE_D_SAVE_H #define D_SAVE_D_SAVE_H -#include "MSL_C.PPCEABI.bare.H/MSL_Common/src/printf.h" -#include "MSL_C.PPCEABI.bare.H/MSL_Common/src/string.h" +#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/printf.h" +#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/string.h" #include "SSystem/SComponent/c_xyz.h" #include "dolphin/types.h" diff --git a/include/dolphin/os/OSLink.h b/include/dolphin/os/OSLink.h index 44476eb4853..12a1ba60016 100644 --- a/include/dolphin/os/OSLink.h +++ b/include/dolphin/os/OSLink.h @@ -13,7 +13,7 @@ struct OSModuleInfo { OSModuleInfo* mNext; OSModuleInfo* mPrev; u32 mNumSections; - struct { //Needed to get an assert corret; very likely bigger + struct { //Needed to get an assert correct; very likely bigger u32 sectionInfoOffset; } info; u32 mModuleNameOffset; diff --git a/libs/JSystem/JKernel/JKRThread.cpp b/libs/JSystem/JKernel/JKRThread.cpp index a9b1500360a..dcecd222cdd 100644 --- a/libs/JSystem/JKernel/JKRThread.cpp +++ b/libs/JSystem/JKernel/JKRThread.cpp @@ -6,7 +6,7 @@ #include "JSystem/JKernel/JKRThread.h" #include "JSystem/JKernel/JKRExpHeap.h" #include "JSystem/JUtility/JUTAssert.h" -#include "MSL_C.PPCEABI.bare.H/MSL_Common/src/printf.h" +#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/printf.h" #include "dol2asm.h" #include "dolphin/types.h" diff --git a/libs/JSystem/JUtility/JUTDirectPrint.cpp b/libs/JSystem/JUtility/JUTDirectPrint.cpp index 43d84c9aa84..5c84f565d28 100644 --- a/libs/JSystem/JUtility/JUTDirectPrint.cpp +++ b/libs/JSystem/JUtility/JUTDirectPrint.cpp @@ -4,7 +4,7 @@ // #include "JSystem/JUtility/JUTDirectPrint.h" -#include "MSL_C.PPCEABI.bare.H/MSL_Common/src/printf.h" +#include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/printf.h" #include "Runtime.PPCEABI.H/__va_arg.h" #include "dol2asm.h" #include "dolphin/os/OSCache.h" diff --git a/src/DynamicLink.cpp b/src/DynamicLink.cpp index d81f12bb987..7b745ed2d7e 100644 --- a/src/DynamicLink.cpp +++ b/src/DynamicLink.cpp @@ -8,76 +8,10 @@ #include "dolphin/types.h" #include "dolphin/os/OS.h" #include "JSystem/JUtility/JUTConsole.h" -#include "m_Do/m_Do_dvd_thread.h" #include "m_Do/m_Do_ext.h" -#include "JSystem/JKernel/JKRFileCache.h" -#include "dolphin/os/OSLink.h" #include "MSL_C.PPCEABI.bare.H/MSL_Common/Src/printf.h" #include "JSystem/JKernel/JKRDvdRipper.h" -struct DynamicModuleControlBase { - u16 mLinkCount; //0x0 - u16 mDoLinkCount; //0x2 - DynamicModuleControlBase* mPrev; //0x4 - DynamicModuleControlBase* mNext; //0x8 - - /* 802621CC */ virtual ~DynamicModuleControlBase(); //0xC - /* 800188DC */ virtual const char* getModuleName() const; - /* 80263210 */ virtual int getModuleSize() const; - /* 80263200 */ virtual const char* getModuleTypeString() const; - /* 80262470 */ virtual void dump(); - /* 802631FC */ virtual void dump2(); - /* 802631DC */ virtual bool do_load(); - /* 802631F4 */ virtual bool do_load_async(); - /* 802631E4 */ virtual bool do_unload(); - /* 802631D4 */ virtual BOOL do_link(); - /* 802631EC */ virtual bool do_unlink(); - /* 80262284 */ DynamicModuleControlBase(); - /* 802622D0 */ bool link(); - /* 80262364 */ bool unlink(); - /* 802623EC */ bool load_async(); - /* 8026242C */ bool force_unlink(); - - static inline DynamicModuleControlBase* getFirstClass() {return mFirst;} - inline DynamicModuleControlBase* getNextClass() {return mNext;} - - - static DynamicModuleControlBase* mFirst; - static DynamicModuleControlBase* mLast; -}; - -struct DynamicModuleControl : DynamicModuleControlBase { - /* 800188E4 */ virtual ~DynamicModuleControl(); - /* 80263218 */ virtual const char* getModuleName() const; - /* 80263000 */ virtual int getModuleSize() const; - /* 80263070 */ virtual const char* getModuleTypeString() const; - //virtual void dump(); - /* 80262C0C */ virtual void dump2(); - /* 802627E8 */ virtual bool do_load(); - /* 80262AFC */ virtual bool do_load_async(); - /* 80262BC4 */ virtual bool do_unload(); - /* 80262C5C */ virtual BOOL do_link(); - /* 80262F28 */ virtual bool do_unlink(); - /* 80262660 */ DynamicModuleControl(char const*); - /* 802626D0 */ static JKRArchive* mountCallback(void*); - /* 8026275C */ bool initialize(); - /* 80262794 */ static void* callback(void*); - - OSModuleInfo* mModule; //0x10 - void* mBss; //0x14 - u32 unk_24; //0x18 - const char* mName; //0x1c - u8 mResourceType; //0x20 - u8 unk_33; //0x21 - u16 mChecksum; //0x22 - s32 mSize; //0x24 - mDoDvdThd_callback_c* mAsyncLoadCallback; //0x28 - - static u32 sAllocBytes; - static JKRArchive* sArchive; - static JKRFileCache* sFileCache; -}; - // // Forward References: // @@ -167,14 +101,23 @@ DynamicModuleControlBase* DynamicModuleControlBase::mLast; /* 802621CC-80262284 25CB0C 00B8+00 1/0 2/2 0/0 .text __dt__24DynamicModuleControlBaseFv */ -#pragma push -#pragma optimization_level 0 -#pragma optimizewithasm off -asm DynamicModuleControlBase::~DynamicModuleControlBase() { - nofralloc -#include "asm/DynamicLink/__dt__24DynamicModuleControlBaseFv.s" +DynamicModuleControlBase::~DynamicModuleControlBase() { + force_unlink(); + if (mPrev!=NULL) { + mPrev->mNext = mNext; + } + if (mNext!=NULL) { + mNext->mPrev = mPrev; + } + if (mFirst==this) { + mFirst = mNext; + } + if (mLast==this) { + mLast = mPrev; + } + mNext = NULL; + mPrev = NULL; } -#pragma pop /* 80262284-802622D0 25CBC4 004C+00 1/1 0/0 0/0 .text __ct__24DynamicModuleControlBaseFv */ @@ -248,30 +191,37 @@ void DynamicModuleControlBase::dump() { int totalSize = 0; JUTReportConsole_f("\nDynamicModuleControlBase::dump()\n"); JUTReportConsole_f("Do Lnk Size Name\n"); + //lbl_80262608 while (current!=NULL) { - if (current->mDoLinkCount!=0||current->mLinkCount!=0) { - int size = current->getModuleSize(); + //lbl_802624B8 + u16 doLinkCount = current->mDoLinkCount; + u16 linkCount = current->mLinkCount; + if (doLinkCount!=0||linkCount!=0) { + //lbl_802624D0 + u32 size = current->getModuleSize(); const char* name = current->getModuleName(); - if (size>=0) { - if (name==NULL) { - name = "(Null)"; - } + if(size<0xFFFFFFFF) { + name = (name!=NULL) ? name : "(Null)"; + //lbl_80262524 const char* type = current->getModuleTypeString(); - JUTReportConsole_f("%3d%3d%5.1f %05x %-4s %-24s ",mDoLinkCount,mLinkCount,(float)size*((float)1/(float)1024),size,type,name); - totalSize = totalSize + size; - }else{ - if (name==NULL) { - name = "(Null)"; - } + JUTReportConsole_f("%3d%3d%5.1f %05x %-4s %-24s ",doLinkCount,linkCount,size*(1.0f/1024.0f),size,type,name); + totalSize=totalSize+size; + }else{ + //lbl_80262588 + name = (name!=NULL) ? name : "(Null)"; + //lbl_802625A4 const char* type = current->getModuleTypeString(); - JUTReportConsole_f("%3d%3d ???? ????? %-4s %-24s ",mDoLinkCount,mLinkCount,type,name); + JUTReportConsole_f("%3d%3d ???? ????? %-4s %-24s ",doLinkCount,linkCount,type,name); } + //lbl_802625DC + current->dump2(); + JUTReportConsole_f("\n"); } - current->dump2(); - JUTReportConsole_f("\n"); - current=current->getNextClass(); + //lbl_80262604 + current = getNextClass(); } - JUTReportConsole_f("TotalSize %6.2f %06x\n\n",(float)totalSize*(float)(1/1024),totalSize); + //lbl_80262608 + JUTReportConsole_f("TotalSize %6.2f %06x\n\n",(1.0f/1024.0f)*totalSize,totalSize); } #else /* ############################################################################################## */ @@ -342,7 +292,7 @@ SECTION_DEAD static char const* const stringBase_8039A57B = "Base"; JKRArchive* DynamicModuleControl::mountCallback(void* param_0) { JKRExpHeap* heap = mDoExt_getArchiveHeap(); sFileCache = JKRFileCache::mount("/rel/Final/Release",heap,NULL); - sArchive = JKRArchive::mount("RELS.arc",JKRArchive::MOUNT_COMP,heap,JKRArchive::MOUNT_DIRECTION_HEAD); + sArchive = JKRArchive::mount("aRELS.arc",JKRArchive::MOUNT_COMP,heap,JKRArchive::MOUNT_DIRECTION_HEAD); if (sArchive == NULL) { OSReport_Warning("マウント失敗ですが単にアーカイブを作ってないだけなら遅いだけです %s\n","RELS.arc"); } @@ -378,7 +328,6 @@ static u32 calcSum2(u16 const* data, u32 size) { #ifdef NONMATCHING bool DynamicModuleControl::do_load() { - if (mModule!=NULL) { return true; } @@ -545,8 +494,8 @@ BOOL DynamicModuleControl::do_link() { OSGetTime(); OSGetTime(); if(mModule->mModuleVersion>=3) { - u32 unk = mModule->fixSize + 0x1f; - u32 unk3 = unk & ~0x1f; + u32 unk = mModule->fixSize; + u32 unk3 = (unk+0x1f) & ~0x1f; u32 unk2 = (u32)mModule+unk3; s32 size = JKRHeap::getSize(mModule,NULL); if(size<0) { @@ -704,25 +653,6 @@ SECTION_DATA extern void* __vt__20DynamicModuleControl[13] = { (void*)do_unlink__20DynamicModuleControlFv, }; - - -/* 803C34F4-803C3528 020614 0034+00 2/2 0/0 0/0 .data __vt__24DynamicModuleControlBase */ -SECTION_DATA extern void* __vt__24DynamicModuleControlBase[13] = { - (void*)NULL /* RTTI */, - (void*)NULL, - (void*)__dt__24DynamicModuleControlBaseFv, - (void*)getModuleName__24DynamicModuleControlBaseCFv, - (void*)getModuleSize__24DynamicModuleControlBaseCFv, - (void*)getModuleTypeString__24DynamicModuleControlBaseCFv, - (void*)dump__24DynamicModuleControlBaseFv, - (void*)dump2__24DynamicModuleControlBaseFv, - (void*)do_load__24DynamicModuleControlBaseFv, - (void*)do_load_async__24DynamicModuleControlBaseFv, - (void*)do_unload__24DynamicModuleControlBaseFv, - (void*)do_link__24DynamicModuleControlBaseFv, - (void*)do_unlink__24DynamicModuleControlBaseFv, -}; - /* 80263088-8026308C 25D9C8 0004+00 0/0 0/0 756/756 .text ModuleProlog */ extern "C" void ModuleProlog() { /* empty function */