diff --git a/core/lib/include/panic.h b/core/lib/include/panic.h index e536dd5622..51854b5160 100644 --- a/core/lib/include/panic.h +++ b/core/lib/include/panic.h @@ -51,6 +51,7 @@ typedef enum { PANIC_DUMMY_HANDLER, /**< unhandled interrupt */ #endif PANIC_SSP, /**< stack smashing protector failure */ + PANIC_STACK_OVERFLOW, /**< stack overflow detected */ PANIC_UNDEFINED } core_panic_t; diff --git a/core/sched.c b/core/sched.c index e99272dc11..236c58e764 100644 --- a/core/sched.c +++ b/core/sched.c @@ -30,6 +30,7 @@ #include "log.h" #include "sched.h" #include "thread.h" +#include "panic.h" #ifdef MODULE_MPU_STACK_GUARD #include "mpu.h" @@ -130,9 +131,10 @@ static void _unschedule(thread_t *active_thread) */ if (*((uintptr_t *)(uintptr_t)active_thread->stack_start) != (uintptr_t)active_thread->stack_start) { - LOG_WARNING( + LOG_ERROR( "scheduler(): stack overflow detected, pid=%" PRIkernel_pid "\n", active_thread->pid); + core_panic(PANIC_STACK_OVERFLOW, "STACK OVERFLOW"); } #endif #ifdef MODULE_SCHED_CB