forked from Mirrors/opensbi
		
	lib: sbi: add some macros to detect BUG at runtime
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>
This commit is contained in:
		@@ -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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user