Commit 3e530d8e authored by Antonio Nino Diaz's avatar Antonio Nino Diaz
Browse files

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: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
parent 0c62883f
...@@ -27,7 +27,9 @@ ...@@ -27,7 +27,9 @@
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
#include <cdefs.h> #include <cdefs.h>
#include <console.h>
#include <stdarg.h> #include <stdarg.h>
#include <stdbool.h>
#include <stdio.h> #include <stdio.h>
/* /*
...@@ -90,7 +92,13 @@ void backtrace(const char *cookie); ...@@ -90,7 +92,13 @@ void backtrace(const char *cookie);
#endif #endif
void __dead2 do_panic(void); 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 */ /* Function called when stack protection check code detects a corrupted stack */
void __dead2 __stack_chk_fail(void); void __dead2 __stack_chk_fail(void);
......
...@@ -20,19 +20,23 @@ ...@@ -20,19 +20,23 @@
void __assert(const char *file, unsigned int line, const char *assertion) void __assert(const char *file, unsigned int line, const char *assertion)
{ {
printf("ASSERT: %s:%d:%s\n", file, line, assertion); printf("ASSERT: %s:%d:%s\n", file, line, assertion);
console_flush(); backtrace("assert");
(void)console_flush();
plat_panic_handler(); plat_panic_handler();
} }
#elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO #elif PLAT_LOG_LEVEL_ASSERT >= LOG_LEVEL_INFO
void __assert(const char *file, unsigned int line) void __assert(const char *file, unsigned int line)
{ {
printf("ASSERT: %s:%d\n", file, line); printf("ASSERT: %s:%d\n", file, line);
console_flush(); backtrace("assert");
(void)console_flush();
plat_panic_handler(); plat_panic_handler();
} }
#else #else
void __assert(void) void __assert(void)
{ {
backtrace("assert");
(void)console_flush();
plat_panic_handler(); plat_panic_handler();
} }
#endif #endif
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment