diff --git a/configure.in b/configure.in index ea667b87d..174d40100 100644 --- a/configure.in +++ b/configure.in @@ -96,6 +96,8 @@ dnl ========================== dnl check required libraries dnl ========================== +AC_CHECK_FUNCS(backtrace getifaddrs) + AC_HAVE_LIBRARY([gmp],[LIBS="$LIBS"],[AC_MSG_ERROR([GNU Multi Precision library gmp not found])]) if test "$ldap" = "true"; then AC_HAVE_LIBRARY([ldap],[LIBS="$LIBS"],[AC_MSG_ERROR([LDAP enabled, but library ldap not found])]) diff --git a/src/charon/daemon.c b/src/charon/daemon.c index 1fd9f9a0a..f9e913c1b 100644 --- a/src/charon/daemon.c +++ b/src/charon/daemon.c @@ -285,6 +285,7 @@ static void initialize(private_daemon_t *this, bool strict, bool syslog, */ void signal_handler(int signal) { +#ifndef HAVE_BACKTRACE void *array[20]; size_t size; char **strings; @@ -294,13 +295,17 @@ void signal_handler(int signal) strings = backtrace_symbols(array, size); DBG1(DBG_DMN, "thread %u received %s. Dumping %d frames from stack:", - signal == SIGSEGV ? "SIGSEGV" : "SIGILL", pthread_self(), size); + pthread_self(), signal == SIGSEGV ? "SIGSEGV" : "SIGILL", size); for (i = 0; i < size; i++) { DBG1(DBG_DMN, " %s", strings[i]); } free (strings); +#else /* !HAVE_BACKTRACE */ + DBG1(DBG_DMN, "thread %u received %s", + pthread_self(), signal == SIGSEGV ? "SIGSEGV" : "SIGILL"); +#endif /* HAVE_BACKTRACE */ DBG1(DBG_DMN, "killing ourself hard after SIGSEGV"); raise(SIGKILL); } diff --git a/src/libstrongswan/utils/leak_detective.c b/src/libstrongswan/utils/leak_detective.c index f132c5120..efb055466 100644 --- a/src/libstrongswan/utils/leak_detective.c +++ b/src/libstrongswan/utils/leak_detective.c @@ -140,6 +140,7 @@ static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; */ static void log_stack_frames(void **stack_frames, int stack_frame_count) { +#ifdef HAVE_BACKTRACE char **strings; size_t i; @@ -152,6 +153,7 @@ static void log_stack_frames(void **stack_frames, int stack_frame_count) DBG1(" %s", strings[i]); } free (strings); +#endif /* HAVE_BACKTRACE */ } /**