]> git.proxmox.com Git - mirror_zfs.git/commitdiff
zdb/ztest: use libspl backtrace for crashes
authorRob Norris <rob.norris@klarasystems.com>
Fri, 10 May 2024 00:19:48 +0000 (10:19 +1000)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 14 May 2024 16:48:39 +0000 (09:48 -0700)
We can show much nicer backtraces these days, lets use them.

Sponsored-by: Klara, Inc.
Sponsored-by: Wasabi Technology, Inc.
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Rob Norris <rob.norris@klarasystems.com>
Closes #16181

cmd/zdb/zdb.c
cmd/ztest.c
lib/libspl/assert.c
lib/libspl/include/assert.h

index f3274a65db2699c1df21b6f99d17b929b3f2b200..908e4e0ab27cc6dafe61939a2eb9cfde13d509a7 100644 (file)
@@ -85,9 +85,6 @@
 #include <sys/brt_impl.h>
 #include <zfs_comutil.h>
 #include <sys/zstd/zstd.h>
-#if (__GLIBC__ && !__UCLIBC__)
-#include <execinfo.h> /* for backtrace() */
-#endif
 
 #include <libnvpair.h>
 #include <libzutil.h>
@@ -843,18 +840,11 @@ dump_debug_buffer(void)
        zfs_dbgmsg_print("zdb");
 }
 
-#define        BACKTRACE_SZ    100
-
 static void sig_handler(int signo)
 {
        struct sigaction action;
-#if (__GLIBC__ && !__UCLIBC__) /* backtrace() is a GNU extension */
-       int nptrs;
-       void *buffer[BACKTRACE_SZ];
 
-       nptrs = backtrace(buffer, BACKTRACE_SZ);
-       backtrace_symbols_fd(buffer, nptrs, STDERR_FILENO);
-#endif
+       libspl_dump_backtrace();
        dump_debug_buffer();
 
        /*
index 56eb01618c2e64913fd8392809cf5c8d96c4b443..ccfe71c2956466f7a5432074504d0af096558195 100644 (file)
 #include <libzutil.h>
 #include <sys/crypto/icp.h>
 #include <sys/zfs_impl.h>
-#if (__GLIBC__ && !__UCLIBC__)
-#include <execinfo.h> /* for backtrace() */
-#endif
 
 static int ztest_fd_data = -1;
 static int ztest_fd_rand = -1;
@@ -621,18 +618,11 @@ dump_debug_buffer(void)
        zfs_dbgmsg_print("ztest");
 }
 
-#define        BACKTRACE_SZ    100
-
 static void sig_handler(int signo)
 {
        struct sigaction action;
-#if (__GLIBC__ && !__UCLIBC__) /* backtrace() is a GNU extension */
-       int nptrs;
-       void *buffer[BACKTRACE_SZ];
 
-       nptrs = backtrace(buffer, BACKTRACE_SZ);
-       backtrace_symbols_fd(buffer, nptrs, STDERR_FILENO);
-#endif
+       libspl_dump_backtrace();
        dump_debug_buffer();
 
        /*
index 5b12c14acd6e040b9c75081905e8851c0e32b81c..79b640d89521a310a11195cc50420d7f01629f00 100644 (file)
@@ -55,7 +55,7 @@
 #define        UNW_LOCAL_ONLY
 #include <libunwind.h>
 
-static inline void
+void
 libspl_dump_backtrace(void)
 {
        unw_context_t uc;
@@ -85,7 +85,7 @@ libspl_dump_backtrace(void)
 #elif defined(HAVE_BACKTRACE)
 #include <execinfo.h>
 
-static inline void
+void
 libspl_dump_backtrace(void)
 {
        void *btptrs[100];
@@ -97,7 +97,10 @@ libspl_dump_backtrace(void)
        free(bt);
 }
 #else
-#define        libspl_dump_backtrace()
+void
+libspl_dump_backtrace(void)
+{
+}
 #endif
 
 #if defined(__APPLE__)
index 155bbab3020ae276ba097138b96e9fd2197e5e5b..126f2db2417177ae5007dafbe52d46f9b3e3e369 100644 (file)
@@ -60,6 +60,8 @@ libspl_assert(const char *buf, const char *file, const char *func, int line)
        return (0);
 }
 
+extern void libspl_dump_backtrace(void);
+
 #ifdef verify
 #undef verify
 #endif