diff options
-rw-r--r-- | builtin/assert.h | 17 | ||||
-rw-r--r-- | common/panic_output.c | 23 |
2 files changed, 22 insertions, 18 deletions
diff --git a/builtin/assert.h b/builtin/assert.h index e58a450fa8..f51ea7b57a 100644 --- a/builtin/assert.h +++ b/builtin/assert.h @@ -27,7 +27,9 @@ extern noreturn void panic_assert_fail(const char *fname, int linenum); if (!(cond)) \ panic_assert_fail(__FILE__, __LINE__); \ } while (0) -#else + +#else /* !CONFIG_DEBUG_ASSERT_BRIEF */ + extern noreturn void panic_assert_fail(const char *msg, const char *func, const char *fname, int linenum); #define ASSERT(cond) \ @@ -36,18 +38,21 @@ extern noreturn void panic_assert_fail(const char *msg, const char *func, panic_assert_fail(#cond, __func__, __FILE__, \ __LINE__); \ } while (0) -#endif -#else +#endif /* CONFIG_DEBUG_ASSERT_BRIEF */ + +#else /* !CONFIG_DEBUG_ASSERT_REBOOTS */ + #define ASSERT(cond) \ do { \ if (!(cond)) \ __asm("bkpt"); \ __builtin_unreachable(); \ } while (0) -#endif -#else +#endif /* CONFIG_DEBUG_ASSERT_REBOOTS */ + +#else /* !CONFIG_DEBUG_ASSERT */ #define ASSERT(cond) -#endif +#endif /* CONFIG_DEBUG_ASSERT */ /* This collides with cstdlib, so exclude it where cstdlib is supported. */ #ifndef assert diff --git a/common/panic_output.c b/common/panic_output.c index 66a39a60cc..cbec6c2f00 100644 --- a/common/panic_output.c +++ b/common/panic_output.c @@ -126,16 +126,20 @@ void panic_reboot(void) system_reset(0); } -#ifdef CONFIG_DEBUG_ASSERT_REBOOTS +/* Complete the processing of a panic, after the initial message is shown */ +static noreturn void complete_panic(int linenum) +{ + if (IS_ENABLED(CONFIG_SOFTWARE_PANIC)) + software_panic(PANIC_SW_ASSERT, linenum); + else + panic_reboot(); +} + #ifdef CONFIG_DEBUG_ASSERT_BRIEF void panic_assert_fail(const char *fname, int linenum) { panic_printf("\nASSERTION FAILURE at %s:%d\n", fname, linenum); -#ifdef CONFIG_SOFTWARE_PANIC - software_panic(PANIC_SW_ASSERT, linenum); -#else - panic_reboot(); -#endif + complete_panic(linenum); } #else void panic_assert_fail(const char *msg, const char *func, const char *fname, @@ -143,14 +147,9 @@ void panic_assert_fail(const char *msg, const char *func, const char *fname, { panic_printf("\nASSERTION FAILURE '%s' in %s() at %s:%d\n", msg, func, fname, linenum); -#ifdef CONFIG_SOFTWARE_PANIC - software_panic(PANIC_SW_ASSERT, linenum); -#else - panic_reboot(); -#endif + complete_panic(linenum); } #endif -#endif void panic(const char *msg) { |