/* * ======== Task_checkStacks ======== */ Void Task_checkStacks(Task_Handle oldTask, Task_Handle newTask) { UInt oldTaskStack; /* used to obtain current (oldTask) stack address */ /* * oldTask is NULL for the very first stack switch, skip it */ if (oldTask == NULL) { return; } /* check top of stacks for 0xbe */ if (!Task_SupportProxy_checkStack(oldTask->stack, oldTask->stackSize)) { Error_raise(NULL, Task_E_stackOverflow, oldTask, 0); } if (!Task_SupportProxy_checkStack(newTask->stack, newTask->stackSize)) { Error_raise(NULL, Task_E_stackOverflow, newTask, 0); } /* check sp's for being in bounds */ if (((UArg)&oldTaskStack < (UArg)oldTask->stack) || ((UArg)&oldTaskStack > (UArg)(oldTask->stack+oldTask->stackSize))) { Error_raise(NULL, Task_E_spOutOfBounds, oldTask, oldTask->context); } if ((newTask->context < (Ptr)newTask->stack) || (newTask->context > (Ptr)(newTask->stack+newTask->stackSize))) { Error_raise(NULL, Task_E_spOutOfBounds, newTask, newTask->context); } }
/* * ======== Task_checkStacks ======== */ Void Task_checkStacks(Task_Handle oldTask, Task_Handle newTask) { /* * oldTask is NULL for the very first stack switch, skip it */ if (oldTask == NULL) { return; } /* check top of stacks for 0xbe */ if (!Task_SupportProxy_checkStack(oldTask->stack, oldTask->stackSize)) { Error_raise(NULL, Task_E_stackOverflow, oldTask, 0); } if (!Task_SupportProxy_checkStack(newTask->stack, newTask->stackSize)) { Error_raise(NULL, Task_E_stackOverflow, newTask, 0); } /* check sp's for being in bounds */ if ((oldTask->context < (Ptr)oldTask->stack) || (oldTask->context > (Ptr)(oldTask->stack+oldTask->stackSize))) { Error_raise(NULL, Task_E_spOutOfBounds, oldTask, oldTask->context); } if ((newTask->context < (Ptr)newTask->stack) || (newTask->context > (Ptr)(newTask->stack+newTask->stackSize))) { Error_raise(NULL, Task_E_spOutOfBounds, newTask, newTask->context); } }