From: paul Date: Wed, 4 Jun 2003 09:40:54 +0000 (+0000) Subject: Paul Jakma: X-Git-Tag: frr-2.0-rc1~4007 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=fb2d1502bb0893f2aaccb49fb39521974078d96a;p=matthieu%2Ffrr.git Paul Jakma: lib/debug.{c,h}: glibc backtrace printing function (from the glibc info page) configure.ac: check for glibc backtrace and set define lib/zebra.h: glibc backtrace support --- diff --git a/configure.ac b/configure.ac index 4c30bceec4..be371fcbe6 100755 --- a/configure.ac +++ b/configure.ac @@ -856,6 +856,18 @@ AC_TRY_COMPILE([#include AC_DEFINE(HAVE_RUSAGE,,rusage)], AC_MSG_RESULT(no)) +dnl --------------------------- +dnl check for glibc 'backtrace' +dnl --------------------------- +if test "${glibc}" = "yes"; then + AC_CHECK_HEADER(execinfo.h) +fi +if test x"${ac_cv_header_execinfo_h}" = x"yes"; then + AC_CHECK_FUNC(backtrace, + [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)] + ) +fi + dnl ------------- dnl check version dnl ------------- diff --git a/configure.in b/configure.in index 4c30bceec4..be371fcbe6 100755 --- a/configure.in +++ b/configure.in @@ -856,6 +856,18 @@ AC_TRY_COMPILE([#include AC_DEFINE(HAVE_RUSAGE,,rusage)], AC_MSG_RESULT(no)) +dnl --------------------------- +dnl check for glibc 'backtrace' +dnl --------------------------- +if test "${glibc}" = "yes"; then + AC_CHECK_HEADER(execinfo.h) +fi +if test x"${ac_cv_header_execinfo_h}" = x"yes"; then + AC_CHECK_FUNC(backtrace, + [AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)] + ) +fi + dnl ------------- dnl check version dnl ------------- diff --git a/lib/debug.c b/lib/debug.c new file mode 100644 index 0000000000..c4b67a52ab --- /dev/null +++ b/lib/debug.c @@ -0,0 +1,23 @@ +#include +#include "log.h" + +void +debug_print_trace (int signal) +{ + void *array[10]; + size_t size; + char **strings; + size_t i; + + size = backtrace (array, 10); + strings = backtrace_symbols (array, size); + + printf ("Obtained %zd stack frames.\n", size); + + for (i = 0; i < size; i++) + printf ("%s\n", strings[i]); + + free (strings); + + exit(1); +} diff --git a/lib/debug.h b/lib/debug.h new file mode 100644 index 0000000000..44409042ff --- /dev/null +++ b/lib/debug.h @@ -0,0 +1,3 @@ + +void debug_print_trace (int); + diff --git a/lib/zebra.h b/lib/zebra.h index 7b1e8011c7..62566cf86c 100644 --- a/lib/zebra.h +++ b/lib/zebra.h @@ -172,6 +172,10 @@ typedef int socklen_t; #include #endif /* HAVE_LIBUTIL_H */ +#ifdef HAVE_GLIBC_BACKTRACE +#include +#endif /* HAVE_GLIBC_BACKTRACE */ + #ifdef BSDI_NRL #ifdef HAVE_NETINET6_IN6_H