d_a_e_pz equivalent (#2330)

* d_a_e_pz equivalent

* rename var

* match f_pc closer to debug

* hopefully fix decompctx

* sdk done

* remove unneeded file
This commit is contained in:
TakaRikka
2025-03-18 12:45:44 -07:00
committed by GitHub
parent 58ba86b6a3
commit d3e9175bfb
48 changed files with 4864 additions and 2962 deletions
@@ -0,0 +1,33 @@
#ifndef MWCPLUSLIB_H
#define MWCPLUSLIB_H
#include <stddef.h>
#ifdef __cplusplus
extern "C" {
#endif
#define CTORARG_TYPE int
#define CTORARG_PARTIAL (0)
#define CTORARG_COMPLETE (1)
#define CTORCALL_COMPLETE(ctor, objptr) (((void (*)(void*, CTORARG_TYPE))ctor)(objptr, CTORARG_COMPLETE))
#define DTORARG_TYPE int
#define DTORCALL_COMPLETE(dtor, objptr) (((void (*)(void*, DTORARG_TYPE))dtor)(objptr, -1))
typedef void* ConstructorDestructor;
extern void __construct_array(void* ptr, ConstructorDestructor ctor, ConstructorDestructor dtor, size_t size, size_t n);
extern void __destroy_arr(void* block, ConstructorDestructor* dtor, size_t size, size_t n);
extern void* __construct_new_array(void* block, ConstructorDestructor ctor, ConstructorDestructor dtor_arg, size_t size, size_t n);
extern void __destroy_new_array(void* block, ConstructorDestructor dtor);
extern void __destroy_new_array2();
extern void __destroy_new_array3();
#ifdef __cplusplus
}
#endif
#endif /* MWCPLUSLIB_H */
@@ -7,7 +7,8 @@
extern "C" {
#endif
#define DTORCALL(dtor, objptr) (((void (*)(void*, int))dtor)(objptr, -1))
typedef short vbase_ctor_arg_type;
typedef char local_cond_type;
typedef struct DestructorChain {
struct DestructorChain* next;
@@ -24,4 +25,4 @@ void __destroy_global_chain(void);
}
#endif
#endif /* NMWEXCEPTION_H */
#endif /* NMWEXCEPTION_H */
@@ -1,121 +1,218 @@
//
// Generated By: dol2asm
// Translation Unit: NMWException
//
#include "NMWException.h"
#include "stddef.h"
#include "dol2asm.h"
#include "MWCPlusLib.h"
//
// Types:
//
typedef void (*unexpected_handler)();
unexpected_handler set_unexpected(unexpected_handler handler);
void unexpected();
struct __partial_array_destructor {
/* 80361E5C */ ~__partial_array_destructor();
};
typedef void (*terminate_handler)();
terminate_handler set_terminate(terminate_handler handler);
void terminate();
//
// Forward References:
//
#define ARRAY_HEADER_SIZE 16
#pragma section "extabindex_"
extern void* const data_8000569C[8];
extern "C" void __destroy_new_array();
extern "C" void __destroy_arr();
extern "C" void __construct_array();
extern "C" void __dt__26__partial_array_destructorFv();
extern "C" void __construct_new_array();
//
// External References:
//
#pragma section "extab_"
extern "C" extern void* const _section_symbol_extab[18];
extern "C" void __dl__FPv();
extern "C" void __dla__FPv();
//
// Declarations:
//
/* 80361C6C-80361CE8 35C5AC 007C+00 2/0 11/11 3/3 .text __destroy_new_array */
void __destroy_new_array() {
// NONMATCHING
extern "C" {
extern void abort();
}
/* 80361CE8-80361D60 35C628 0078+00 1/0 58/58 350/350 .text __destroy_arr */
void __destroy_arr() {
// NONMATCHING
namespace std {
static void dthandler() { abort(); }
static terminate_handler thandler = dthandler;
static void duhandler() { terminate(); }
static unexpected_handler uhandler = duhandler;
extern terminate_handler set_terminate(terminate_handler handler) {
terminate_handler old = thandler;
thandler = handler;
return old;
}
/* 80361D60-80361E5C 35C6A0 00FC+00 1/0 98/98 461/461 .text __construct_array */
void __construct_array() {
// NONMATCHING
extern void terminate() { thandler(); }
extern unexpected_handler set_unexpected(unexpected_handler handler) {
unexpected_handler old = uhandler;
uhandler = handler;
return old;
}
/* 80361E5C-80361F14 35C79C 00B8+00 1/0 1/0 0/0 .text __dt__26__partial_array_destructorFv */
__partial_array_destructor::~__partial_array_destructor() {
// NONMATCHING
extern void unexpected() { uhandler(); }
} // namespace std
extern char __throw_catch_compare(const char* throwtype, const char* catchtype, long* offset_result) {
const char *cptr1, *cptr2;
*offset_result = 0;
if ((cptr2 = catchtype) == 0) {
return true;
}
cptr1 = throwtype;
if (*cptr2 == 'P') {
cptr2++;
if (*cptr2 == 'C')
cptr2++;
if (*cptr2 == 'V')
cptr2++;
if (*cptr2 == 'v') {
if (*cptr1 == 'P' || *cptr1 == '*') {
return true;
}
}
cptr2 = catchtype;
}
switch (*cptr1) {
case '*':
case '!':
if (*cptr1++ != *cptr2++)
return false;
for (;;) {
if (*cptr1 == *cptr2++) {
if (*cptr1++ == '!') {
long offset;
for (offset = 0; *cptr1 != '!';) {
offset = offset * 10 + *cptr1++ - '0';
}
*offset_result = offset;
return true;
}
} else {
while (*cptr1++ != '!') { }
while (*cptr1++ != '!') { }
if (*cptr1 == 0)
return false;
cptr2 = catchtype + 1;
}
}
return false;
}
while ((*cptr1 == 'P' || *cptr1 == 'R') && *cptr1 == *cptr2) {
cptr1++;
cptr2++;
if (*cptr2 == 'C') {
if (*cptr1 == 'C')
cptr1++;
cptr2++;
}
if (*cptr1 == 'C')
return false;
if (*cptr2 == 'V') {
if (*cptr1 == 'V')
cptr1++;
cptr2++;
}
if (*cptr1 == 'V')
return false;
}
for (; *cptr1 == *cptr2; cptr1++, cptr2++) {
if (*cptr1 == 0)
return true;
}
return false;
}
/* 80361F14-80362018 35C854 0104+00 1/0 28/28 13/13 .text __construct_new_array */
void __construct_new_array() {
// NONMATCHING
class __partial_array_destructor {
private:
void* p;
size_t size;
size_t n;
ConstructorDestructor dtor;
public:
size_t i;
__partial_array_destructor(void* array, size_t elementsize, size_t nelements, ConstructorDestructor destructor) {
p = array;
size = elementsize;
n = nelements;
dtor = destructor;
i = n;
}
~__partial_array_destructor() {
char* ptr;
if (i < n && dtor) {
for (ptr = (char*)p + size * i; i > 0; i--) {
ptr -= size;
DTORCALL_COMPLETE(dtor, ptr);
}
}
}
};
extern void* __construct_new_array(void* block, ConstructorDestructor ctor, ConstructorDestructor dtor, size_t size, size_t n) {
char* ptr;
if ((ptr = (char*)block) != 0L) {
size_t* p = (size_t*)ptr;
p[0] = size;
p[1] = n;
ptr += ARRAY_HEADER_SIZE;
if (ctor) {
__partial_array_destructor pad(ptr, size, n, dtor);
char* p;
for (pad.i = 0, p = (char*)ptr; pad.i < n; pad.i++, p += size) {
CTORCALL_COMPLETE(ctor, p);
}
}
}
return ptr;
}
/* ############################################################################################## */
/* 80005660-8000566C -00001 000C+00 1/0 0/0 0/0 .extabindex @206 */
SECTION_EXTABINDEX static void* const lit_206[3] = {
(void*)__destroy_new_array,
(void*)0x0000007C,
(void*)&_section_symbol_extab,
};
extern void __construct_array(void* ptr, ConstructorDestructor ctor, ConstructorDestructor dtor, size_t size, size_t n) {
__partial_array_destructor pad(ptr, size, n, dtor);
char* p;
/* 8000566C-80005678 -00001 000C+00 0/0 0/0 0/0 .extabindex @211 */
#pragma push
#pragma force_active on
SECTION_EXTABINDEX static void* const lit_211[3] = {
(void*)__destroy_arr,
(void*)0x00000078,
(void*)(((char*)&_section_symbol_extab) + 0x8),
};
#pragma pop
for (pad.i = 0, p = (char*)ptr; pad.i < n; pad.i++, p += size) {
CTORCALL_COMPLETE(ctor, p);
}
}
/* 80005678-80005684 -00001 000C+00 0/0 0/0 0/0 .extabindex @232 */
#pragma push
#pragma force_active on
SECTION_EXTABINDEX static void* const lit_232[3] = {
(void*)__construct_array,
(void*)0x000000FC,
(void*)(((char*)&_section_symbol_extab) + 0x10),
};
#pragma pop
extern void __destroy_arr(void* block, ConstructorDestructor* dtor, size_t size, size_t n) {
char* p;
/* 80005684-80005690 -00001 000C+00 0/0 0/0 0/0 .extabindex @240 */
#pragma push
#pragma force_active on
SECTION_EXTABINDEX static void* const lit_240[3] = {
(void*)__dt__26__partial_array_destructorFv,
(void*)0x000000B8,
(void*)(((char*)&_section_symbol_extab) + 0x28),
};
#pragma pop
for (p = (char*)block + size * n; n > 0; n--) {
p -= size;
DTORCALL_COMPLETE(dtor, p);
}
}
/* 80005690-8000569C -00001 000C+00 0/0 0/0 0/0 .extabindex @263 */
#pragma push
#pragma force_active on
SECTION_EXTABINDEX static void* const lit_263[3] = {
(void*)__construct_new_array,
(void*)0x00000104,
(void*)(((char*)&_section_symbol_extab) + 0x30),
};
#pragma pop
extern void __destroy_new_array(void* block, ConstructorDestructor dtor) {
if (block) {
if (dtor) {
size_t i, objects, objectsize;
char* p;
/* 8000569C-800056BC -00001 0020+00 1/0 1/1 0/0 .extabindex None */
SECTION_EXTABINDEX extern void* const data_8000569C[8] = {
(void*)&lit_206, (void*)&data_8000569C, (void*)__destroy_new_array,
(void*)0x000003AC, (void*)NULL, (void*)NULL,
(void*)NULL, (void*)NULL,
};
objectsize = *(size_t*)((char*)block - ARRAY_HEADER_SIZE);
objects = ((size_t*)((char*)block - ARRAY_HEADER_SIZE))[1];
p = (char*)block + (objectsize * objects);
for (i = 0; i < objects; i++) {
p -= objectsize;
DTORCALL_COMPLETE(dtor, p);
}
}
::operator delete[]((char*)block - ARRAY_HEADER_SIZE);
}
}
void __destroy_new_array2(void) {}
void __destroy_new_array3(void) {}
@@ -23,20 +23,20 @@ extern int __register_fragment(struct __eti_init_info* info, char* TOC);
/* 80450AD0-80450AD8 000550 0004+04 2/2 0/0 0/0 .sdata fragmentID */
static int fragmentID = -2;
/* clang-format off */
static asm char* GetR2() {
nofralloc
mr r3, r2
blr
extern void GetR2(char** R2) {
register char* temp;
asm {
mr temp, r2
}
*R2 = temp;
}
/* clang-format on */
/* 80362870-803628AC 35D1B0 003C+00 1/0 1/0 0/0 .text __init_cpp_exceptions */
void __init_cpp_exceptions(void) {
// NONMATCHING
char* R2;
if (fragmentID == -2) {
R2 = GetR2();
GetR2(&R2);
fragmentID = __register_fragment(_eti_init_info, R2);
}
}
@@ -51,13 +51,16 @@ void __fini_cpp_exceptions(void) {
}
/* 803737C0-803737C4 000000 0004+00 0/0 1/1 0/0 .ctors __init_cpp_exceptions_reference */
__declspec(section ".ctors")
#pragma section ".ctors$10"
__declspec(section ".ctors$10")
extern void* const __init_cpp_exceptions_reference = __init_cpp_exceptions;
/* 80373980-80373984 000000 0004+00 0/0 1/1 0/0 .dtors __destroy_global_chain_reference */
__declspec(section ".dtors")
#pragma section ".dtors$10"
__declspec(section ".dtors$10")
extern void* const __destroy_global_chain_reference = __destroy_global_chain;
/* 80373984-80373988 000004 0004+00 0/0 0/1 0/0 .dtors __fini_cpp_exceptions_reference */
__declspec(section ".dtors")
extern void* const __fini_cpp_exceptions_reference = __fini_cpp_exceptions;
#pragma section ".dtors$15"
__declspec(section ".dtors$15")
extern void* const __fini_cpp_exceptions_reference = __fini_cpp_exceptions;
+1 -19
View File
@@ -1,24 +1,6 @@
#include "dol2asm.h"
#include <dolphin.h>
/* 800035C0-800035E4 0004C0 0024+00 0/0 12/12 0/0 .init TRK_memcpy */
SECTION_INIT void* TRK_memcpy(void* dst, const void* src, size_t n) {
const unsigned char* s = (const unsigned char*)src - 1;
unsigned char* d = (unsigned char*)dst - 1;
n++;
while (--n != 0)
*++d = *++s;
return dst;
}
/* 80003590-800035C0 000490 0030+00 0/0 1/1 0/0 .init TRK_memset */
SECTION_INIT void* TRK_memset(void* dst, int val, size_t n) {
TRK_fill_mem(dst, val, n);
return dst;
}
/* 80003540-80003590 000440 0050+00 1/1 63/63 6/6 .init memcpy */
SECTION_INIT void* memcpy(void* dst, const void* src, size_t n) {
const unsigned char* s;
@@ -104,4 +86,4 @@ SECTION_INIT void* memset(void* dst, int val, size_t n) {
__fill_mem(dst, val, n);
return dst;
}
}
@@ -1,4 +1,5 @@
#include "NMWException.h"
#include "MWCPlusLib.h"
/* 80451988-80451990 000E88 0004+04 2/2 0/0 0/0 .sbss __global_destructor_chain */
DestructorChain* __global_destructor_chain;
@@ -17,11 +18,12 @@ void __destroy_global_chain(void) {
DestructorChain* iter;
while ((iter = __global_destructor_chain) != 0) {
__global_destructor_chain = iter->next;
DTORCALL(iter->destructor, iter->object);
DTORCALL_COMPLETE(iter->destructor, iter->object);
}
}
/* clang-format off */
__declspec(section ".dtors")
#pragma section ".dtors$10"
__declspec(section ".dtors$10")
static void* const __destroy_global_chain_reference = __destroy_global_chain;
/* clang-format on */
/* clang-format on */