1*b985c9caSMartin Matuskadnl 2*b985c9caSMartin Matuskadnl Checks for libunwind, which usually does a better job than backtrace() when 3*b985c9caSMartin Matuskadnl resolving symbols in the stack backtrace. Newer versions have support for 4*b985c9caSMartin Matuskadnl getting info about the object file the function came from, so we look for 5*b985c9caSMartin Matuskadnl that too and use it if found. 6*b985c9caSMartin Matuskadnl 7*b985c9caSMartin MatuskaAC_DEFUN([ZFS_AC_CONFIG_USER_LIBUNWIND], [ 8*b985c9caSMartin Matuska AC_ARG_WITH([libunwind], 9*b985c9caSMartin Matuska AS_HELP_STRING([--with-libunwind], 10*b985c9caSMartin Matuska [use libunwind for backtraces in userspace assertions]), 11*b985c9caSMartin Matuska [], 12*b985c9caSMartin Matuska [with_libunwind=auto]) 13*b985c9caSMartin Matuska 14*b985c9caSMartin Matuska AS_IF([test "x$with_libunwind" != "xno"], [ 15*b985c9caSMartin Matuska ZFS_AC_FIND_SYSTEM_LIBRARY(LIBUNWIND, [libunwind], [libunwind.h], [], [unwind], [], [ 16*b985c9caSMartin Matuska dnl unw_get_elf_filename() is sometimes a macro, other 17*b985c9caSMartin Matuska dnl times a proper symbol, so we can't just do a link 18*b985c9caSMartin Matuska dnl check; we need to include the header properly. 19*b985c9caSMartin Matuska AX_SAVE_FLAGS 20*b985c9caSMartin Matuska CFLAGS="$CFLAGS $LIBUNWIND_CFLAGS" 21*b985c9caSMartin Matuska LIBS="$LIBS $LIBUNWIND_LIBS" 22*b985c9caSMartin Matuska AC_MSG_CHECKING([for unw_get_elf_filename in libunwind]) 23*b985c9caSMartin Matuska AC_LINK_IFELSE([ 24*b985c9caSMartin Matuska AC_LANG_PROGRAM([ 25*b985c9caSMartin Matuska #define UNW_LOCAL_ONLY 26*b985c9caSMartin Matuska #include <libunwind.h> 27*b985c9caSMartin Matuska ], [ 28*b985c9caSMartin Matuska unw_get_elf_filename(0, 0, 0, 0); 29*b985c9caSMartin Matuska ]) 30*b985c9caSMartin Matuska ], [ 31*b985c9caSMartin Matuska AC_MSG_RESULT([yes]) 32*b985c9caSMartin Matuska AC_DEFINE(HAVE_LIBUNWIND_ELF, 1, 33*b985c9caSMartin Matuska [libunwind has unw_get_elf_filename]) 34*b985c9caSMartin Matuska ], [ 35*b985c9caSMartin Matuska AC_MSG_RESULT([no]) 36*b985c9caSMartin Matuska ]) 37*b985c9caSMartin Matuska AX_RESTORE_FLAGS 38*b985c9caSMartin Matuska ], [ 39*b985c9caSMartin Matuska AS_IF([test "x$with_libunwind" = "xyes"], [ 40*b985c9caSMartin Matuska AC_MSG_FAILURE([--with-libunwind was given, but libunwind is not available, try installing libunwind-devel]) 41*b985c9caSMartin Matuska ]) 42*b985c9caSMartin Matuska ]) 43*b985c9caSMartin Matuska ]) 44*b985c9caSMartin Matuska]) 45