forked from Mirror/frr
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
This commit is contained in:
parent
97e34b88b3
commit
fb2d1502bb
12
configure.ac
12
configure.ac
|
@ -856,6 +856,18 @@ AC_TRY_COMPILE([#include <sys/resource.h>
|
||||||
AC_DEFINE(HAVE_RUSAGE,,rusage)],
|
AC_DEFINE(HAVE_RUSAGE,,rusage)],
|
||||||
AC_MSG_RESULT(no))
|
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 -------------
|
||||||
dnl check version
|
dnl check version
|
||||||
dnl -------------
|
dnl -------------
|
||||||
|
|
12
configure.in
12
configure.in
|
@ -856,6 +856,18 @@ AC_TRY_COMPILE([#include <sys/resource.h>
|
||||||
AC_DEFINE(HAVE_RUSAGE,,rusage)],
|
AC_DEFINE(HAVE_RUSAGE,,rusage)],
|
||||||
AC_MSG_RESULT(no))
|
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 -------------
|
||||||
dnl check version
|
dnl check version
|
||||||
dnl -------------
|
dnl -------------
|
||||||
|
|
23
lib/debug.c
Normal file
23
lib/debug.c
Normal file
|
@ -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);
|
||||||
|
}
|
3
lib/debug.h
Normal file
3
lib/debug.h
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
|
||||||
|
void debug_print_trace (int);
|
||||||
|
|
|
@ -172,6 +172,10 @@ typedef int socklen_t;
|
||||||
#include <libutil.h>
|
#include <libutil.h>
|
||||||
#endif /* HAVE_LIBUTIL_H */
|
#endif /* HAVE_LIBUTIL_H */
|
||||||
|
|
||||||
|
#ifdef HAVE_GLIBC_BACKTRACE
|
||||||
|
#include <execinfo.h>
|
||||||
|
#endif /* HAVE_GLIBC_BACKTRACE */
|
||||||
|
|
||||||
#ifdef BSDI_NRL
|
#ifdef BSDI_NRL
|
||||||
|
|
||||||
#ifdef HAVE_NETINET6_IN6_H
|
#ifdef HAVE_NETINET6_IN6_H
|
||||||
|
|
Loading…
Reference in a new issue