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 <antonio.ninodiaz@arm.com>
This commit is contained in:
parent
0c62883f7e
commit
3e530d8ea8
|
@ -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);
|
||||||
#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 @@
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue