diff options
| author | paul <paul> | 2003-06-04 09:40:54 +0000 | 
|---|---|---|
| committer | paul <paul> | 2003-06-04 09:40:54 +0000 | 
| commit | fb2d1502bb0893f2aaccb49fb39521974078d96a (patch) | |
| tree | 0d3059d875d2be20913eaceaed12c8c09ec2b481 | |
| parent | 97e34b88b39abdef4ba0581574d315ef7ddb1a86 (diff) | |
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
| -rwxr-xr-x | configure.ac | 12 | ||||
| -rwxr-xr-x | configure.in | 12 | ||||
| -rw-r--r-- | lib/debug.c | 23 | ||||
| -rw-r--r-- | lib/debug.h | 3 | ||||
| -rw-r--r-- | lib/zebra.h | 4 | 
5 files changed, 54 insertions, 0 deletions
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 <sys/resource.h>   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 <sys/resource.h>   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 <zebra.h> +#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 <libutil.h>  #endif /* HAVE_LIBUTIL_H */ +#ifdef HAVE_GLIBC_BACKTRACE +#include <execinfo.h> +#endif /* HAVE_GLIBC_BACKTRACE */ +  #ifdef BSDI_NRL  #ifdef HAVE_NETINET6_IN6_H  | 
