lib: sbi: add some macros to detect BUG at runtime
authorXiang W <wxjstz@126.com>
Thu, 16 Sep 2021 04:32:49 +0000 (12:32 +0800)
committerAnup Patel <anup@brainfault.org>
Wed, 22 Sep 2021 08:05:30 +0000 (13:35 +0530)
Three macros are added. One is called BUG, which is used to put in an
unreachable branch. One is called BUG_ON, which is used to check bugs
and assert conditions are opposite. One is called SBI_ASSERT, used for
assertion checking.

Signed-off-by: Xiang W <wxjstz@126.com>
Reviewed-by: Anup Patel <anup.patel@wdc.com>
include/sbi/sbi_console.h

index e24ba5f..28b4a79 100644 (file)
@@ -11,6 +11,7 @@
 #define __SBI_CONSOLE_H__
 
 #include <sbi/sbi_types.h>
+#include <sbi/sbi_hart.h>
 
 struct sbi_console_device {
        /** Name of the console device */
@@ -51,4 +52,23 @@ struct sbi_scratch;
 
 int sbi_console_init(struct sbi_scratch *scratch);
 
+#define BUG() do { \
+       sbi_printf("BUG: failure at %s:%d/%s()!\n", \
+                  __FILE__, __LINE__, __func__); \
+       sbi_hart_hang(); \
+} while (0)
+
+#define BUG_ON(cond) do { \
+       if (cond)       \
+               BUG();  \
+} while (0)
+
+#define SBI_ASSERT(cond) do { \
+       if (!(cond)) { \
+               sbi_printf("ASSERT: %s:%d/%s(): Assertion `%s` failed.\n", \
+                          __FILE__,__LINE__,__func__, #cond);\
+               sbi_hart_hang(); \
+       } \
+} while (0)
+
 #endif