Decompile crashRender
This commit is contained in:
parent
2c78fb25ab
commit
e9f2bc5be4
|
|
@ -2328,104 +2328,8 @@ u32 var8008d264 = 0;
|
|||
u32 var8008d268 = 0;
|
||||
u32 var8008d26c = 0;
|
||||
OSThread g_RmonThread = {0};
|
||||
u32 var8008d420 = 0;
|
||||
u32 var8008d424 = 0;
|
||||
u32 var8008d428 = 0;
|
||||
u32 var8008d42c = 0;
|
||||
u32 var8008d430 = 0;
|
||||
u32 var8008d434 = 0;
|
||||
u32 var8008d438 = 0;
|
||||
u32 var8008d43c = 0;
|
||||
u32 var8008d440 = 0;
|
||||
u32 var8008d444 = 0;
|
||||
u32 var8008d448 = 0;
|
||||
u32 var8008d44c = 0;
|
||||
u32 var8008d450 = 0;
|
||||
u32 var8008d454 = 0;
|
||||
u32 var8008d458 = 0;
|
||||
u32 var8008d45c = 0;
|
||||
u32 var8008d460 = 0;
|
||||
u32 var8008d464 = 0;
|
||||
u32 var8008d468 = 0;
|
||||
u32 var8008d46c = 0;
|
||||
u32 var8008d470 = 0;
|
||||
u32 var8008d474 = 0;
|
||||
u32 var8008d478 = 0;
|
||||
u32 var8008d47c = 0;
|
||||
u32 var8008d480 = 0;
|
||||
u32 var8008d484 = 0;
|
||||
u32 var8008d488 = 0;
|
||||
u32 var8008d48c = 0;
|
||||
u32 var8008d490 = 0;
|
||||
u32 var8008d494 = 0;
|
||||
u32 var8008d498 = 0;
|
||||
u32 var8008d49c = 0;
|
||||
OSThread g_IdleThread = {0};
|
||||
u32 var8008d650 = 0;
|
||||
u32 var8008d654 = 0;
|
||||
u32 var8008d658 = 0;
|
||||
u32 var8008d65c = 0;
|
||||
u32 var8008d660 = 0;
|
||||
u32 var8008d664 = 0;
|
||||
u32 var8008d668 = 0;
|
||||
u32 var8008d66c = 0;
|
||||
u32 var8008d670 = 0;
|
||||
u32 var8008d674 = 0;
|
||||
u32 var8008d678 = 0;
|
||||
u32 var8008d67c = 0;
|
||||
u32 var8008d680 = 0;
|
||||
u32 var8008d684 = 0;
|
||||
u32 var8008d688 = 0;
|
||||
u32 var8008d68c = 0;
|
||||
u32 var8008d690 = 0;
|
||||
u32 var8008d694 = 0;
|
||||
u32 var8008d698 = 0;
|
||||
u32 var8008d69c = 0;
|
||||
u32 var8008d6a0 = 0;
|
||||
u32 var8008d6a4 = 0;
|
||||
u32 var8008d6a8 = 0;
|
||||
u32 var8008d6ac = 0;
|
||||
u32 var8008d6b0 = 0;
|
||||
u32 var8008d6b4 = 0;
|
||||
u32 var8008d6b8 = 0;
|
||||
u32 var8008d6bc = 0;
|
||||
u32 var8008d6c0 = 0;
|
||||
u32 var8008d6c4 = 0;
|
||||
u32 var8008d6c8 = 0;
|
||||
u32 var8008d6cc = 0;
|
||||
OSThread g_MainThread = {0};
|
||||
u32 var8008d880 = 0;
|
||||
u32 var8008d884 = 0;
|
||||
u32 var8008d888 = 0;
|
||||
u32 var8008d88c = 0;
|
||||
u32 var8008d890 = 0;
|
||||
u32 var8008d894 = 0;
|
||||
u32 var8008d898 = 0;
|
||||
u32 var8008d89c = 0;
|
||||
u32 var8008d8a0 = 0;
|
||||
u32 var8008d8a4 = 0;
|
||||
u32 var8008d8a8 = 0;
|
||||
u32 var8008d8ac = 0;
|
||||
u32 var8008d8b0 = 0;
|
||||
u32 var8008d8b4 = 0;
|
||||
u32 var8008d8b8 = 0;
|
||||
u32 var8008d8bc = 0;
|
||||
u32 var8008d8c0 = 0;
|
||||
u32 var8008d8c4 = 0;
|
||||
u32 var8008d8c8 = 0;
|
||||
u32 var8008d8cc = 0;
|
||||
u32 var8008d8d0 = 0;
|
||||
u32 var8008d8d4 = 0;
|
||||
u32 var8008d8d8 = 0;
|
||||
u32 var8008d8dc = 0;
|
||||
u32 var8008d8e0 = 0;
|
||||
u32 var8008d8e4 = 0;
|
||||
u32 var8008d8e8 = 0;
|
||||
u32 var8008d8ec = 0;
|
||||
u32 var8008d8f0 = 0;
|
||||
u32 var8008d8f4 = 0;
|
||||
u32 var8008d8f8 = 0;
|
||||
u32 var8008d8fc = 0;
|
||||
u32 var8008d900 = 0;
|
||||
u32 var8008d904 = 0;
|
||||
u32 var8008d908 = 0;
|
||||
|
|
@ -2638,38 +2542,6 @@ u32 var8008faa0 = 0;
|
|||
u32 var8008faa4 = 0;
|
||||
OSMesgQueue g_ResetMesgQueue = {0};
|
||||
OSThread g_ResetThread = {0};
|
||||
u32 var8008fc70 = 0;
|
||||
u32 var8008fc74 = 0;
|
||||
u32 var8008fc78 = 0;
|
||||
u32 var8008fc7c = 0;
|
||||
u32 var8008fc80 = 0;
|
||||
u32 var8008fc84 = 0;
|
||||
u32 var8008fc88 = 0;
|
||||
u32 var8008fc8c = 0;
|
||||
u32 var8008fc90 = 0;
|
||||
u32 var8008fc94 = 0;
|
||||
u32 var8008fc98 = 0;
|
||||
u32 var8008fc9c = 0;
|
||||
u32 var8008fca0 = 0;
|
||||
u32 var8008fca4 = 0;
|
||||
u32 var8008fca8 = 0;
|
||||
u32 var8008fcac = 0;
|
||||
u32 var8008fcb0 = 0;
|
||||
u32 var8008fcb4 = 0;
|
||||
u32 var8008fcb8 = 0;
|
||||
u32 var8008fcbc = 0;
|
||||
u32 var8008fcc0 = 0;
|
||||
u32 var8008fcc4 = 0;
|
||||
u32 var8008fcc8 = 0;
|
||||
u32 var8008fccc = 0;
|
||||
u32 var8008fcd0 = 0;
|
||||
u32 var8008fcd4 = 0;
|
||||
u32 var8008fcd8 = 0;
|
||||
u32 var8008fcdc = 0;
|
||||
u32 var8008fce0 = 0;
|
||||
u32 var8008fce4 = 0;
|
||||
u32 var8008fce8 = 0;
|
||||
u32 var8008fcec = 0;
|
||||
u32 var8008fcf0 = 0;
|
||||
u32 var8008fcf4 = 0;
|
||||
u32 var8008fcf8 = 0;
|
||||
|
|
@ -2739,38 +2611,6 @@ u32 var8008fdf4 = 0;
|
|||
u32 var8008fdf8 = 0;
|
||||
u32 var8008fdfc = 0;
|
||||
OSThread viThread = {0};
|
||||
u32 var8008ffb0 = 0;
|
||||
u32 var8008ffb4 = 0;
|
||||
u32 var8008ffb8 = 0;
|
||||
u32 var8008ffbc = 0;
|
||||
u32 var8008ffc0 = 0;
|
||||
u32 var8008ffc4 = 0;
|
||||
u32 var8008ffc8 = 0;
|
||||
u32 var8008ffcc = 0;
|
||||
u32 var8008ffd0 = 0;
|
||||
u32 var8008ffd4 = 0;
|
||||
u32 var8008ffd8 = 0;
|
||||
u32 var8008ffdc = 0;
|
||||
u32 var8008ffe0 = 0;
|
||||
u32 var8008ffe4 = 0;
|
||||
u32 var8008ffe8 = 0;
|
||||
u32 var8008ffec = 0;
|
||||
u32 var8008fff0 = 0;
|
||||
u32 var8008fff4 = 0;
|
||||
u32 var8008fff8 = 0;
|
||||
u32 var8008fffc = 0;
|
||||
u32 var80090000 = 0;
|
||||
u32 var80090004 = 0;
|
||||
u32 var80090008 = 0;
|
||||
u32 var8009000c = 0;
|
||||
u32 var80090010 = 0;
|
||||
u32 var80090014 = 0;
|
||||
u32 var80090018 = 0;
|
||||
u32 var8009001c = 0;
|
||||
u32 var80090020 = 0;
|
||||
u32 var80090024 = 0;
|
||||
u32 var80090028 = 0;
|
||||
u32 var8009002c = 0;
|
||||
u32 var80090030 = 0;
|
||||
u32 var80090034 = 0;
|
||||
u32 var80090038 = 0;
|
||||
|
|
@ -2988,38 +2828,6 @@ u32 var80090384 = 0;
|
|||
u32 var80090388 = 0;
|
||||
u32 var8009038c = 0;
|
||||
OSThread piThread = {0};
|
||||
u32 var80090540 = 0;
|
||||
u32 var80090544 = 0;
|
||||
u32 var80090548 = 0;
|
||||
u32 var8009054c = 0;
|
||||
u32 var80090550 = 0;
|
||||
u32 var80090554 = 0;
|
||||
u32 var80090558 = 0;
|
||||
u32 var8009055c = 0;
|
||||
u32 var80090560 = 0;
|
||||
u32 var80090564 = 0;
|
||||
u32 var80090568 = 0;
|
||||
u32 var8009056c = 0;
|
||||
u32 var80090570 = 0;
|
||||
u32 var80090574 = 0;
|
||||
u32 var80090578 = 0;
|
||||
u32 var8009057c = 0;
|
||||
u32 var80090580 = 0;
|
||||
u32 var80090584 = 0;
|
||||
u32 var80090588 = 0;
|
||||
u32 var8009058c = 0;
|
||||
u32 var80090590 = 0;
|
||||
u32 var80090594 = 0;
|
||||
u32 var80090598 = 0;
|
||||
u32 var8009059c = 0;
|
||||
u32 var800905a0 = 0;
|
||||
u32 var800905a4 = 0;
|
||||
u32 var800905a8 = 0;
|
||||
u32 var800905ac = 0;
|
||||
u32 var800905b0 = 0;
|
||||
u32 var800905b4 = 0;
|
||||
u32 var800905b8 = 0;
|
||||
u32 var800905bc = 0;
|
||||
u32 var800905c0 = 0;
|
||||
u32 var800905c4 = 0;
|
||||
u32 var800905c8 = 0;
|
||||
|
|
@ -4041,38 +3849,6 @@ u32 var800915bc = 0;
|
|||
u32 var800915c0 = 0;
|
||||
u32 var800915c4 = 0;
|
||||
AMAudioMgr g_AudioManager = {0};
|
||||
u32 var80091850 = 0;
|
||||
u32 var80091854 = 0;
|
||||
u32 var80091858 = 0;
|
||||
u32 var8009185c = 0;
|
||||
u32 var80091860 = 0;
|
||||
u32 var80091864 = 0;
|
||||
u32 var80091868 = 0;
|
||||
u32 var8009186c = 0;
|
||||
u32 var80091870 = 0;
|
||||
u32 var80091874 = 0;
|
||||
u32 var80091878 = 0;
|
||||
u32 var8009187c = 0;
|
||||
u32 var80091880 = 0;
|
||||
u32 var80091884 = 0;
|
||||
u32 var80091888 = 0;
|
||||
u32 var8009188c = 0;
|
||||
u32 var80091890 = 0;
|
||||
u32 var80091894 = 0;
|
||||
u32 var80091898 = 0;
|
||||
u32 var8009189c = 0;
|
||||
u32 var800918a0 = 0;
|
||||
u32 var800918a4 = 0;
|
||||
u32 var800918a8 = 0;
|
||||
u32 var800918ac = 0;
|
||||
u32 var800918b0 = 0;
|
||||
u32 var800918b4 = 0;
|
||||
u32 var800918b8 = 0;
|
||||
u32 var800918bc = 0;
|
||||
u32 var800918c0 = 0;
|
||||
u32 var800918c4 = 0;
|
||||
u32 var800918c8 = 0;
|
||||
u32 var800918cc = 0;
|
||||
u32 var800918d0 = 0;
|
||||
u32 var800918d4 = 0;
|
||||
u32 var800918d8 = 0;
|
||||
|
|
@ -5078,38 +4854,6 @@ u32 var80092874 = 0;
|
|||
u32 var80092878 = 0;
|
||||
u32 var8009287c = 0;
|
||||
OSThread g_FaultThread = {0};
|
||||
u32 var80092a30 = 0;
|
||||
u32 var80092a34 = 0;
|
||||
u32 var80092a38 = 0;
|
||||
u32 var80092a3c = 0;
|
||||
u32 var80092a40 = 0;
|
||||
u32 var80092a44 = 0;
|
||||
u32 var80092a48 = 0;
|
||||
u32 var80092a4c = 0;
|
||||
u32 var80092a50 = 0;
|
||||
u32 var80092a54 = 0;
|
||||
u32 var80092a58 = 0;
|
||||
u32 var80092a5c = 0;
|
||||
u32 var80092a60 = 0;
|
||||
u32 var80092a64 = 0;
|
||||
u32 var80092a68 = 0;
|
||||
u32 var80092a6c = 0;
|
||||
u32 var80092a70 = 0;
|
||||
u32 var80092a74 = 0;
|
||||
u32 var80092a78 = 0;
|
||||
u32 var80092a7c = 0;
|
||||
u32 var80092a80 = 0;
|
||||
u32 var80092a84 = 0;
|
||||
u32 var80092a88 = 0;
|
||||
u32 var80092a8c = 0;
|
||||
u32 var80092a90 = 0;
|
||||
u32 var80092a94 = 0;
|
||||
u32 var80092a98 = 0;
|
||||
u32 var80092a9c = 0;
|
||||
u32 var80092aa0 = 0;
|
||||
u32 var80092aa4 = 0;
|
||||
u32 var80092aa8 = 0;
|
||||
u32 var80092aac = 0;
|
||||
u32 var80092ab0 = 0;
|
||||
u32 var80092ab4 = 0;
|
||||
u32 var80092ab8 = 0;
|
||||
|
|
|
|||
|
|
@ -23,21 +23,25 @@ typedef s32 OSId;
|
|||
|
||||
typedef union
|
||||
{
|
||||
struct {f32 f_odd; f32 f_even;} f;
|
||||
struct {
|
||||
f32 f_odd2;
|
||||
f32 f_odd;
|
||||
f32 f_even2;
|
||||
f32 f_even;
|
||||
} f;
|
||||
} __OSfp;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
/* registers */
|
||||
/*0x20*/ u64 at, v0, v1, a0, a1, a2, a3;
|
||||
/*0x58*/ u64 t0, t1, t2, t3, t4, t5, t6, t7;
|
||||
/*0x98*/ u64 s0, s1, s2, s3, s4, s5, s6, s7;
|
||||
/*0xD8*/ u64 t8, t9, gp, sp, s8, ra;
|
||||
/*0x108*/ u64 lo, hi;
|
||||
/*0x118*/ u32 sr, pc, cause, badvaddr, rcp;
|
||||
/*0x12C*/ u32 fpcsr;
|
||||
__OSfp fp0, fp2, fp4, fp6, fp8, fp10, fp12, fp14;
|
||||
__OSfp fp16, fp18, fp20, fp22, fp24, fp26, fp28, fp30;
|
||||
u64 at, v0, v1, a0, a1, a2, a3;
|
||||
u64 t0, t1, t2, t3, t4, t5, t6, t7;
|
||||
u64 s0, s1, s2, s3, s4, s5, s6, s7;
|
||||
u64 t8, t9, gp, sp, s8, ra;
|
||||
u64 lo, hi;
|
||||
u32 sr, pc, cause, badvaddr, rcp;
|
||||
u32 fpcsr;
|
||||
__OSfp fp0, fp2, fp4, fp6, fp8, fp10, fp12, fp14;
|
||||
__OSfp fp16, fp18, fp20, fp22, fp24, fp26, fp28, fp30;
|
||||
} __OSThreadContext;
|
||||
|
||||
typedef struct
|
||||
|
|
|
|||
|
|
@ -88,15 +88,15 @@ extern const char var700529a8[];
|
|||
extern const char var700529ac[];
|
||||
|
||||
void faultCreateThread2(void);
|
||||
u32 func0000c118(void);
|
||||
bool crashIsInstrTwoAfterJalInLib(u32 *instruction);
|
||||
u32 func0000c2b8(u32 arg0, s32 tid);
|
||||
u32 func0000c334(u32 arg0, s32 tid);
|
||||
bool rmonIsDouble(f32 value);
|
||||
s32 func0000c118(u32 ptr, void *arg1, u32 sp, u32 *arg3);
|
||||
bool crashIsReturnAddress(u32 *instruction);
|
||||
u32 crashGetStackEnd(u32 sp, s32 tid);
|
||||
u32 crashGetStackStart(u32 arg0, s32 tid);
|
||||
bool crashIsDouble(f32 value);
|
||||
void rmonPrintFloat(s32 index, f32 arg1);
|
||||
void rmonPrint2Floats(s32 index, f32 value1, f32 value2);
|
||||
void rmonPrint3Floats(s32 index, f32 value1, f32 value2, f32 value3);
|
||||
u32 func0000cae4(void);
|
||||
void func0000cae4(u32 arg0, char *arg1, void *arg2);
|
||||
u32 func0000cba0(void);
|
||||
u32 func0000cc34(void);
|
||||
u32 func0000cd4c(void);
|
||||
|
|
|
|||
|
|
@ -6,6 +6,6 @@
|
|||
|
||||
void rmonproc();
|
||||
bool rmonIsDisabled(void);
|
||||
void rmonPrint(char *format, ...);
|
||||
void crashPrint(char *format, ...);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -903,8 +903,8 @@ glabel amgrCreate
|
|||
/* 8b60: 0c002598 */ jal func00009660
|
||||
/* 8b64: a020cf94 */ sb $zero,%lo(var8005cf94)($at)
|
||||
/* 8b68: 3c048009 */ lui $a0,%hi(g_AudioManager+0x280)
|
||||
/* 8b6c: 3c058009 */ lui $a1,%hi(var80091860)
|
||||
/* 8b70: 24a51860 */ addiu $a1,$a1,%lo(var80091860)
|
||||
/* 8b6c: 3c058009 */ lui $a1,%hi(g_AudioManager+0x298)
|
||||
/* 8b70: 24a51860 */ addiu $a1,$a1,%lo(g_AudioManager+0x298)
|
||||
/* 8b74: 24841848 */ addiu $a0,$a0,%lo(g_AudioManager+0x280)
|
||||
/* 8b78: 0c0120d0 */ jal osCreateMesgQueue
|
||||
/* 8b7c: 24060008 */ addiu $a2,$zero,0x8
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ glabel rzipInflate
|
|||
/* 75a4: afbd0074 */ sw $sp,0x74($sp)
|
||||
/* 75a8: afbe0078 */ sw $s8,0x78($sp)
|
||||
/* 75ac: 27bdffe8 */ addiu $sp,$sp,-24
|
||||
/* 75b0: 0c00bea9 */ jal rmonPrint
|
||||
/* 75b0: 0c00bea9 */ jal crashPrint
|
||||
/* 75b4: 2484268f */ addiu $a0,$a0,%lo(var7005261c+0x73)
|
||||
/* 75b8: 27bd0018 */ addiu $sp,$sp,0x18
|
||||
/* 75bc: 8fbf0000 */ lw $ra,0x0($sp)
|
||||
|
|
@ -195,7 +195,7 @@ glabel rzipInflate
|
|||
/* 76c4: afbd0074 */ sw $sp,0x74($sp)
|
||||
/* 76c8: afbe0078 */ sw $s8,0x78($sp)
|
||||
/* 76cc: 27bdffe8 */ addiu $sp,$sp,-24
|
||||
/* 76d0: 0c00bea9 */ jal rmonPrint
|
||||
/* 76d0: 0c00bea9 */ jal crashPrint
|
||||
/* 76d4: 2484268f */ addiu $a0,$a0,%lo(var7005261c+0x73)
|
||||
/* 76d8: 27bd0018 */ addiu $sp,$sp,0x18
|
||||
/* 76dc: 8fbf0000 */ lw $ra,0x0($sp)
|
||||
|
|
@ -309,7 +309,7 @@ glabel rzipInflate
|
|||
/* 7870: afa20004 */ sw $v0,0x4($sp)
|
||||
/* 7874: 3c047005 */ lui $a0,%hi(var7005261c)
|
||||
/* 7878: 2484261c */ addiu $a0,$a0,%lo(var7005261c)
|
||||
/* 787c: 0c00bea9 */ jal rmonPrint
|
||||
/* 787c: 0c00bea9 */ jal crashPrint
|
||||
/* 7880: 8fa50004 */ lw $a1,0x4($sp)
|
||||
/* 7884: 27bd0018 */ addiu $sp,$sp,0x18
|
||||
/* 7888: 8fbf0000 */ lw $ra,0x0($sp)
|
||||
|
|
@ -744,7 +744,7 @@ glabel func00007a10
|
|||
/* 7e80: afbd0074 */ sw $sp,0x74($sp)
|
||||
/* 7e84: afbe0078 */ sw $s8,0x78($sp)
|
||||
/* 7e88: 27bdffe8 */ addiu $sp,$sp,-24
|
||||
/* 7e8c: 0c00bea9 */ jal rmonPrint
|
||||
/* 7e8c: 0c00bea9 */ jal crashPrint
|
||||
/* 7e90: 24842670 */ addiu $a0,$a0,%lo(var7005261c+0x54)
|
||||
/* 7e94: 27bd0018 */ addiu $sp,$sp,0x18
|
||||
/* 7e98: 8fbf0000 */ lw $ra,0x0($sp)
|
||||
|
|
@ -1254,7 +1254,7 @@ glabel func00008064
|
|||
/* 857c: afb30004 */ sw $s3,0x4($sp)
|
||||
/* 8580: 3c047005 */ lui $a0,%hi(var7005261c+0x2b)
|
||||
/* 8584: 24842647 */ addiu $a0,$a0,%lo(var7005261c+0x2b)
|
||||
/* 8588: 0c00bea9 */ jal rmonPrint
|
||||
/* 8588: 0c00bea9 */ jal crashPrint
|
||||
/* 858c: 8fa50004 */ lw $a1,0x4($sp)
|
||||
/* 8590: 27bd0018 */ addiu $sp,$sp,0x18
|
||||
/* 8594: 8fbf0000 */ lw $ra,0x0($sp)
|
||||
|
|
|
|||
|
|
@ -13,5 +13,5 @@ void faultCreateThread(void)
|
|||
|
||||
void func0000bfd0(char *arg0, char *arg1, s32 arg2)
|
||||
{
|
||||
rmonPrint("ASSERTION : %s, %d: (\"%s\")\n", arg1, arg2, arg0);
|
||||
crashPrint("ASSERTION : %s, %d: (\"%s\")\n", arg1, arg2, arg0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -344,6 +344,8 @@ u32 var8005d994 = 0x00000000;
|
|||
u32 var8005d998 = 0x00000000;
|
||||
u32 var8005d99c = 0x00000000;
|
||||
|
||||
extern u32 _libSegmentStart;
|
||||
|
||||
void faultproc(void *arg0);
|
||||
|
||||
void faultCreateThread2(void)
|
||||
|
|
@ -424,7 +426,7 @@ glabel faultproc
|
|||
// osSetIntMask(mask);
|
||||
//
|
||||
// // Beta versions have something like this here:
|
||||
// //rmonDrawCrashScreen(result, stack1, stack2);
|
||||
// //crashRender(result, stack1, stack2);
|
||||
// //func00001b1c(true);
|
||||
// }
|
||||
//}
|
||||
|
|
@ -518,7 +520,7 @@ glabel func0000c118
|
|||
|
||||
extern u32 _libSegmentEnd;
|
||||
|
||||
bool crashIsInstrTwoAfterJalInLib(u32 *instruction)
|
||||
bool crashIsReturnAddress(u32 *instruction)
|
||||
{
|
||||
if (((u32)instruction % 4) == 0
|
||||
&& (u32)instruction >= (u32)boot
|
||||
|
|
@ -537,46 +539,46 @@ bool crashIsInstrTwoAfterJalInLib(u32 *instruction)
|
|||
return false;
|
||||
}
|
||||
|
||||
u32 func0000c2b8(u32 arg0, s32 tid)
|
||||
u32 crashGetStackEnd(u32 sp, s32 tid)
|
||||
{
|
||||
u32 start;
|
||||
u32 end;
|
||||
|
||||
if (tid <= 0 || tid > 6U) {
|
||||
rmonPrint("Bad tid\n");
|
||||
crashPrint("Bad tid\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
start = (u32)g_StackStartAddrs[tid];
|
||||
end = (u32)g_StackEndAddrs[tid];
|
||||
|
||||
if (arg0 >= 0x80000000) {
|
||||
if (sp >= 0x80000000) {
|
||||
return end;
|
||||
}
|
||||
|
||||
return (arg0 & 0xf0000000) | (end - start);
|
||||
return (sp & 0xf0000000) | (end - start);
|
||||
}
|
||||
|
||||
u32 func0000c334(u32 arg0, s32 tid)
|
||||
u32 crashGetStackStart(u32 sp, s32 tid)
|
||||
{
|
||||
u32 start;
|
||||
|
||||
if (tid <= 0 || tid > 6U) {
|
||||
rmonPrint("Bad tid\n");
|
||||
crashPrint("Bad tid\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
start = (u32)g_StackStartAddrs[tid];
|
||||
|
||||
if (arg0 >= 0x80000000) {
|
||||
if (sp >= 0x80000000) {
|
||||
return start;
|
||||
}
|
||||
|
||||
return arg0 & 0xf0000000;
|
||||
return sp & 0xf0000000;
|
||||
}
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel rmonIsDouble
|
||||
glabel crashIsDouble
|
||||
/* c398: e7ac0000 */ swc1 $f12,0x0($sp)
|
||||
/* c39c: 8fa40000 */ lw $a0,0x0($sp)
|
||||
/* c3a0: 3c01007f */ lui $at,0x7f
|
||||
|
|
@ -597,7 +599,7 @@ glabel rmonIsDouble
|
|||
/* c3d8: 00000000 */ nop
|
||||
);
|
||||
|
||||
//bool rmonIsDouble(f32 value)
|
||||
//bool crashIsDouble(f32 value)
|
||||
//{
|
||||
// u32 bits = *(u32 *)&value;
|
||||
//
|
||||
|
|
@ -606,437 +608,159 @@ glabel rmonIsDouble
|
|||
// && ((bits >> 23) & 0xff) != 0xff;
|
||||
//}
|
||||
|
||||
void rmonPrintFloat(s32 index, f32 value)
|
||||
void crashPrintFloat(s32 index, f32 value)
|
||||
{
|
||||
if (rmonIsDouble(value)) {
|
||||
rmonPrint("%s%s%02d: % .7e ", "", "", index, (double)value);
|
||||
if (crashIsDouble(value)) {
|
||||
crashPrint("%s%s%02d: % .7e ", "", "", index, (f64)value);
|
||||
} else {
|
||||
u32 bits = *(u32 *)&value;
|
||||
rmonPrint("%02d: I%d.%03d.%07d ", index, (bits & 0x80000000) >> 31, (bits & 0x7f800000) >> 23, bits & 0x7fffff);
|
||||
crashPrint("%02d: I%d.%03d.%07d ", index, (bits & 0x80000000) >> 31, (bits & 0x7f800000) >> 23, bits & 0x7fffff);
|
||||
}
|
||||
}
|
||||
|
||||
void rmonPrint2Floats(s32 index, f32 value1, f32 value2)
|
||||
void crashPrint2Floats(s32 index, f32 value1, f32 value2)
|
||||
{
|
||||
rmonPrintFloat(index, value1);
|
||||
rmonPrint(" ");
|
||||
crashPrintFloat(index, value1);
|
||||
crashPrint(" ");
|
||||
|
||||
rmonPrintFloat(index + 1, value2);
|
||||
rmonPrint("\n");
|
||||
crashPrintFloat(index + 1, value2);
|
||||
crashPrint("\n");
|
||||
}
|
||||
|
||||
void rmonPrint3Floats(s32 index, f32 value1, f32 value2, f32 value3)
|
||||
void crashPrint3Floats(s32 index, f32 value1, f32 value2, f32 value3)
|
||||
{
|
||||
rmonPrintFloat(index, value1);
|
||||
rmonPrint(" ");
|
||||
crashPrintFloat(index, value1);
|
||||
crashPrint(" ");
|
||||
|
||||
rmonPrintFloat(index + 1, value2);
|
||||
rmonPrint(" ");
|
||||
crashPrintFloat(index + 1, value2);
|
||||
crashPrint(" ");
|
||||
|
||||
rmonPrintFloat(index + 2, value3);
|
||||
rmonPrint("\n");
|
||||
crashPrintFloat(index + 2, value3);
|
||||
crashPrint("\n");
|
||||
}
|
||||
|
||||
const char var70052a10[] = "\n\nFAULT-\n";
|
||||
const char var70052a1c[] = "DodgyStackTrace: %08llx ";
|
||||
const char var70052a38[] = "%08x ";
|
||||
const char var70052a40[] = ".\n";
|
||||
const char var70052a44[] = "%H#@! Another Perfect Crash (tm)\n";
|
||||
const char var70052a68[] = "at 0x%016llx v0 0x%016llx v1 0x%016llx\n";
|
||||
const char var70052a90[] = "a0 0x%016llx a1 0x%016llx a2 0x%016llx\n";
|
||||
const char var70052ab8[] = "a3 0x%016llx t0 0x%016llx t1 0x%016llx\n";
|
||||
const char var70052ae0[] = "t2 0x%016llx t3 0x%016llx t4 0x%016llx\n";
|
||||
const char var70052b08[] = "t5 0x%016llx t6 0x%016llx t7 0x%016llx\n";
|
||||
const char var70052b30[] = "s0 0x%016llx s1 0x%016llx s2 0x%016llx\n";
|
||||
const char var70052b58[] = "s3 0x%016llx s4 0x%016llx s5 0x%016llx\n";
|
||||
const char var70052b80[] = "s6 0x%016llx s7 0x%016llx t8 0x%016llx\n";
|
||||
const char var70052ba8[] = "t9 0x%016llx gp 0x%016llx sp 0x%016llx\n";
|
||||
const char var70052bd0[] = "s8 0x%016llx ra 0x%016llx\n";
|
||||
const char var70052bec[] = "TID %d epc %08x caus %08x fp %08x badv %08x sr %08x\n";
|
||||
const char var70052c24[] = "dshex -a %08x %08x %08x %08x %08x\n";
|
||||
const char var70052c48[] = "cause";
|
||||
const char var70052c50[] = " : ";
|
||||
const char var70052c54[] = "fpcsr";
|
||||
const char var70052c5c[] = "\n";
|
||||
const char var70052c60[] = "nearl: ";
|
||||
const char var70052c68[] = " %08x ";
|
||||
const char var70052c70[] = "\n ";
|
||||
const char var70052c7c[] = "\n";
|
||||
const char var70052c80[] = "\n";
|
||||
u32 crashRender(OSThread *thread, u32 *callstack, s32 *tracelen)
|
||||
{
|
||||
s32 i;
|
||||
u32 ptr;
|
||||
u32 *sp;
|
||||
u32 sp64[32];
|
||||
u32 *stackend;
|
||||
u32 *stackstart;
|
||||
__OSThreadContext *ctx = &thread->context;
|
||||
bool done;
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel rmonDrawCrashScreen
|
||||
/* c548: 27bdff10 */ addiu $sp,$sp,-240
|
||||
/* c54c: afa400f0 */ sw $a0,0xf0($sp)
|
||||
/* c550: afbf003c */ sw $ra,0x3c($sp)
|
||||
/* c554: afb50038 */ sw $s5,0x38($sp)
|
||||
/* c558: 3c047005 */ lui $a0,%hi(var70052a10)
|
||||
/* c55c: 00c0a825 */ or $s5,$a2,$zero
|
||||
/* c560: afb40034 */ sw $s4,0x34($sp)
|
||||
/* c564: afb30030 */ sw $s3,0x30($sp)
|
||||
/* c568: afb2002c */ sw $s2,0x2c($sp)
|
||||
/* c56c: afb10028 */ sw $s1,0x28($sp)
|
||||
/* c570: afb00024 */ sw $s0,0x24($sp)
|
||||
/* c574: afa500f4 */ sw $a1,0xf4($sp)
|
||||
/* c578: 0c00bea9 */ jal rmonPrint
|
||||
/* c57c: 24842a10 */ addiu $a0,$a0,%lo(var70052a10)
|
||||
/* c580: 3c14800a */ lui $s4,%hi(g_Vars)
|
||||
/* c584: 26949fc0 */ addiu $s4,$s4,%lo(g_Vars)
|
||||
/* c588: 928e04e0 */ lbu $t6,0x4e0($s4)
|
||||
/* c58c: 55c00023 */ bnezl $t6,.L0000c61c
|
||||
/* c590: 8fb200f0 */ lw $s2,0xf0($sp)
|
||||
/* c594: 8fa200f0 */ lw $v0,0xf0($sp)
|
||||
/* c598: 24520020 */ addiu $s2,$v0,0x20
|
||||
/* c59c: 8e4400d4 */ lw $a0,0xd4($s2)
|
||||
/* c5a0: 0c0030ae */ jal func0000c2b8
|
||||
/* c5a4: 8c450014 */ lw $a1,0x14($v0)
|
||||
/* c5a8: 8e4700e4 */ lw $a3,0xe4($s2)
|
||||
/* c5ac: 2401ffff */ addiu $at,$zero,-1
|
||||
/* c5b0: 3c047005 */ lui $a0,%hi(var70052a1c)
|
||||
/* c5b4: 00e14824 */ and $t1,$a3,$at
|
||||
/* c5b8: 00409825 */ or $s3,$v0,$zero
|
||||
/* c5bc: 01203825 */ or $a3,$t1,$zero
|
||||
/* c5c0: 24842a1c */ addiu $a0,$a0,%lo(var70052a1c)
|
||||
/* c5c4: 0c00bea9 */ jal rmonPrint
|
||||
/* c5c8: 00003025 */ or $a2,$zero,$zero
|
||||
/* c5cc: 8e5000d4 */ lw $s0,0xd4($s2)
|
||||
/* c5d0: 3c117005 */ lui $s1,%hi(var70052a38)
|
||||
/* c5d4: 26312a38 */ addiu $s1,$s1,%lo(var70052a38)
|
||||
/* c5d8: 0213082b */ sltu $at,$s0,$s3
|
||||
/* c5dc: 1020000b */ beqz $at,.L0000c60c
|
||||
/* c5e0: 00000000 */ nop
|
||||
.L0000c5e4:
|
||||
/* c5e4: 0c003090 */ jal crashIsInstrTwoAfterJalInLib
|
||||
/* c5e8: 8e040000 */ lw $a0,0x0($s0)
|
||||
/* c5ec: 10400003 */ beqz $v0,.L0000c5fc
|
||||
/* c5f0: 02202025 */ or $a0,$s1,$zero
|
||||
/* c5f4: 0c00bea9 */ jal rmonPrint
|
||||
/* c5f8: 8e050000 */ lw $a1,0x0($s0)
|
||||
.L0000c5fc:
|
||||
/* c5fc: 26100004 */ addiu $s0,$s0,0x4
|
||||
/* c600: 0213082b */ sltu $at,$s0,$s3
|
||||
/* c604: 1420fff7 */ bnez $at,.L0000c5e4
|
||||
/* c608: 00000000 */ nop
|
||||
.L0000c60c:
|
||||
/* c60c: 3c047005 */ lui $a0,%hi(var70052a40)
|
||||
/* c610: 0c00bea9 */ jal rmonPrint
|
||||
/* c614: 24842a40 */ addiu $a0,$a0,%lo(var70052a40)
|
||||
/* c618: 8fb200f0 */ lw $s2,0xf0($sp)
|
||||
.L0000c61c:
|
||||
/* c61c: 3c047005 */ lui $a0,%hi(var70052a44)
|
||||
/* c620: 24842a44 */ addiu $a0,$a0,%lo(var70052a44)
|
||||
/* c624: 0c00bea9 */ jal rmonPrint
|
||||
/* c628: 26520020 */ addiu $s2,$s2,0x20
|
||||
/* c62c: 928f04e0 */ lbu $t7,0x4e0($s4)
|
||||
/* c630: 15e00036 */ bnez $t7,.L0000c70c
|
||||
/* c634: 00002025 */ or $a0,$zero,$zero
|
||||
/* c638: 8e450114 */ lw $a1,0x114($s2)
|
||||
/* c63c: 0c003120 */ jal rmonPrint2Floats
|
||||
/* c640: 8e46011c */ lw $a2,0x11c($s2)
|
||||
/* c644: 24040002 */ addiu $a0,$zero,0x2
|
||||
/* c648: 8e450124 */ lw $a1,0x124($s2)
|
||||
/* c64c: 8e46012c */ lw $a2,0x12c($s2)
|
||||
/* c650: 0c003135 */ jal rmonPrint3Floats
|
||||
/* c654: 8e470134 */ lw $a3,0x134($s2)
|
||||
/* c658: 24040005 */ addiu $a0,$zero,0x5
|
||||
/* c65c: 8e45013c */ lw $a1,0x13c($s2)
|
||||
/* c660: 8e460144 */ lw $a2,0x144($s2)
|
||||
/* c664: 0c003135 */ jal rmonPrint3Floats
|
||||
/* c668: 8e47014c */ lw $a3,0x14c($s2)
|
||||
/* c66c: 24040008 */ addiu $a0,$zero,0x8
|
||||
/* c670: 8e450154 */ lw $a1,0x154($s2)
|
||||
/* c674: 8e46015c */ lw $a2,0x15c($s2)
|
||||
/* c678: 0c003135 */ jal rmonPrint3Floats
|
||||
/* c67c: 8e470164 */ lw $a3,0x164($s2)
|
||||
/* c680: 2404000b */ addiu $a0,$zero,0xb
|
||||
/* c684: 8e45016c */ lw $a1,0x16c($s2)
|
||||
/* c688: 8e460174 */ lw $a2,0x174($s2)
|
||||
/* c68c: 0c003135 */ jal rmonPrint3Floats
|
||||
/* c690: 8e47017c */ lw $a3,0x17c($s2)
|
||||
/* c694: 2404000e */ addiu $a0,$zero,0xe
|
||||
/* c698: 8e450184 */ lw $a1,0x184($s2)
|
||||
/* c69c: 8e46018c */ lw $a2,0x18c($s2)
|
||||
/* c6a0: 0c003135 */ jal rmonPrint3Floats
|
||||
/* c6a4: 8e470194 */ lw $a3,0x194($s2)
|
||||
/* c6a8: 24040011 */ addiu $a0,$zero,0x11
|
||||
/* c6ac: 8e45019c */ lw $a1,0x19c($s2)
|
||||
/* c6b0: 8e4601a4 */ lw $a2,0x1a4($s2)
|
||||
/* c6b4: 0c003135 */ jal rmonPrint3Floats
|
||||
/* c6b8: 8e4701ac */ lw $a3,0x1ac($s2)
|
||||
/* c6bc: 24040014 */ addiu $a0,$zero,0x14
|
||||
/* c6c0: 8e4501b4 */ lw $a1,0x1b4($s2)
|
||||
/* c6c4: 8e4601bc */ lw $a2,0x1bc($s2)
|
||||
/* c6c8: 0c003135 */ jal rmonPrint3Floats
|
||||
/* c6cc: 8e4701c4 */ lw $a3,0x1c4($s2)
|
||||
/* c6d0: 24040017 */ addiu $a0,$zero,0x17
|
||||
/* c6d4: 8e4501cc */ lw $a1,0x1cc($s2)
|
||||
/* c6d8: 8e4601d4 */ lw $a2,0x1d4($s2)
|
||||
/* c6dc: 0c003135 */ jal rmonPrint3Floats
|
||||
/* c6e0: 8e4701dc */ lw $a3,0x1dc($s2)
|
||||
/* c6e4: 2404001a */ addiu $a0,$zero,0x1a
|
||||
/* c6e8: 8e4501e4 */ lw $a1,0x1e4($s2)
|
||||
/* c6ec: 8e4601ec */ lw $a2,0x1ec($s2)
|
||||
/* c6f0: 0c003135 */ jal rmonPrint3Floats
|
||||
/* c6f4: 8e4701f4 */ lw $a3,0x1f4($s2)
|
||||
/* c6f8: 2404001d */ addiu $a0,$zero,0x1d
|
||||
/* c6fc: 8e4501fc */ lw $a1,0x1fc($s2)
|
||||
/* c700: 8e460204 */ lw $a2,0x204($s2)
|
||||
/* c704: 0c003135 */ jal rmonPrint3Floats
|
||||
/* c708: 8e47020c */ lw $a3,0x20c($s2)
|
||||
.L0000c70c:
|
||||
/* c70c: 8e4c0008 */ lw $t4,0x8($s2)
|
||||
/* c710: 8e4d000c */ lw $t5,0xc($s2)
|
||||
/* c714: 8e460000 */ lw $a2,0x0($s2)
|
||||
/* c718: 8e470004 */ lw $a3,0x4($s2)
|
||||
/* c71c: afac0010 */ sw $t4,0x10($sp)
|
||||
/* c720: afad0014 */ sw $t5,0x14($sp)
|
||||
/* c724: 8e4f0014 */ lw $t7,0x14($s2)
|
||||
/* c728: 8e4e0010 */ lw $t6,0x10($s2)
|
||||
/* c72c: 3c047005 */ lui $a0,%hi(var70052a68)
|
||||
/* c730: 24842a68 */ addiu $a0,$a0,%lo(var70052a68)
|
||||
/* c734: afaf001c */ sw $t7,0x1c($sp)
|
||||
/* c738: 0c00bea9 */ jal rmonPrint
|
||||
/* c73c: afae0018 */ sw $t6,0x18($sp)
|
||||
/* c740: 8e580020 */ lw $t8,0x20($s2)
|
||||
/* c744: 8e590024 */ lw $t9,0x24($s2)
|
||||
/* c748: 8e460018 */ lw $a2,0x18($s2)
|
||||
/* c74c: 8e47001c */ lw $a3,0x1c($s2)
|
||||
/* c750: afb80010 */ sw $t8,0x10($sp)
|
||||
/* c754: afb90014 */ sw $t9,0x14($sp)
|
||||
/* c758: 8e49002c */ lw $t1,0x2c($s2)
|
||||
/* c75c: 8e480028 */ lw $t0,0x28($s2)
|
||||
/* c760: 3c047005 */ lui $a0,%hi(var70052a90)
|
||||
/* c764: 24842a90 */ addiu $a0,$a0,%lo(var70052a90)
|
||||
/* c768: afa9001c */ sw $t1,0x1c($sp)
|
||||
/* c76c: 0c00bea9 */ jal rmonPrint
|
||||
/* c770: afa80018 */ sw $t0,0x18($sp)
|
||||
/* c774: 8e4a0038 */ lw $t2,0x38($s2)
|
||||
/* c778: 8e4b003c */ lw $t3,0x3c($s2)
|
||||
/* c77c: 8e460030 */ lw $a2,0x30($s2)
|
||||
/* c780: 8e470034 */ lw $a3,0x34($s2)
|
||||
/* c784: afaa0010 */ sw $t2,0x10($sp)
|
||||
/* c788: afab0014 */ sw $t3,0x14($sp)
|
||||
/* c78c: 8e4d0044 */ lw $t5,0x44($s2)
|
||||
/* c790: 8e4c0040 */ lw $t4,0x40($s2)
|
||||
/* c794: 3c047005 */ lui $a0,%hi(var70052ab8)
|
||||
/* c798: 24842ab8 */ addiu $a0,$a0,%lo(var70052ab8)
|
||||
/* c79c: afad001c */ sw $t5,0x1c($sp)
|
||||
/* c7a0: 0c00bea9 */ jal rmonPrint
|
||||
/* c7a4: afac0018 */ sw $t4,0x18($sp)
|
||||
/* c7a8: 8e4e0050 */ lw $t6,0x50($s2)
|
||||
/* c7ac: 8e4f0054 */ lw $t7,0x54($s2)
|
||||
/* c7b0: 8e460048 */ lw $a2,0x48($s2)
|
||||
/* c7b4: 8e47004c */ lw $a3,0x4c($s2)
|
||||
/* c7b8: afae0010 */ sw $t6,0x10($sp)
|
||||
/* c7bc: afaf0014 */ sw $t7,0x14($sp)
|
||||
/* c7c0: 8e59005c */ lw $t9,0x5c($s2)
|
||||
/* c7c4: 8e580058 */ lw $t8,0x58($s2)
|
||||
/* c7c8: 3c047005 */ lui $a0,%hi(var70052ae0)
|
||||
/* c7cc: 24842ae0 */ addiu $a0,$a0,%lo(var70052ae0)
|
||||
/* c7d0: afb9001c */ sw $t9,0x1c($sp)
|
||||
/* c7d4: 0c00bea9 */ jal rmonPrint
|
||||
/* c7d8: afb80018 */ sw $t8,0x18($sp)
|
||||
/* c7dc: 8e480068 */ lw $t0,0x68($s2)
|
||||
/* c7e0: 8e49006c */ lw $t1,0x6c($s2)
|
||||
/* c7e4: 8e460060 */ lw $a2,0x60($s2)
|
||||
/* c7e8: 8e470064 */ lw $a3,0x64($s2)
|
||||
/* c7ec: afa80010 */ sw $t0,0x10($sp)
|
||||
/* c7f0: afa90014 */ sw $t1,0x14($sp)
|
||||
/* c7f4: 8e4b0074 */ lw $t3,0x74($s2)
|
||||
/* c7f8: 8e4a0070 */ lw $t2,0x70($s2)
|
||||
/* c7fc: 3c047005 */ lui $a0,%hi(var70052b08)
|
||||
/* c800: 24842b08 */ addiu $a0,$a0,%lo(var70052b08)
|
||||
/* c804: afab001c */ sw $t3,0x1c($sp)
|
||||
/* c808: 0c00bea9 */ jal rmonPrint
|
||||
/* c80c: afaa0018 */ sw $t2,0x18($sp)
|
||||
/* c810: 8e4c0080 */ lw $t4,0x80($s2)
|
||||
/* c814: 8e4d0084 */ lw $t5,0x84($s2)
|
||||
/* c818: 8e460078 */ lw $a2,0x78($s2)
|
||||
/* c81c: 8e47007c */ lw $a3,0x7c($s2)
|
||||
/* c820: afac0010 */ sw $t4,0x10($sp)
|
||||
/* c824: afad0014 */ sw $t5,0x14($sp)
|
||||
/* c828: 8e4f008c */ lw $t7,0x8c($s2)
|
||||
/* c82c: 8e4e0088 */ lw $t6,0x88($s2)
|
||||
/* c830: 3c047005 */ lui $a0,%hi(var70052b30)
|
||||
/* c834: 24842b30 */ addiu $a0,$a0,%lo(var70052b30)
|
||||
/* c838: afaf001c */ sw $t7,0x1c($sp)
|
||||
/* c83c: 0c00bea9 */ jal rmonPrint
|
||||
/* c840: afae0018 */ sw $t6,0x18($sp)
|
||||
/* c844: 8e580098 */ lw $t8,0x98($s2)
|
||||
/* c848: 8e59009c */ lw $t9,0x9c($s2)
|
||||
/* c84c: 8e460090 */ lw $a2,0x90($s2)
|
||||
/* c850: 8e470094 */ lw $a3,0x94($s2)
|
||||
/* c854: afb80010 */ sw $t8,0x10($sp)
|
||||
/* c858: afb90014 */ sw $t9,0x14($sp)
|
||||
/* c85c: 8e4900a4 */ lw $t1,0xa4($s2)
|
||||
/* c860: 8e4800a0 */ lw $t0,0xa0($s2)
|
||||
/* c864: 3c047005 */ lui $a0,%hi(var70052b58)
|
||||
/* c868: 24842b58 */ addiu $a0,$a0,%lo(var70052b58)
|
||||
/* c86c: afa9001c */ sw $t1,0x1c($sp)
|
||||
/* c870: 0c00bea9 */ jal rmonPrint
|
||||
/* c874: afa80018 */ sw $t0,0x18($sp)
|
||||
/* c878: 8e4a00b0 */ lw $t2,0xb0($s2)
|
||||
/* c87c: 8e4b00b4 */ lw $t3,0xb4($s2)
|
||||
/* c880: 8e4600a8 */ lw $a2,0xa8($s2)
|
||||
/* c884: 8e4700ac */ lw $a3,0xac($s2)
|
||||
/* c888: afaa0010 */ sw $t2,0x10($sp)
|
||||
/* c88c: afab0014 */ sw $t3,0x14($sp)
|
||||
/* c890: 8e4d00bc */ lw $t5,0xbc($s2)
|
||||
/* c894: 8e4c00b8 */ lw $t4,0xb8($s2)
|
||||
/* c898: 3c047005 */ lui $a0,%hi(var70052b80)
|
||||
/* c89c: 24842b80 */ addiu $a0,$a0,%lo(var70052b80)
|
||||
/* c8a0: afad001c */ sw $t5,0x1c($sp)
|
||||
/* c8a4: 0c00bea9 */ jal rmonPrint
|
||||
/* c8a8: afac0018 */ sw $t4,0x18($sp)
|
||||
/* c8ac: 8e4e00c8 */ lw $t6,0xc8($s2)
|
||||
/* c8b0: 8e4f00cc */ lw $t7,0xcc($s2)
|
||||
/* c8b4: 8e4600c0 */ lw $a2,0xc0($s2)
|
||||
/* c8b8: 8e4700c4 */ lw $a3,0xc4($s2)
|
||||
/* c8bc: afae0010 */ sw $t6,0x10($sp)
|
||||
/* c8c0: afaf0014 */ sw $t7,0x14($sp)
|
||||
/* c8c4: 8e5900d4 */ lw $t9,0xd4($s2)
|
||||
/* c8c8: 8e5800d0 */ lw $t8,0xd0($s2)
|
||||
/* c8cc: 3c047005 */ lui $a0,%hi(var70052ba8)
|
||||
/* c8d0: 24842ba8 */ addiu $a0,$a0,%lo(var70052ba8)
|
||||
/* c8d4: afb9001c */ sw $t9,0x1c($sp)
|
||||
/* c8d8: 0c00bea9 */ jal rmonPrint
|
||||
/* c8dc: afb80018 */ sw $t8,0x18($sp)
|
||||
/* c8e0: 8e4800e0 */ lw $t0,0xe0($s2)
|
||||
/* c8e4: 8e4900e4 */ lw $t1,0xe4($s2)
|
||||
/* c8e8: 3c047005 */ lui $a0,%hi(var70052bd0)
|
||||
/* c8ec: 8e4600d8 */ lw $a2,0xd8($s2)
|
||||
/* c8f0: 8e4700dc */ lw $a3,0xdc($s2)
|
||||
/* c8f4: 24842bd0 */ addiu $a0,$a0,%lo(var70052bd0)
|
||||
/* c8f8: afa80010 */ sw $t0,0x10($sp)
|
||||
/* c8fc: 0c00bea9 */ jal rmonPrint
|
||||
/* c900: afa90014 */ sw $t1,0x14($sp)
|
||||
/* c904: 8faa00f0 */ lw $t2,0xf0($sp)
|
||||
/* c908: 8e4b010c */ lw $t3,0x10c($s2)
|
||||
/* c90c: 8e4600fc */ lw $a2,0xfc($s2)
|
||||
/* c910: 8e470100 */ lw $a3,0x100($s2)
|
||||
/* c914: 8d450014 */ lw $a1,0x14($t2)
|
||||
/* c918: afab0010 */ sw $t3,0x10($sp)
|
||||
/* c91c: 8e4c0104 */ lw $t4,0x104($s2)
|
||||
/* c920: 3c047005 */ lui $a0,%hi(var70052bec)
|
||||
/* c924: 24842bec */ addiu $a0,$a0,%lo(var70052bec)
|
||||
/* c928: afac0014 */ sw $t4,0x14($sp)
|
||||
/* c92c: 8e4d00f8 */ lw $t5,0xf8($s2)
|
||||
/* c930: 0c00bea9 */ jal rmonPrint
|
||||
/* c934: afad0018 */ sw $t5,0x18($sp)
|
||||
/* c938: 8e4500fc */ lw $a1,0xfc($s2)
|
||||
/* c93c: 3c047005 */ lui $a0,%hi(var70052c24)
|
||||
/* c940: 24842c24 */ addiu $a0,$a0,%lo(var70052c24)
|
||||
/* c944: 8cae0008 */ lw $t6,0x8($a1)
|
||||
/* c948: 8ca60000 */ lw $a2,0x0($a1)
|
||||
/* c94c: 8ca70004 */ lw $a3,0x4($a1)
|
||||
/* c950: afae0010 */ sw $t6,0x10($sp)
|
||||
/* c954: 8caf000c */ lw $t7,0xc($a1)
|
||||
/* c958: 00a01025 */ or $v0,$a1,$zero
|
||||
/* c95c: 0c00bea9 */ jal rmonPrint
|
||||
/* c960: afaf0014 */ sw $t7,0x14($sp)
|
||||
/* c964: 3c057005 */ lui $a1,%hi(var70052c48)
|
||||
/* c968: 3c068006 */ lui $a2,%hi(var8005d5bc)
|
||||
/* c96c: 24c6d5bc */ addiu $a2,$a2,%lo(var8005d5bc)
|
||||
/* c970: 24a52c48 */ addiu $a1,$a1,%lo(var70052c48)
|
||||
/* c974: 0c0032b9 */ jal func0000cae4
|
||||
/* c978: 8e440100 */ lw $a0,0x100($s2)
|
||||
/* c97c: 3c047005 */ lui $a0,%hi(var70052c50)
|
||||
/* c980: 0c00bea9 */ jal rmonPrint
|
||||
/* c984: 24842c50 */ addiu $a0,$a0,%lo(var70052c50)
|
||||
/* c988: 3c057005 */ lui $a1,%hi(var70052c54)
|
||||
/* c98c: 3c068006 */ lui $a2,%hi(var8005d880)
|
||||
/* c990: 24c6d880 */ addiu $a2,$a2,%lo(var8005d880)
|
||||
/* c994: 24a52c54 */ addiu $a1,$a1,%lo(var70052c54)
|
||||
/* c998: 0c0032b9 */ jal func0000cae4
|
||||
/* c99c: 8e44010c */ lw $a0,0x10c($s2)
|
||||
/* c9a0: 3c047005 */ lui $a0,%hi(var70052c5c)
|
||||
/* c9a4: 0c00bea9 */ jal rmonPrint
|
||||
/* c9a8: 24842c5c */ addiu $a0,$a0,%lo(var70052c5c)
|
||||
/* c9ac: 8e4400d4 */ lw $a0,0xd4($s2)
|
||||
/* c9b0: 8fa800f0 */ lw $t0,0xf0($sp)
|
||||
/* c9b4: 00009825 */ or $s3,$zero,$zero
|
||||
/* c9b8: 00808825 */ or $s1,$a0,$zero
|
||||
/* c9bc: 0c0030ae */ jal func0000c2b8
|
||||
/* c9c0: 8d050014 */ lw $a1,0x14($t0)
|
||||
/* c9c4: 8fa900f0 */ lw $t1,0xf0($sp)
|
||||
/* c9c8: 0040a025 */ or $s4,$v0,$zero
|
||||
/* c9cc: 02202025 */ or $a0,$s1,$zero
|
||||
/* c9d0: 0c0030cd */ jal func0000c334
|
||||
/* c9d4: 8d250014 */ lw $a1,0x14($t1)
|
||||
/* c9d8: afa2005c */ sw $v0,0x5c($sp)
|
||||
/* c9dc: 8e5000fc */ lw $s0,0xfc($s2)
|
||||
/* c9e0: 3c047005 */ lui $a0,%hi(var70052c60)
|
||||
/* c9e4: aea00000 */ sw $zero,0x0($s5)
|
||||
/* c9e8: 0c00bea9 */ jal rmonPrint
|
||||
/* c9ec: 24842c60 */ addiu $a0,$a0,%lo(var70052c60)
|
||||
.L0000c9f0:
|
||||
/* c9f0: 3c057000 */ lui $a1,%hi(boot)
|
||||
/* c9f4: 24a51050 */ addiu $a1,$a1,%lo(boot)
|
||||
/* c9f8: 02002025 */ or $a0,$s0,$zero
|
||||
/* c9fc: 02203025 */ or $a2,$s1,$zero
|
||||
/* ca00: 0c003046 */ jal func0000c118
|
||||
/* ca04: 27a70064 */ addiu $a3,$sp,0x64
|
||||
/* ca08: 3c047005 */ lui $a0,%hi(var70052c68)
|
||||
/* ca0c: 00408825 */ or $s1,$v0,$zero
|
||||
/* ca10: 24842c68 */ addiu $a0,$a0,%lo(var70052c68)
|
||||
/* ca14: 0c00bea9 */ jal rmonPrint
|
||||
/* ca18: 02002825 */ or $a1,$s0,$zero
|
||||
/* ca1c: 8eab0000 */ lw $t3,0x0($s5)
|
||||
/* ca20: 8faa00f4 */ lw $t2,0xf4($sp)
|
||||
/* ca24: 24010004 */ addiu $at,$zero,0x4
|
||||
/* ca28: 000b6080 */ sll $t4,$t3,0x2
|
||||
/* ca2c: 014c6821 */ addu $t5,$t2,$t4
|
||||
/* ca30: adb00000 */ sw $s0,0x0($t5)
|
||||
/* ca34: 8eae0000 */ lw $t6,0x0($s5)
|
||||
/* ca38: 3c047005 */ lui $a0,%hi(var70052c70)
|
||||
/* ca3c: 25cf0001 */ addiu $t7,$t6,0x1
|
||||
/* ca40: 16610003 */ bne $s3,$at,.L0000ca50
|
||||
/* ca44: aeaf0000 */ sw $t7,0x0($s5)
|
||||
/* ca48: 0c00bea9 */ jal rmonPrint
|
||||
/* ca4c: 24842c70 */ addiu $a0,$a0,%lo(var70052c70)
|
||||
.L0000ca50:
|
||||
/* ca50: 16200002 */ bnez $s1,.L0000ca5c
|
||||
/* ca54: 8fa800e0 */ lw $t0,0xe0($sp)
|
||||
/* ca58: 8e5100d4 */ lw $s1,0xd4($s2)
|
||||
.L0000ca5c:
|
||||
/* ca5c: 15000003 */ bnez $t0,.L0000ca6c
|
||||
/* ca60: 8fac005c */ lw $t4,0x5c($sp)
|
||||
/* ca64: 10000003 */ b .L0000ca74
|
||||
/* ca68: 8e5000e4 */ lw $s0,0xe4($s2)
|
||||
.L0000ca6c:
|
||||
/* ca6c: 8fa900e0 */ lw $t1,0xe0($sp)
|
||||
/* ca70: 8d300000 */ lw $s0,0x0($t1)
|
||||
.L0000ca74:
|
||||
/* ca74: 022c082b */ sltu $at,$s1,$t4
|
||||
/* ca78: 1420000a */ bnez $at,.L0000caa4
|
||||
/* ca7c: 262d0010 */ addiu $t5,$s1,0x10
|
||||
/* ca80: 0234082b */ sltu $at,$s1,$s4
|
||||
/* ca84: 10200007 */ beqz $at,.L0000caa4
|
||||
/* ca88: 2a620009 */ slti $v0,$s3,0x9
|
||||
/* ca8c: 11b40005 */ beq $t5,$s4,.L0000caa4
|
||||
/* ca90: 00000000 */ nop
|
||||
/* ca94: 12000003 */ beqz $s0,.L0000caa4
|
||||
/* ca98: 00000000 */ nop
|
||||
/* ca9c: 1440ffd4 */ bnez $v0,.L0000c9f0
|
||||
/* caa0: 26730001 */ addiu $s3,$s3,0x1
|
||||
.L0000caa4:
|
||||
/* caa4: 3c047005 */ lui $a0,%hi(var70052c7c)
|
||||
/* caa8: 0c00bea9 */ jal rmonPrint
|
||||
/* caac: 24842c7c */ addiu $a0,$a0,%lo(var70052c7c)
|
||||
/* cab0: 3c047005 */ lui $a0,%hi(var70052c80)
|
||||
/* cab4: 0c00bea9 */ jal rmonPrint
|
||||
/* cab8: 24842c80 */ addiu $a0,$a0,%lo(var70052c80)
|
||||
/* cabc: 8fbf003c */ lw $ra,0x3c($sp)
|
||||
/* cac0: 8fb00024 */ lw $s0,0x24($sp)
|
||||
/* cac4: 8fb10028 */ lw $s1,0x28($sp)
|
||||
/* cac8: 8fb2002c */ lw $s2,0x2c($sp)
|
||||
/* cacc: 8fb30030 */ lw $s3,0x30($sp)
|
||||
/* cad0: 8fb40034 */ lw $s4,0x34($sp)
|
||||
/* cad4: 8fb50038 */ lw $s5,0x38($sp)
|
||||
/* cad8: 27bd00f0 */ addiu $sp,$sp,0xf0
|
||||
/* cadc: 03e00008 */ jr $ra
|
||||
/* cae0: 00001025 */ or $v0,$zero,$zero
|
||||
);
|
||||
crashPrint("\n\nFAULT-\n");
|
||||
|
||||
if (g_Vars.unk0004e0 == 0) {
|
||||
// Print a stack trace in a dodgy way.
|
||||
// It works by iterating through the stack allocation, looking for any
|
||||
// values which could potentially be a return address, and prints them.
|
||||
u32 *stackend = (u32 *) crashGetStackEnd(ctx->sp, thread->id);
|
||||
u32 *sp;
|
||||
crashPrint("DodgyStackTrace: %08llx ", ctx->ra & 0xffffffff);
|
||||
sp = (u32 *) ctx->sp;
|
||||
|
||||
while (sp < stackend) {
|
||||
if (crashIsReturnAddress((u32 *)*sp)) {
|
||||
crashPrint("%08x ", *sp);
|
||||
}
|
||||
|
||||
sp++;
|
||||
}
|
||||
|
||||
crashPrint(".\n");
|
||||
}
|
||||
|
||||
crashPrint("%H#@! Another Perfect Crash (tm)\n");
|
||||
|
||||
if (g_Vars.unk0004e0 == 0) {
|
||||
// Print floating point registers
|
||||
crashPrint2Floats(0, ctx->fp0.f.f_odd, ctx->fp0.f.f_even);
|
||||
crashPrint3Floats(2, ctx->fp2.f.f_odd, ctx->fp2.f.f_even, ctx->fp4.f.f_odd);
|
||||
crashPrint3Floats(5, ctx->fp4.f.f_even, ctx->fp6.f.f_odd, ctx->fp6.f.f_even);
|
||||
crashPrint3Floats(8, ctx->fp8.f.f_odd, ctx->fp8.f.f_even, ctx->fp10.f.f_odd);
|
||||
crashPrint3Floats(11, ctx->fp10.f.f_even, ctx->fp12.f.f_odd, ctx->fp12.f.f_even);
|
||||
crashPrint3Floats(14, ctx->fp14.f.f_odd, ctx->fp14.f.f_even, ctx->fp16.f.f_odd);
|
||||
crashPrint3Floats(17, ctx->fp16.f.f_even, ctx->fp18.f.f_odd, ctx->fp18.f.f_even);
|
||||
crashPrint3Floats(20, ctx->fp20.f.f_odd, ctx->fp20.f.f_even, ctx->fp22.f.f_odd);
|
||||
crashPrint3Floats(23, ctx->fp22.f.f_even, ctx->fp24.f.f_odd, ctx->fp24.f.f_even);
|
||||
crashPrint3Floats(26, ctx->fp26.f.f_odd, ctx->fp26.f.f_even, ctx->fp28.f.f_odd);
|
||||
crashPrint3Floats(29, ctx->fp28.f.f_even, ctx->fp30.f.f_odd, ctx->fp30.f.f_even);
|
||||
}
|
||||
|
||||
// Print integer registers
|
||||
crashPrint("at 0x%016llx v0 0x%016llx v1 0x%016llx\n", ctx->at, ctx->v0, ctx->v1);
|
||||
crashPrint("a0 0x%016llx a1 0x%016llx a2 0x%016llx\n", ctx->a0, ctx->a1, ctx->a2);
|
||||
crashPrint("a3 0x%016llx t0 0x%016llx t1 0x%016llx\n", ctx->a3, ctx->t0, ctx->t1);
|
||||
crashPrint("t2 0x%016llx t3 0x%016llx t4 0x%016llx\n", ctx->t2, ctx->t3, ctx->t4);
|
||||
crashPrint("t5 0x%016llx t6 0x%016llx t7 0x%016llx\n", ctx->t5, ctx->t6, ctx->t7);
|
||||
crashPrint("s0 0x%016llx s1 0x%016llx s2 0x%016llx\n", ctx->s0, ctx->s1, ctx->s2);
|
||||
crashPrint("s3 0x%016llx s4 0x%016llx s5 0x%016llx\n", ctx->s3, ctx->s4, ctx->s5);
|
||||
crashPrint("s6 0x%016llx s7 0x%016llx t8 0x%016llx\n", ctx->s6, ctx->s7, ctx->t8);
|
||||
crashPrint("t9 0x%016llx gp 0x%016llx sp 0x%016llx\n", ctx->t9, ctx->gp, ctx->sp);
|
||||
crashPrint("s8 0x%016llx ra 0x%016llx\n", ctx->s8, ctx->ra);
|
||||
|
||||
crashPrint("TID %d epc %08x caus %08x fp %08x badv %08x sr %08x\n",
|
||||
thread->id, ctx->pc, ctx->cause, ctx->fpcsr, ctx->badvaddr, ctx->sr);
|
||||
|
||||
// Print the address of the faulted instruction, along with the instruction
|
||||
// itself and the next three - presumably to help the developer locate it.
|
||||
crashPrint("dshex -a %08x %08x %08x %08x %08x\n", ctx->pc,
|
||||
((u32 *)ctx->pc)[0],
|
||||
((u32 *)ctx->pc)[1],
|
||||
((u32 *)ctx->pc)[2],
|
||||
((u32 *)ctx->pc)[3]);
|
||||
|
||||
func0000cae4(ctx->cause, "cause", &var8005d5bc);
|
||||
crashPrint(" : ");
|
||||
func0000cae4(ctx->fpcsr, "fpcsr", &var8005d880);
|
||||
crashPrint("\n");
|
||||
|
||||
// Print a proper stack trace
|
||||
i = 0;
|
||||
done = false;
|
||||
sp = (u32 *)ctx->sp;
|
||||
stackend = (u32 *) crashGetStackEnd((u32)sp, thread->id);
|
||||
stackstart = (u32 *) crashGetStackStart((u32)sp, thread->id);
|
||||
ptr = ctx->pc;
|
||||
*tracelen = 0;
|
||||
crashPrint("nearl: ");
|
||||
|
||||
while (!done) {
|
||||
sp = (u32 *) func0000c118(ptr, &_libSegmentStart, (u32)sp, sp64);
|
||||
crashPrint(" %08x ", ptr);
|
||||
|
||||
callstack[*tracelen] = ptr;
|
||||
*tracelen = *tracelen + 1;
|
||||
|
||||
if (i == 4) {
|
||||
crashPrint("\n ");
|
||||
}
|
||||
|
||||
if (sp == NULL) {
|
||||
sp = (u32 *)ctx->sp;
|
||||
}
|
||||
|
||||
if (sp64[31] == 0) {
|
||||
ptr = ctx->ra;
|
||||
} else {
|
||||
ptr = *(u32 *)(sp64[31]);
|
||||
}
|
||||
|
||||
if (sp < stackstart || sp >= stackend || stackend == &sp[4] || ptr == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
done = i >= 9;
|
||||
i++;
|
||||
}
|
||||
|
||||
crashPrint("\n");
|
||||
crashPrint("\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char var70052c84[] = "%s <";
|
||||
const char var70052c8c[] = ",";
|
||||
|
|
@ -1056,7 +780,7 @@ glabel func0000cae4
|
|||
/* cb04: afb30024 */ sw $s3,0x24($sp)
|
||||
/* cb08: afb20020 */ sw $s2,0x20($sp)
|
||||
/* cb0c: 24110001 */ addiu $s1,$zero,0x1
|
||||
/* cb10: 0c00bea9 */ jal rmonPrint
|
||||
/* cb10: 0c00bea9 */ jal crashPrint
|
||||
/* cb14: 24842c84 */ addiu $a0,$a0,%lo(var70052c84)
|
||||
/* cb18: 8e020000 */ lw $v0,0x0($s0)
|
||||
/* cb1c: 3c137005 */ lui $s3,%hi(var70052c8c)
|
||||
|
|
@ -1074,11 +798,11 @@ glabel func0000cae4
|
|||
/* cb48: 10000003 */ b .L0000cb58
|
||||
/* cb4c: 00008825 */ or $s1,$zero,$zero
|
||||
.L0000cb50:
|
||||
/* cb50: 0c00bea9 */ jal rmonPrint
|
||||
/* cb50: 0c00bea9 */ jal crashPrint
|
||||
/* cb54: 02602025 */ or $a0,$s3,$zero
|
||||
.L0000cb58:
|
||||
/* cb58: 02402025 */ or $a0,$s2,$zero
|
||||
/* cb5c: 0c00bea9 */ jal rmonPrint
|
||||
/* cb5c: 0c00bea9 */ jal crashPrint
|
||||
/* cb60: 8e050008 */ lw $a1,0x8($s0)
|
||||
/* cb64: 8e02000c */ lw $v0,0xc($s0)
|
||||
.L0000cb68:
|
||||
|
|
@ -1087,7 +811,7 @@ glabel func0000cae4
|
|||
/* cb70: 8e0e0004 */ lw $t6,0x4($s0)
|
||||
.L0000cb74:
|
||||
/* cb74: 3c047005 */ lui $a0,%hi(var70052c94)
|
||||
/* cb78: 0c00bea9 */ jal rmonPrint
|
||||
/* cb78: 0c00bea9 */ jal crashPrint
|
||||
/* cb7c: 24842c94 */ addiu $a0,$a0,%lo(var70052c94)
|
||||
/* cb80: 8fbf002c */ lw $ra,0x2c($sp)
|
||||
/* cb84: 8fb00018 */ lw $s0,0x18($sp)
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ glabel func0002fa48
|
|||
);
|
||||
|
||||
GLOBAL_ASM(
|
||||
glabel rmonPrint
|
||||
glabel crashPrint
|
||||
/* 2faa4: 27bdffe0 */ addiu $sp,$sp,-32
|
||||
/* 2faa8: afa40020 */ sw $a0,0x20($sp)
|
||||
/* 2faac: afbf0014 */ sw $ra,0x14($sp)
|
||||
|
|
|
|||
Loading…
Reference in New Issue