Skip to content

Commit cb2743d

Browse files
committed
zdb/ztest: use libspl backtrace for crashes
We can show much nicer backtraces these days, lets use them. Sponsored-by: Klara, Inc. Sponsored-by: Wasabi Technology, Inc. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Rob Norris <[email protected]> Closes openzfs#16181 (cherry picked from commit e7b4519)
1 parent e552b97 commit cb2743d

File tree

4 files changed

+10
-25
lines changed

4 files changed

+10
-25
lines changed

cmd/zdb/zdb.c

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,9 +84,6 @@
8484
#include <sys/brt_impl.h>
8585
#include <zfs_comutil.h>
8686
#include <sys/zstd/zstd.h>
87-
#if (__GLIBC__ && !__UCLIBC__)
88-
#include <execinfo.h> /* for backtrace() */
89-
#endif
9087

9188
#include <libnvpair.h>
9289
#include <libzutil.h>
@@ -941,18 +938,11 @@ dump_debug_buffer(void)
941938
zfs_dbgmsg_print("zdb");
942939
}
943940

944-
#define BACKTRACE_SZ 100
945-
946941
static void sig_handler(int signo)
947942
{
948943
struct sigaction action;
949-
#if (__GLIBC__ && !__UCLIBC__) /* backtrace() is a GNU extension */
950-
int nptrs;
951-
void *buffer[BACKTRACE_SZ];
952944

953-
nptrs = backtrace(buffer, BACKTRACE_SZ);
954-
backtrace_symbols_fd(buffer, nptrs, STDERR_FILENO);
955-
#endif
945+
libspl_dump_backtrace();
956946
dump_debug_buffer();
957947

958948
/*

cmd/ztest.c

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -136,9 +136,6 @@
136136
#include <libzutil.h>
137137
#include <sys/crypto/icp.h>
138138
#include <sys/zfs_impl.h>
139-
#if (__GLIBC__ && !__UCLIBC__)
140-
#include <execinfo.h> /* for backtrace() */
141-
#endif
142139

143140
static int ztest_fd_data = -1;
144141
static int ztest_fd_rand = -1;
@@ -597,18 +594,11 @@ dump_debug_buffer(void)
597594
zfs_dbgmsg_print("ztest");
598595
}
599596

600-
#define BACKTRACE_SZ 100
601-
602597
static void sig_handler(int signo)
603598
{
604599
struct sigaction action;
605-
#if (__GLIBC__ && !__UCLIBC__) /* backtrace() is a GNU extension */
606-
int nptrs;
607-
void *buffer[BACKTRACE_SZ];
608600

609-
nptrs = backtrace(buffer, BACKTRACE_SZ);
610-
backtrace_symbols_fd(buffer, nptrs, STDERR_FILENO);
611-
#endif
601+
libspl_dump_backtrace();
612602
dump_debug_buffer();
613603

614604
/*

lib/libspl/assert.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@
5555
#define UNW_LOCAL_ONLY
5656
#include <libunwind.h>
5757

58-
static inline void
58+
void
5959
libspl_dump_backtrace(void)
6060
{
6161
unw_context_t uc;
@@ -85,7 +85,7 @@ libspl_dump_backtrace(void)
8585
#elif defined(HAVE_BACKTRACE)
8686
#include <execinfo.h>
8787

88-
static inline void
88+
void
8989
libspl_dump_backtrace(void)
9090
{
9191
void *btptrs[100];
@@ -97,7 +97,10 @@ libspl_dump_backtrace(void)
9797
free(bt);
9898
}
9999
#else
100-
#define libspl_dump_backtrace()
100+
void
101+
libspl_dump_backtrace(void)
102+
{
103+
}
101104
#endif
102105

103106
#if defined(__APPLE__)

lib/libspl/include/assert.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ libspl_assert(const char *buf, const char *file, const char *func, int line)
6060
return (0);
6161
}
6262

63+
extern void libspl_dump_backtrace(void);
64+
6365
#ifdef verify
6466
#undef verify
6567
#endif

0 commit comments

Comments
 (0)