mirror of
				https://git.proxmox.com/git/mirror_zfs.git
				synced 2025-10-26 18:05:04 +03:00 
			
		
		
		
	Add VERIFY0P() and ASSERT0P() macros.
These macros are similar to VERIFY0() and ASSERT0() but are intended for pointers, and therefore use uintptr_t instead of int64_t. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Kay Pedersen <mail@mkwg.de> Reviewed-by: Alexander Motin <mav@FreeBSD.org> Signed-off-by: Dag-Erling Smørgrav <des@FreeBSD.org> Closes #15225
This commit is contained in:
		
							parent
							
								
									d6da6cbd74
								
							
						
					
					
						commit
						5dda8c0910
					
				| @ -39,12 +39,14 @@ | ||||
|  * ASSERT3U()	- Assert unsigned X OP Y is true, if not panic. | ||||
|  * ASSERT3P()	- Assert pointer X OP Y is true, if not panic. | ||||
|  * ASSERT0()	- Assert value is zero, if not panic. | ||||
|  * ASSERT0P()	- Assert pointer is null, if not panic. | ||||
|  * VERIFY()	- Verify X is true, if not panic. | ||||
|  * VERIFY3B()	- Verify boolean X OP Y is true, if not panic. | ||||
|  * VERIFY3S()	- Verify signed X OP Y is true, if not panic. | ||||
|  * VERIFY3U()	- Verify unsigned X OP Y is true, if not panic. | ||||
|  * VERIFY3P()	- Verify pointer X OP Y is true, if not panic. | ||||
|  * VERIFY0()	- Verify value is zero, if not panic. | ||||
|  * VERIFY0P()	- Verify pointer is null, if not panic. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _SPL_DEBUG_H | ||||
| @ -135,6 +137,15 @@ spl_assert(const char *buf, const char *file, const char *func, int line) | ||||
| 		    (long long)_verify0_right);				\ | ||||
| 	} while (0) | ||||
| 
 | ||||
| #define	VERIFY0P(RIGHT)	do {						\ | ||||
| 		const uintptr_t _verify0_right = (uintptr_t)(RIGHT);	\ | ||||
| 		if (unlikely(!(0 == _verify0_right)))			\ | ||||
| 		    spl_panic(__FILE__, __FUNCTION__, __LINE__,		\ | ||||
| 		    "VERIFY0P(" #RIGHT ") "				\ | ||||
| 		    "failed (NULL == %p)\n",				\ | ||||
| 		    (void *)_verify0_right);				\ | ||||
| 	} while (0) | ||||
| 
 | ||||
| /*
 | ||||
|  * Debugging disabled (--disable-debug) | ||||
|  */ | ||||
| @ -150,6 +161,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line) | ||||
| #define	ASSERT3P(x, y, z)						\ | ||||
| 	((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z))) | ||||
| #define	ASSERT0(x)		((void) sizeof ((uintptr_t)(x))) | ||||
| #define	ASSERT0P(x)		((void) sizeof ((uintptr_t)(x))) | ||||
| #define	IMPLY(A, B)							\ | ||||
| 	((void) sizeof ((uintptr_t)(A)), (void) sizeof ((uintptr_t)(B))) | ||||
| #define	EQUIV(A, B)		\ | ||||
| @ -165,6 +177,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line) | ||||
| #define	ASSERT3U	VERIFY3U | ||||
| #define	ASSERT3P	VERIFY3P | ||||
| #define	ASSERT0		VERIFY0 | ||||
| #define	ASSERT0P	VERIFY0P | ||||
| #define	ASSERT		VERIFY | ||||
| #define	IMPLY(A, B) \ | ||||
| 	((void)(likely((!(A)) || (B)) ||				\ | ||||
|  | ||||
| @ -34,12 +34,14 @@ | ||||
|  * ASSERT3U()	- Assert unsigned X OP Y is true, if not panic. | ||||
|  * ASSERT3P()	- Assert pointer X OP Y is true, if not panic. | ||||
|  * ASSERT0()	- Assert value is zero, if not panic. | ||||
|  * ASSERT0P()	- Assert pointer is null, if not panic. | ||||
|  * VERIFY()	- Verify X is true, if not panic. | ||||
|  * VERIFY3B()	- Verify boolean X OP Y is true, if not panic. | ||||
|  * VERIFY3S()	- Verify signed X OP Y is true, if not panic. | ||||
|  * VERIFY3U()	- Verify unsigned X OP Y is true, if not panic. | ||||
|  * VERIFY3P()	- Verify pointer X OP Y is true, if not panic. | ||||
|  * VERIFY0()	- Verify value is zero, if not panic. | ||||
|  * VERIFY0P()	- Verify pointer is null, if not panic. | ||||
|  */ | ||||
| 
 | ||||
| #ifndef _SPL_DEBUG_H | ||||
| @ -139,6 +141,15 @@ spl_assert(const char *buf, const char *file, const char *func, int line) | ||||
| 		    (long long)_verify0_right);				\ | ||||
| 	} while (0) | ||||
| 
 | ||||
