]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Add VERIFY0P() and ASSERT0P() macros.
authorDag-Erling Smørgrav <des@FreeBSD.org>
Wed, 30 Aug 2023 15:13:09 +0000 (17:13 +0200)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 20 Sep 2023 00:21:55 +0000 (17:21 -0700)
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

include/os/freebsd/spl/sys/debug.h
include/os/linux/spl/sys/debug.h
lib/libspl/include/assert.h

index b29d0daecc4bb6b66fc9e5c46696c89492b8f572..785fcf62dd1651ca6a4a233cc4bbe246529089c5 100644 (file)
  * 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)) ||                                \
index 9bcc2e1d19238c2cdeb2f45a09c76963fef3682d..288193ad21c50973223a5883bdd3bd68641b25b9 100644 (file)
  * 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
index e92f28300d20c99e652f27aa8167aa36857ded4f..d8c5e203f42ffed17dfe73e3d967ed9dafed2185 100644 (file)
@@ -120,6 +120,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
@@ -134,6 +143,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)                                                     \
@@ -146,6 +156,7 @@ do {                                                                        \
 #define        ASSERT3U        VERIFY3U
 #define        ASSERT3P        VERIFY3P
 #define        ASSERT0         VERIFY0
+#define        ASSERT0P        VERIFY0P
 #define        ASSERT          VERIFY
 #define        assert          VERIFY
 #define        IMPLY(A, B) \