Attempt to decompile allocateStack

This commit is contained in:
Ryan Dwyer 2021-01-26 08:22:59 +10:00
parent c3b8cd453b
commit f7d28de0e5
4 changed files with 76 additions and 38 deletions

View File

@ -999,12 +999,12 @@ glabel func000016cc
.L000017f8:
/* 17f8: 0c00058d */ jal func00001634
/* 17fc: 2405001f */ addiu $a1,$zero,0x1f
/* 1800: 3c048006 */ lui $a0,%hi(var8005ce10)
/* 1804: 3c038006 */ lui $v1,%hi(var8005ce2c)
/* 1808: 3c028006 */ lui $v0,%hi(var8005ce48)
/* 180c: 2442ce48 */ addiu $v0,$v0,%lo(var8005ce48)
/* 1810: 2463ce2c */ addiu $v1,$v1,%lo(var8005ce2c)
/* 1814: 2484ce10 */ addiu $a0,$a0,%lo(var8005ce10)
/* 1800: 3c048006 */ lui $a0,%hi(g_StackStartAddrs)
/* 1804: 3c038006 */ lui $v1,%hi(g_StackEndAddrs)
/* 1808: 3c028006 */ lui $v0,%hi(g_StackAllocatedPos)
/* 180c: 2442ce48 */ addiu $v0,$v0,%lo(g_StackAllocatedPos)
/* 1810: 2463ce2c */ addiu $v1,$v1,%lo(g_StackEndAddrs)
/* 1814: 2484ce10 */ addiu $a0,$a0,%lo(g_StackStartAddrs)
.L00001818:
/* 1818: 24630004 */ addiu $v1,$v1,0x4
/* 181c: 24840004 */ addiu $a0,$a0,0x4
@ -1162,22 +1162,22 @@ glabel func000016cc
#if VERSION >= VERSION_NTSC_1_0
GLOBAL_ASM(
glabel allocateStack
/* 18ac: 3c098006 */ lui $t1,%hi(var8005ce48)
/* 18b0: 2529ce48 */ addiu $t1,$t1,%lo(var8005ce48)
/* 18ac: 3c098006 */ lui $t1,%hi(g_StackAllocatedPos)
/* 18b0: 2529ce48 */ addiu $t1,$t1,%lo(g_StackAllocatedPos)
/* 18b4: 8d230000 */ lw $v1,0x0($t1)
/* 18b8: 00041080 */ sll $v0,$a0,0x2
/* 18bc: 3c018006 */ lui $at,%hi(var8005ce2c)
/* 18bc: 3c018006 */ lui $at,%hi(g_StackEndAddrs)
/* 18c0: 00220821 */ addu $at,$at,$v0
/* 18c4: ac23ce2c */ sw $v1,%lo(var8005ce2c)($at)
/* 18c4: ac23ce2c */ sw $v1,%lo(g_StackEndAddrs)($at)
/* 18c8: 2401fff0 */ addiu $at,$zero,-16
/* 18cc: 24a5000f */ addiu $a1,$a1,0xf
/* 18d0: 00a17024 */ and $t6,$a1,$at
/* 18d4: 3c018006 */ lui $at,%hi(var8005ce10)
/* 18d4: 3c018006 */ lui $at,%hi(g_StackStartAddrs)
/* 18d8: 006e7823 */ subu $t7,$v1,$t6
/* 18dc: ad2f0000 */ sw $t7,0x0($t1)
/* 18e0: 00220821 */ addu $at,$at,$v0
/* 18e4: 01c02825 */ or $a1,$t6,$zero
/* 18e8: ac2fce10 */ sw $t7,%lo(var8005ce10)($at)
/* 18e8: ac2fce10 */ sw $t7,%lo(g_StackStartAddrs)($at)
/* 18ec: 01e01825 */ or $v1,$t7,$zero
/* 18f0: 19c0000d */ blez $t6,.L00001928
/* 18f4: 00004025 */ or $t0,$zero,$zero
@ -1192,13 +1192,63 @@ glabel allocateStack
/* 1914: 24420001 */ addiu $v0,$v0,0x1
/* 1918: 1505fffd */ bne $t0,$a1,.L00001910
/* 191c: a046ffff */ sb $a2,-0x1($v0)
/* 1920: 3c038006 */ lui $v1,%hi(var8005ce48)
/* 1924: 8c63ce48 */ lw $v1,%lo(var8005ce48)($v1)
/* 1920: 3c038006 */ lui $v1,%hi(g_StackAllocatedPos)
/* 1924: 8c63ce48 */ lw $v1,%lo(g_StackAllocatedPos)($v1)
.L00001928:
/* 1928: 00651021 */ addu $v0,$v1,$a1
/* 192c: 03e00008 */ jr $ra
/* 1930: 2442fff8 */ addiu $v0,$v0,-8
);
/**
* Allocate stack space for the given thread ID.
*
* Each allocation is aligned to 16 bytes.
*
* Allocations start from the end of onboard memory (0x80400000) and are
* allocated right to left.
*
* The returned address leaves 8 bytes free on the right side of the stack,
* presumably for identification purposes. So the actual stack space available
* can be 8 bytes above or below what was requested.
*
* The stack is initialised with the thread's ID. This makes it easier to
* identify in memory and detect when a stack overflow has occurred.
*/
// Mismatch:
// i is stored in a3 but should be t0
// The value written to ptr[i] is stored in t0 but should be a2
//void *allocateStack(s32 threadid, s32 size)
//{
// u8 *ptr8;
// u32 *ptr32;
// s32 i;
// s32 j;
//
// g_StackEndAddrs[threadid] = g_StackAllocatedPos;
// size = (size + 0xf) & 0xfffffff0;
//
// g_StackAllocatedPos -= size;
// g_StackStartAddrs[threadid] = g_StackAllocatedPos;
//
// ptr8 = g_StackStartAddrs[threadid];
//
// for (i = 0; i < size; i++) {
// ptr8[i] = ((0xf - (threadid & 0xf)) << 4) | (threadid & 0xf);
// }
//
//#if VERSION == VERSION_NTSC_BETA
// // Mark the first 8 words specially
// ptr32 = (u32 *)g_StackStartAddrs[threadid];
//
// for (j = 0; j < 8; j++) {
// *ptr32 = 0xdeadbabe;
// ptr32++;
// }
//#endif
//
// return g_StackAllocatedPos + size - 8;
//}
#else
GLOBAL_ASM(
glabel allocateStack

View File

@ -2972,21 +2972,9 @@ u32 var8005ce00 = 0x00000000;
u32 var8005ce04 = 0x00000000;
u32 var8005ce08 = 0x00000000;
u32 var8005ce0c = 0x00000000;
u32 var8005ce10 = 0x00000000;
u32 var8005ce14 = 0x00000000;
u32 var8005ce18 = 0x00000000;
u32 var8005ce1c = 0x00000000;
u32 var8005ce20 = 0x00000000;
u32 var8005ce24 = 0x00000000;
u32 var8005ce28 = 0x00000000;
u32 var8005ce2c = 0x00000000;
u32 var8005ce30 = 0x00000000;
u32 var8005ce34 = 0x00000000;
u32 var8005ce38 = 0x00000000;
u32 var8005ce3c = 0x00000000;
u32 var8005ce40 = 0x00000000;
u32 var8005ce44 = 0x00000000;
u32 var8005ce48 = 0x80400000;
u8 *g_StackStartAddrs[7] = {0};
u8 *g_StackEndAddrs[7] = {0};
u8 *g_StackAllocatedPos = (u8 *)0x80400000;
u32 var8005ce4c = 0x00000002;
u32 var8005ce50 = 0x10000000;
u32 var8005ce54 = 0x00000000;

View File

@ -40,9 +40,9 @@ extern s32 g_AlarmTimer; // counts upwards
extern u32 var80059fe0;
extern u32 var8005a0b0;
extern u32 var8005b4d0;
extern u32 var8005ce10;
extern u32 var8005ce2c;
extern u32 var8005ce48;
extern u8 *g_StackStartAddrs[];
extern u8 *g_StackEndAddrs[];
extern u8 *g_StackAllocatedPos;
extern u32 var8005ce74;
extern u32 var8005ce8c;
extern u32 var8005ce90;

View File

@ -365,15 +365,15 @@ glabel func0000c2b8
/* c2e0: 10000010 */ b .L0000c324
/* c2e4: 00001025 */ or $v0,$zero,$zero
.L0000c2e8:
/* c2e8: 3c048006 */ lui $a0,%hi(var8005ce10)
/* c2ec: 3c038006 */ lui $v1,%hi(var8005ce2c)
/* c2e8: 3c048006 */ lui $a0,%hi(g_StackStartAddrs)
/* c2ec: 3c038006 */ lui $v1,%hi(g_StackEndAddrs)
/* c2f0: 3c018000 */ lui $at,0x8000
/* c2f4: 00822021 */ addu $a0,$a0,$v0
/* c2f8: 00621821 */ addu $v1,$v1,$v0
/* c2fc: 00c1082b */ sltu $at,$a2,$at
/* c300: 8c84ce10 */ lw $a0,%lo(var8005ce10)($a0)
/* c300: 8c84ce10 */ lw $a0,%lo(g_StackStartAddrs)($a0)
/* c304: 14200003 */ bnez $at,.L0000c314
/* c308: 8c63ce2c */ lw $v1,%lo(var8005ce2c)($v1)
/* c308: 8c63ce2c */ lw $v1,%lo(g_StackEndAddrs)($v1)
/* c30c: 10000005 */ b .L0000c324
/* c310: 00601025 */ or $v0,$v1,$zero
.L0000c314:
@ -403,12 +403,12 @@ glabel func0000c334
/* c358: 1000000b */ b .L0000c388
/* c35c: 00001025 */ or $v0,$zero,$zero
.L0000c360:
/* c360: 3c038006 */ lui $v1,%hi(var8005ce10)
/* c360: 3c038006 */ lui $v1,%hi(g_StackStartAddrs)
/* c364: 3c018000 */ lui $at,0x8000
/* c368: 006e1821 */ addu $v1,$v1,$t6
/* c36c: 0081082b */ sltu $at,$a0,$at
/* c370: 14200003 */ bnez $at,.L0000c380
/* c374: 8c63ce10 */ lw $v1,%lo(var8005ce10)($v1)
/* c374: 8c63ce10 */ lw $v1,%lo(g_StackStartAddrs)($v1)
/* c378: 10000003 */ b .L0000c388
/* c37c: 00601025 */ or $v0,$v1,$zero
.L0000c380: