Attempt to decompile allocateStack
This commit is contained in:
parent
c3b8cd453b
commit
f7d28de0e5
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
Loading…
Reference in New Issue