| #define	VERIFY0P(RIGHT)	do {						\ | ||||
| 		const uintptr_t _verify0_right = (uintptr_t)(RIGHT);	\ | ||||
| 		if (unlikely(!(0 == _verify0_right)))			\ | ||||
| 		    spl_panic(__FILE__, __FUNCTION__, __LINE__,		\ | ||||
| 		    "VERIFY0P(" #RIGHT ") "				\ | ||||
| 		    "failed (NULL == %px)\n",				\ | ||||
| 		    (void *)_verify0_right);				\ | ||||
| 	} while (0) | ||||
| 
 | ||||
| #define	VERIFY_IMPLY(A, B) \ | ||||
| 	((void)(likely((!(A)) || (B)) ||				\ | ||||
| 	    spl_assert("(" #A ") implies (" #B ")",			\ | ||||
| @ -164,6 +175,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line) | ||||
| #define	ASSERT3P(x, y, z)						\ | ||||
| 	((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z))) | ||||
| #define	ASSERT0(x)		((void) sizeof ((uintptr_t)(x))) | ||||
| #define	ASSERT0P(x)		((void) sizeof ((uintptr_t)(x))) | ||||
| #define	IMPLY(A, B)							\ | ||||
| 	((void) sizeof ((uintptr_t)(A)), (void) sizeof ((uintptr_t)(B))) | ||||
| #define	EQUIV(A, B)		\ | ||||
| @ -179,6 +191,7 @@ spl_assert(const char *buf, const char *file, const char *func, int line) | ||||
| #define	ASSERT3U	VERIFY3U | ||||
| #define	ASSERT3P	VERIFY3P | ||||
| #define	ASSERT0		VERIFY0 | ||||
| #define	ASSERT0P	VERIFY0P | ||||
| #define	ASSERT		VERIFY | ||||
| #define	IMPLY		VERIFY_IMPLY | ||||
| #define	EQUIV		VERIFY_EQUIV | ||||
|  | ||||
| @ -123,6 +123,15 @@ do {									\ | ||||
| 		    (u_longlong_t)__left);				\ | ||||
| } while (0) | ||||
| 
 | ||||
| #define	VERIFY0P(LEFT)							\ | ||||
| do {									\ | ||||
| 	const uintptr_t __left = (uintptr_t)(LEFT);			\ | ||||
| 	if (!(__left == 0))						\ | ||||
| 		libspl_assertf(__FILE__, __FUNCTION__, __LINE__,	\ | ||||
| 		    "%s == 0 (%p == 0)", #LEFT,				\ | ||||
| 		    (void *)__left);					\ | ||||
| } while (0) | ||||
| 
 | ||||
| #ifdef assert | ||||
| #undef assert | ||||
| #endif | ||||
| @ -137,6 +146,7 @@ do {									\ | ||||
| #define	ASSERT3P(x, y, z)						\ | ||||
| 	((void) sizeof ((uintptr_t)(x)), (void) sizeof ((uintptr_t)(z))) | ||||
| #define	ASSERT0(x)		((void) sizeof ((uintptr_t)(x))) | ||||
| #define	ASSERT0P(x)		((void) sizeof ((uintptr_t)(x))) | ||||
| #define	ASSERT(x)		((void) sizeof ((uintptr_t)(x))) | ||||
| #define	assert(x)		((void) sizeof ((uintptr_t)(x))) | ||||
| #define	IMPLY(A, B)							\ | ||||
| @ -149,6 +159,7 @@ do {									\ | ||||
| #define	ASSERT3U	VERIFY3U | ||||
| #define	ASSERT3P	VERIFY3P | ||||
| #define	ASSERT0		VERIFY0 | ||||
| #define	ASSERT0P	VERIFY0P | ||||
| #define	ASSERT		VERIFY | ||||
| #define	assert		VERIFY | ||||
| #define	IMPLY(A, B) \ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Dag-Erling Smørgrav
						Dag-Erling Smørgrav