From e696757c47f2b2f73ee92cccf4927d827d245309 Mon Sep 17 00:00:00 2001 From: Martin Willi Date: Wed, 6 Dec 2006 13:59:13 +0000 Subject: [PATCH] made backtrace() calls optional to support uClibc --- configure.in | 2 ++ src/charon/daemon.c | 7 ++++++- src/libstrongswan/utils/leak_detective.c | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/configure.in b/configure.in index ea667b87d0..174d401004 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 1fd9f9a0ac..f9e913c1ba 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 f132c51208..efb0554666 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 */ } /**