From: Antonio Nino Diaz Date: Thu, 23 Aug 2018 14:13:58 +0000 (+0100) Subject: backtrace: Print backtrace in assert() and panic() X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=3e530d8ea8336839f50f3265c8815c569527f99f;p=project%2Fbcm63xx%2Fatf.git backtrace: Print backtrace in assert() and panic() When any of these functions is called the backtrace will be printed to the console. Change-Id: Id60842df824b320c485a9323ed6b80600f4ebe35 Signed-off-by: Antonio Nino Diaz --- diff --git a/include/common/debug.h b/include/common/debug.h index ee25af12..ab3e15a7 100644 --- a/include/common/debug.h +++ b/include/common/debug.h @@ -27,7 +27,9 @@ #ifndef __ASSEMBLY__ #include +#include #include +#include #include /* @@ -90,7 +92,13 @@ void backtrace(const char *cookie); #endif void __dead2 do_panic(void); -#define panic() do_panic() + +#define panic() \ + do { \ + backtrace(__func__); \ + (void)console_flush(); \ + do_panic(); \ + } while (false) /* Function called when stack protection check code detects a corrupted stack */ void __dead2 __stack_chk_fail(void); diff --git a/lib/libc/assert.c b/lib/libc/assert.c index fa12cb6b..8fa8f721 100644 --- a/lib/libc/assert.c +++ b/lib/libc/assert.c @@ -20,19 +20,23 @@ void __assert(const char *file, unsigned int line, const char *assertion) { printf("ASSERT: %s:%d:%s\n", file, line, assertion); - console_flush(); + backtrace("assert"); + (void)console_flush(); plat_panic_handler(); } #elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO void __assert(const char *file, unsigned int line) { printf("ASSERT: %s:%d\n", file, line); - console_flush(); + backtrace("assert"); + (void)console_flush(); plat_panic_handler(); } #else void __assert(void) { + backtrace("assert"); + (void)console_flush(); plat_panic_handler(); } #endif