diff options
author | Keith Packard <keithp@keithp.com> | 2012-10-24 22:46:55 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2012-10-25 00:07:14 -0700 |
commit | 4b13d3c659240e5a8347b1ba7ab0bf1d8355eba3 (patch) | |
tree | ef3e1a8e37d8ba3c362f1fdf43e5e9bd09157af9 /src/core/ao_task.c | |
parent | e80fa6de4ccc5c4851eab9fb941f9282d2e3eb16 (diff) |
altos: Add stack-guard code. Uses STM MPU to trap stack overflow.
This marks the lowest portion of the stack as inaccessible to the CPU,
causing the processor to fault when it reaches it. The fault then
generates a panic message so that the user can know what happened.
Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src/core/ao_task.c')
-rw-r--r-- | src/core/ao_task.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/core/ao_task.c b/src/core/ao_task.c index c2b1b270..df70b906 100644 --- a/src/core/ao_task.c +++ b/src/core/ao_task.c @@ -20,6 +20,9 @@ #if HAS_SAMPLE_PROFILE #include <ao_sample_profile.h> #endif +#if HAS_STACK_GUARD +#include <ao_mpu.h> +#endif #define AO_NO_TASK_INDEX 0xff @@ -127,6 +130,9 @@ ao_yield(void) ao_arch_naked_define ao_cur_task->start = ao_sample_profile_timer_value(); #endif } +#if HAS_STACK_GUARD + ao_mpu_stack_guard(ao_cur_task->stack); +#endif #if AO_CHECK_STACK cli(); in_yield = 0; |