diff --git a/core/lib/assert.c b/core/lib/assert.c index 002aed0bda..73558e8cf9 100644 --- a/core/lib/assert.c +++ b/core/lib/assert.c @@ -19,34 +19,42 @@ #include "architecture.h" #include "cpu.h" #include "debug.h" +#include "irq.h" #include "panic.h" #if IS_USED(MODULE_BACKTRACE) #include "backtrace.h" #endif -__NORETURN void _assert_failure(const char *file, unsigned line) +__NORETURN static inline void _assert_common(void) { - printf("%s:%u => ", file, line); #if IS_USED(MODULE_BACKTRACE) +#ifdef DEBUG_ASSERT_VERBOSE printf("failed assertion. Backtrace:\n"); +#endif backtrace_print(); #endif #ifdef DEBUG_ASSERT_BREAKPOINT DEBUG_BREAKPOINT(1); #endif + if (DEBUG_ASSERT_NO_PANIC && !irq_is_in() && irq_is_enabled()) { + puts("FAILED ASSERTION."); + while (1) { + thread_sleep(); + } + } core_panic(PANIC_ASSERT_FAIL, "FAILED ASSERTION."); } +__NORETURN void _assert_failure(const char *file, unsigned line) +{ + printf("%s:%u => ", file, line); + _assert_common(); +} + __NORETURN void _assert_panic(void) { printf("%" PRIxTXTPTR "\n", cpu_get_caller_pc()); -#if IS_USED(MODULE_BACKTRACE) - backtrace_print(); -#endif -#ifdef DEBUG_ASSERT_BREAKPOINT - DEBUG_BREAKPOINT(1); -#endif - core_panic(PANIC_ASSERT_FAIL, "FAILED ASSERTION."); + _assert_common(); } /** @} */ diff --git a/core/lib/include/assert.h b/core/lib/include/assert.h index 55bfd29386..665813c92c 100644 --- a/core/lib/include/assert.h +++ b/core/lib/include/assert.h @@ -157,6 +157,15 @@ __NORETURN void _assert_panic(void); #endif #endif +/** + * @brief Don't panic on a failed assertion, just halt the running thread. + * + * If the assertion failed in an interrupt, the system will still panic. + */ +#ifndef DEBUG_ASSERT_NO_PANIC +#define DEBUG_ASSERT_NO_PANIC (1) +#endif + #ifdef __cplusplus } #endif diff --git a/examples/dtls-wolfssl/Makefile.ci b/examples/dtls-wolfssl/Makefile.ci index 4783cb20a8..7c669944d1 100644 --- a/examples/dtls-wolfssl/Makefile.ci +++ b/examples/dtls-wolfssl/Makefile.ci @@ -35,6 +35,7 @@ BOARD_INSUFFICIENT_MEMORY := \ nucleo-l031k6 \ nucleo-l053r8 \ nucleo-l412kb \ + maple-mini \ olimexino-stm32 \ opencm904 \ samd10-xmini \