diff options
| author | Tharo <17233964+Thar0@users.noreply.github.com> | 2022-02-06 18:00:01 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-06 13:00:01 -0500 |
| commit | cf048f849a514c404f4c2866eb6fd87e2731b987 (patch) | |
| tree | dfed504850fc7b7d6878c2fbede8c790c4a48a0f /src/code | |
| parent | b41489c443943d273251b2497cac2ead2eea20ab (diff) | |
Correctly align program stacks (#1133)
* Properly align program stacks
* Enforce size being a multiple of 8 bytes
* Correct alignment calculation
* Use an ALIGN8 macro in the stack declaration macro
Diffstat (limited to 'src/code')
| -rw-r--r-- | src/code/fault.c | 6 | ||||
| -rw-r--r-- | src/code/main.c | 24 |
2 files changed, 15 insertions, 15 deletions
diff --git a/src/code/fault.c b/src/code/fault.c index e68ab9a26..4e1087524 100644 --- a/src/code/fault.c +++ b/src/code/fault.c @@ -79,7 +79,7 @@ const char* sFpExceptionNames[] = { // TODO: import .bss (has reordering issues) extern FaultMgr* sFaultInstance; extern u8 sFaultAwaitingInput; -extern char sFaultStack[0x600]; +extern STACK(sFaultStack, 0x600); extern StackEntry sFaultThreadInfo; extern FaultMgr gFaultMgr; @@ -1264,8 +1264,8 @@ void Fault_Init(void) { sFaultInstance->autoScroll = false; gFaultMgr.faultHandlerEnabled = true; osCreateMesgQueue(&sFaultInstance->queue, &sFaultInstance->msg, 1); - StackCheck_Init(&sFaultThreadInfo, &sFaultStack, sFaultStack + sizeof(sFaultStack), 0, 0x100, "fault"); - osCreateThread(&sFaultInstance->thread, 2, Fault_ThreadEntry, 0, sFaultStack + sizeof(sFaultStack), + StackCheck_Init(&sFaultThreadInfo, &sFaultStack, STACK_TOP(sFaultStack), 0, 0x100, "fault"); + osCreateThread(&sFaultInstance->thread, 2, Fault_ThreadEntry, 0, STACK_TOP(sFaultStack), OS_PRIORITY_APPMAX); osStartThread(&sFaultInstance->thread); } diff --git a/src/code/main.c b/src/code/main.c index c15449cb6..c3773b51d 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -11,11 +11,11 @@ PadMgr gPadMgr; IrqMgr gIrqMgr; u32 gSegments[NUM_SEGMENTS]; OSThread sGraphThread; -u8 sGraphStack[0x1800]; -u8 sSchedStack[0x600]; -u8 sAudioStack[0x800]; -u8 sPadMgrStack[0x500]; -u8 sIrqMgrStack[0x500]; +STACK(sGraphStack, 0x1800); +STACK(sSchedStack, 0x600); +STACK(sAudioStack, 0x800); +STACK(sPadMgrStack, 0x500); +STACK(sIrqMgrStack, 0x500); StackEntry sGraphStackInfo; StackEntry sSchedStackInfo; StackEntry sAudioStackInfo; @@ -75,25 +75,25 @@ void Main(void* arg) { Main_LogSystemHeap(); osCreateMesgQueue(&irqMgrMsgQ, irqMgrMsgBuf, 0x3C); - StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, sIrqMgrStack + sizeof(sIrqMgrStack), 0, 0x100, "irqmgr"); + StackCheck_Init(&sIrqMgrStackInfo, sIrqMgrStack, STACK_TOP(sIrqMgrStack), 0, 0x100, "irqmgr"); IrqMgr_Init(&gIrqMgr, &sGraphStackInfo, Z_PRIORITY_IRQMGR, 1); osSyncPrintf("タスクスケジューラの初期化\n"); // "Initialize the task scheduler" - StackCheck_Init(&sSchedStackInfo, sSchedStack, sSchedStack + sizeof(sSchedStack), 0, 0x100, "sched"); + StackCheck_Init(&sSchedStackInfo, sSchedStack, STACK_TOP(sSchedStack), 0, 0x100, "sched"); Sched_Init(&gSchedContext, &sAudioStack, Z_PRIORITY_SCHED, D_80013960, 1, &gIrqMgr); IrqMgr_AddClient(&gIrqMgr, &irqClient, &irqMgrMsgQ); - StackCheck_Init(&sAudioStackInfo, sAudioStack, sAudioStack + sizeof(sAudioStack), 0, 0x100, "audio"); - AudioMgr_Init(&gAudioMgr, sAudioStack + sizeof(sAudioStack), Z_PRIORITY_AUDIOMGR, 0xA, &gSchedContext, &gIrqMgr); + StackCheck_Init(&sAudioStackInfo, sAudioStack, STACK_TOP(sAudioStack), 0, 0x100, "audio"); + AudioMgr_Init(&gAudioMgr, STACK_TOP(sAudioStack), Z_PRIORITY_AUDIOMGR, 0xA, &gSchedContext, &gIrqMgr); - StackCheck_Init(&sPadMgrStackInfo, sPadMgrStack, sPadMgrStack + sizeof(sPadMgrStack), 0, 0x100, "padmgr"); + StackCheck_Init(&sPadMgrStackInfo, sPadMgrStack, STACK_TOP(sPadMgrStack), 0, 0x100, "padmgr"); PadMgr_Init(&gPadMgr, &sSiIntMsgQ, &gIrqMgr, 7, Z_PRIORITY_PADMGR, &sIrqMgrStack); AudioMgr_Unlock(&gAudioMgr); - StackCheck_Init(&sGraphStackInfo, sGraphStack, sGraphStack + sizeof(sGraphStack), 0, 0x100, "graph"); - osCreateThread(&sGraphThread, 4, Graph_ThreadEntry, arg, sGraphStack + sizeof(sGraphStack), Z_PRIORITY_GRAPH); + StackCheck_Init(&sGraphStackInfo, sGraphStack, STACK_TOP(sGraphStack), 0, 0x100, "graph"); + osCreateThread(&sGraphThread, 4, Graph_ThreadEntry, arg, STACK_TOP(sGraphStack), Z_PRIORITY_GRAPH); osStartThread(&sGraphThread); osSetThreadPri(0, Z_PRIORITY_SCHED); |
