summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2012-06-03 11:03:57 -0700
committerGerrit <chrome-bot@google.com>2012-06-22 10:13:36 -0700
commitd47905ce270b5934a2e8952a64bcc316fd27fda0 (patch)
tree127e36fe5e8c5060a41cb15435c022b7c26476e8
parentbf376505e933f438b6fb6c1033f442e19c457ced (diff)
downloadchrome-ec-d47905ce270b5934a2e8952a64bcc316fd27fda0.tar.gz
Make ASSERT() report assertion failures
Rather than just reset the board, report assertion failures to aid debugging. To enable this, use CONFIG_ASSERT_HELP. BUG=chrome-os-partner:10149 TEST=manual Enable the option for snow, add a failing ASSERT() to the rw command and see the a nice message is printed now. ASSERTION FAILURE 'address' in command_read_word() at common/memory_commands.c:00000037 Change-Id: Ice59434c5daf610832dd0e1fcfa5630dc847bb67 Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/25411
-rw-r--r--README6
-rw-r--r--core/cortex-m/panic.c12
-rw-r--r--include/panic.h12
-rw-r--r--include/util.h11
4 files changed, 40 insertions, 1 deletions
diff --git a/README b/README
index 9d9484f79f..c03731c032 100644
--- a/README
+++ b/README
@@ -54,3 +54,9 @@ Build Options
Precise data bus error, Forced hard fault, Vector catch, bfar = 60000000
mmfs = 00008200, shcsr = 00000000, hfsr = 40000000, dfsr = 00000008
+- CONFIG_ASSERT_HELP
+
+ Report assertion failures in a vebose manner to aid debugging. When
+ enabled an ASSERT() which fails will produce message in the form:
+
+ ASSERTION FAILURE '<expr>' in function() at file:line
diff --git a/core/cortex-m/panic.c b/core/cortex-m/panic.c
index d249974b06..1c9629eff3 100644
--- a/core/cortex-m/panic.c
+++ b/core/cortex-m/panic.c
@@ -360,3 +360,15 @@ void exception_panic(void)
[save_area] "r" (save_area.saved_regs)
);
}
+
+
+#ifdef CONFIG_ASSERT_HELP
+void panic_assert_fail(const char *msg, const char *func, const char *fname,
+ int linenum)
+{
+ panic_printf("\nASSERTION FAILURE '%s' in %s() at %s:%d\n", msg, func,
+ fname, linenum);
+
+ panic_reboot();
+}
+#endif
diff --git a/include/panic.h b/include/panic.h
index 2cfda9bcee..2bef50f541 100644
--- a/include/panic.h
+++ b/include/panic.h
@@ -56,6 +56,18 @@ void panic_vprintf(const char *format, va_list args);
*/
void panic_printf(const char *format, ...);
+
+/**
+ * Report an assertion failure and reset
+ *
+ * @param msg Assertion expression or other message
+ * @param func Function name where assertion happened
+ * @param fname File name where assertion happened
+ * @param linenum Line number where assertion happened
+ */
+void panic_assert_fail(const char *msg, const char *func, const char *fname,
+ int linenum);
+
/**
* Report a panic to the panic reporting device
*
diff --git a/include/util.h b/include/util.h
index cf1ffde4d7..423408a45c 100644
--- a/include/util.h
+++ b/include/util.h
@@ -10,6 +10,7 @@
#include "common.h"
#include "config.h"
+#include "panic.h"
/**
* Trigger a compilation failure if the condition
@@ -22,10 +23,18 @@
* is not verified at runtime.
*/
#ifdef CONFIG_DEBUG
-#define ASSERT(cond) do { \
+# ifdef CONFIG_ASSERT_HELP
+# define ASSERT(cond) do { \
+ if (!(cond)) \
+ panic_assert_fail(#cond, __func__, __FILE__, \
+ __LINE__); \
+ } while (0);
+# else
+# define ASSERT(cond) do { \
if (!(cond)) \
__asm("bkpt"); \
} while (0);
+# endif
#else
#define ASSERT(cond)
#endif