Add assert() for debug assertions
assert() is like BUG_ON() but compiles to nothing unless DEBUG is defined. This is useful when a condition is an error but a board reset is unlikely to fix it, so it is better to soldier on in hope. Assertion failures should be caught during development/test. It turns out that assert() is defined separately in a few places in U-Boot with various meanings. This patch cleans up some of these. Build errors exposed by this change (and defining DEBUG) are also fixed in this patch. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
		
							parent
							
								
									6a8760d748
								
							
						
					
					
						commit
						21726a7afc
					
				|  | @ -286,13 +286,6 @@ extern "C" { | ||||||
| 
 | 
 | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| #ifdef DEBUG |  | ||||||
| #include <assert.h> |  | ||||||
| #else |  | ||||||
| #define assert(x) ((void)0) |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|   INTERNAL_SIZE_T is the word-size used for internal bookkeeping |   INTERNAL_SIZE_T is the word-size used for internal bookkeeping | ||||||
|   of chunk sizes. On a 64-bit machine, you can reduce malloc |   of chunk sizes. On a 64-bit machine, you can reduce malloc | ||||||
|  |  | ||||||
|  | @ -124,6 +124,27 @@ typedef volatile unsigned char	vu_char; | ||||||
| #define debugX(level,fmt,args...) | #define debugX(level,fmt,args...) | ||||||
| #endif	/* DEBUG */ | #endif	/* DEBUG */ | ||||||
| 
 | 
 | ||||||
|  | #ifdef DEBUG | ||||||
|  | # define _DEBUG 1 | ||||||
|  | #else | ||||||
|  | # define _DEBUG 0 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /*
 | ||||||
|  |  * An assertion is run-time check done in debug mode only. If DEBUG is not | ||||||
|  |  * defined then it is skipped. If DEBUG is defined and the assertion fails, | ||||||
|  |  * then it calls panic*( which may or may not reset/halt U-Boot (see | ||||||
|  |  * CONFIG_PANIC_HANG), It is hoped that all failing assertions are found | ||||||
|  |  * before release, and after release it is hoped that they don't matter. But | ||||||
|  |  * in any case these failing assertions cannot be fixed with a reset (which | ||||||
|  |  * may just do the same assertion again). | ||||||
|  |  */ | ||||||
|  | void __assert_fail(const char *assertion, const char *file, unsigned line, | ||||||
|  | 		   const char *function); | ||||||
|  | #define assert(x) \ | ||||||
|  | 	({ if (!(x) && _DEBUG) \ | ||||||
|  | 		__assert_fail(#x, __FILE__, __LINE__, __func__); }) | ||||||
|  | 
 | ||||||
| #define error(fmt, args...) do {					\ | #define error(fmt, args...) do {					\ | ||||||
| 		printf("ERROR: " fmt "\nat %s:%d/%s()\n",		\ | 		printf("ERROR: " fmt "\nat %s:%d/%s()\n",		\ | ||||||
| 			##args, __FILE__, __LINE__, __func__);		\ | 			##args, __FILE__, __LINE__, __func__);		\ | ||||||
|  |  | ||||||
|  | @ -285,14 +285,6 @@ extern "C" { | ||||||
| 
 | 
 | ||||||
| */ | */ | ||||||
| 
 | 
 | ||||||
| #ifdef DEBUG |  | ||||||
| /* #include <assert.h> */ |  | ||||||
| #define assert(x) ((void)0) |  | ||||||
| #else |  | ||||||
| #define assert(x) ((void)0) |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /*
 | /*
 | ||||||
|   INTERNAL_SIZE_T is the word-size used for internal bookkeeping |   INTERNAL_SIZE_T is the word-size used for internal bookkeeping | ||||||
|   of chunk sizes. On a 64-bit machine, you can reduce malloc |   of chunk sizes. On a 64-bit machine, you can reduce malloc | ||||||
|  |  | ||||||
|  | @ -17,11 +17,6 @@ | ||||||
| 
 | 
 | ||||||
| #include <linux/types.h> | #include <linux/types.h> | ||||||
| #include <exports.h> | #include <exports.h> | ||||||
| #if 0 |  | ||||||
| #include <assert.h> |  | ||||||
| #else |  | ||||||
| #define assert(arg) |  | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| void qsort(void  *base, | void qsort(void  *base, | ||||||
| 	   size_t nel, | 	   size_t nel, | ||||||
|  |  | ||||||
|  | @ -730,3 +730,11 @@ void panic(const char *fmt, ...) | ||||||
| 	while (1) | 	while (1) | ||||||
| 		; | 		; | ||||||
| } | } | ||||||
|  | 
 | ||||||
|  | void __assert_fail(const char *assertion, const char *file, unsigned line, | ||||||
|  | 		   const char *function) | ||||||
|  | { | ||||||
|  | 	/* This will not return */ | ||||||
|  | 	panic("%s:%u: %s: Assertion `%s' failed.", file, line, function, | ||||||
|  | 	      assertion); | ||||||
|  | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue