]> git.proxmox.com Git - mirror_zfs.git/blobdiff - include/os/freebsd/spl/sys/debug.h
Clean up existing VERIFY*() macros.
[mirror_zfs.git] / include / os / freebsd / spl / sys / debug.h
index 86fad18e17d2cef153d69ae3b3c89e6e5954bad3..b29d0daecc4bb6b66fc9e5c46696c89492b8f572 100644 (file)
 /*
  * Common DEBUG functionality.
  */
-int spl_panic(const char *file, const char *func, int line,
-    const char *fmt, ...);
-void spl_dumpstack(void);
+#if defined(__COVERITY__) || defined(__clang_analyzer__)
+__attribute__((__noreturn__))
+#endif
+extern void spl_panic(const char *file, const char *func, int line,
+    const char *fmt, ...) __attribute__((__noreturn__));
+extern void spl_dumpstack(void);
+
+static inline int
+spl_assert(const char *buf, const char *file, const char *func, int line)
+{
+       spl_panic(file, func, line, "%s", buf);
+       return (0);
+}
 
 #ifndef expect
 #define        expect(expr, value) (__builtin_expect((expr), (value)))
@@ -69,8 +79,8 @@ void spl_dumpstack(void);
 
 #define        VERIFY(cond)                                                    \
        (void) (unlikely(!(cond)) &&                                    \
-           spl_panic(__FILE__, __FUNCTION__, __LINE__,                 \
-           "%s", "VERIFY(" #cond ") failed\n"))
+           spl_assert("VERIFY(" #cond ") failed\n",                    \
+           __FILE__, __FUNCTION__, __LINE__))
 
 #define        VERIFY3B(LEFT, OP, RIGHT)       do {                            \
                const boolean_t _verify3_left = (boolean_t)(LEFT);      \
@@ -79,8 +89,8 @@ void spl_dumpstack(void);
                    spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
                    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "          \
                    "failed (%d " #OP " %d)\n",                         \
-                   (boolean_t)(_verify3_left),                         \
-                   (boolean_t)(_verify3_right));                       \
+                   (boolean_t)_verify3_left,                           \
+                   (boolean_t)_verify3_right);                         \
        } while (0)
 
 #define        VERIFY3S(LEFT, OP, RIGHT)       do {                            \
@@ -90,8 +100,8 @@ void spl_dumpstack(void);
                    spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
                    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "          \
                    "failed (%lld " #OP " %lld)\n",                     \
-                   (long long) (_verify3_left),                        \
-                   (long long) (_verify3_right));                      \
+                   (long long)_verify3_left,                           \
+                   (long long)_verify3_right);                         \
        } while (0)
 
 #define        VERIFY3U(LEFT, OP, RIGHT)       do {                            \
@@ -101,8 +111,8 @@ void spl_dumpstack(void);
                    spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
                    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "          \
                    "failed (%llu " #OP " %llu)\n",                     \
-                   (unsigned long long) (_verify3_left),               \
-                   (unsigned long long) (_verify3_right));             \
+                   (unsigned long long)_verify3_left,                  \
+                   (unsigned long long)_verify3_right);                \
        } while (0)
 
 #define        VERIFY3P(LEFT, OP, RIGHT)       do {                            \
@@ -111,19 +121,18 @@ void spl_dumpstack(void);
                if (unlikely(!(_verify3_left OP _verify3_right)))       \
                    spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
                    "VERIFY3(" #LEFT " "  #OP " "  #RIGHT ") "          \
-                   "failed (%px " #OP " %px)\n",                       \
-                   (void *) (_verify3_left),                           \
-                   (void *) (_verify3_right));                         \
+                   "failed (%p " #OP " %p)\n",                         \
+                   (void *)_verify3_left,                              \
+                   (void *)_verify3_right);                            \
        } while (0)
 
 #define        VERIFY0(RIGHT)  do {                                            \
-               const int64_t _verify3_left = (int64_t)(0);             \
-               const int64_t _verify3_right = (int64_t)(RIGHT);        \
-               if (unlikely(!(_verify3_left == _verify3_right)))       \
+               const int64_t _verify0_right = (int64_t)(RIGHT);        \
+               if (unlikely(!(0 == _verify0_right)))                   \
                    spl_panic(__FILE__, __FUNCTION__, __LINE__,         \
-                   "VERIFY3(0 == " #RIGHT ") "                         \
+                   "VERIFY0(" #RIGHT ") "                              \
                    "failed (0 == %lld)\n",                             \
-                   (long long) (_verify3_right));                      \
+                   (long long)_verify0_right);                         \
        } while (0)
 
 /*
@@ -158,13 +167,14 @@ void spl_dumpstack(void);
 #define        ASSERT0         VERIFY0
 #define        ASSERT          VERIFY
 #define        IMPLY(A, B) \
-       ((void)(likely((!(A)) || (B)) || \
-           spl_panic(__FILE__, __FUNCTION__, __LINE__, \
-           "(" #A ") implies (" #B ")")))
+       ((void)(likely((!(A)) || (B)) ||                                \
+           spl_assert("(" #A ") implies (" #B ")",                     \
+           __FILE__, __FUNCTION__, __LINE__)))
 #define        EQUIV(A, B) \
-       ((void)(likely(!!(A) == !!(B)) || \
-           spl_panic(__FILE__, __FUNCTION__, __LINE__, \
-           "(" #A ") is equivalent to (" #B ")")))
+       ((void)(likely(!!(A) == !!(B)) ||                               \
+           spl_assert("(" #A ") is equivalent to (" #B ")",            \
+           __FILE__, __FUNCTION__, __LINE__)))
+
 
 #endif /* NDEBUG */