aboutsummaryrefslogtreecommitdiffstats
path: root/config/user-backtrace.m4
diff options
context:
space:
mode:
authorRob Norris <[email protected]>2024-04-27 21:35:05 +1000
committerBrian Behlendorf <[email protected]>2024-05-01 10:52:00 -0700
commit2152c405ba6ab0bc9fca482e9a0a968eb35699fb (patch)
tree31a0f5f6d5d97cbfecb97a7f6520ad7f8053e6fb /config/user-backtrace.m4
parentdec697ad683ecfdf9833455af0568ce4ddc7c885 (diff)
libspl/assert: dump backtrace in assert
Adds a check for the backtrace() function. If available, uses it to show a stack backtrace in the assertion output. Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Rob Norris <[email protected]> Sponsored-by: https://despairlabs.com/sponsor/ Closes #16140
Diffstat (limited to 'config/user-backtrace.m4')
-rw-r--r--config/user-backtrace.m414
1 files changed, 14 insertions, 0 deletions
diff --git a/config/user-backtrace.m4 b/config/user-backtrace.m4
new file mode 100644
index 000000000..25706767c
--- /dev/null
+++ b/config/user-backtrace.m4
@@ -0,0 +1,14 @@
+dnl
+dnl backtrace(), for userspace assertions. glibc has this directly in libc.
+dnl FreeBSD and (sometimes) musl have it in a separate -lexecinfo. It's assumed
+dnl that this will also get the companion function backtrace_symbols().
+dnl
+AC_DEFUN([ZFS_AC_CONFIG_USER_BACKTRACE], [
+ AX_SAVE_FLAGS
+ LIBS=""
+ AC_SEARCH_LIBS([backtrace], [execinfo], [
+ AC_DEFINE(HAVE_BACKTRACE, 1, [backtrace() is available])
+ AC_SUBST([BACKTRACE_LIBS], ["$LIBS"])
+ ])
+ AX_RESTORE_FLAGS
+])