mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-12 20:29:58 +00:00
[lib] Add support for Sun libc printstack to zlog_backtrace_sigsafe
2006-05-28 Paul Jakma <paul.jakma@sun.com> * configure.ac: Check for Sun libc printstack(), add a general HAVE_STACK_TRACE define for lib/log.c, if any supported stack symbol dumping function is found (glibc backtrace/sun libc printstack). * log.c: (general) Add support for Sun libc printstack(). (hex_append) make the cpp conditional on general HAVE_STACK_TRACE define. (zlog_backtrace_sigsafe) Ditto. Add printstack() version of the the DUMP macro in this function.
This commit is contained in:
parent
a4b3030383
commit
fb66b29c67
@ -4,6 +4,9 @@
|
|||||||
enable debug options.
|
enable debug options.
|
||||||
Add a check for GNU Make and warn the user if it does not appear
|
Add a check for GNU Make and warn the user if it does not appear
|
||||||
to be the make used.
|
to be the make used.
|
||||||
|
Check for Sun libc printstack(), add a general HAVE_STACK_TRACE
|
||||||
|
define for lib/log.c, if any supported stack symbol dumping
|
||||||
|
function is found (glibc backtrace/sun libc printstack).
|
||||||
|
|
||||||
2006-05-10 Paul Jakma <paul.jakma@sun.com>
|
2006-05-10 Paul Jakma <paul.jakma@sun.com>
|
||||||
|
|
||||||
|
20
configure.ac
20
configure.ac
@ -392,11 +392,15 @@ case "$host" in
|
|||||||
| [*-solaris2.1[0-9]] \
|
| [*-solaris2.1[0-9]] \
|
||||||
| [*-solaris2.1[0-9].[0-9]])
|
| [*-solaris2.1[0-9].[0-9]])
|
||||||
opsys=sol8
|
opsys=sol8
|
||||||
AC_DEFINE(SUNOS_59,,SunOS 5.8 up)
|
AC_DEFINE(SUNOS_59, 1, [SunOS 5.8 up])
|
||||||
AC_DEFINE(SUNOS_5, 1, SunOS 5)
|
AC_DEFINE(SUNOS_5, 1, [SunOS 5])
|
||||||
AC_CHECK_LIB(socket, main)
|
AC_CHECK_LIB(socket, main)
|
||||||
AC_CHECK_LIB(nsl, main)
|
AC_CHECK_LIB(nsl, main)
|
||||||
AC_CHECK_LIB(umem, main)
|
AC_CHECK_LIB(umem, main)
|
||||||
|
AC_CHECK_FUNCS([printstack],
|
||||||
|
[AC_DEFINE([HAVE_PRINTSTACK],1,[Solaris printstack])
|
||||||
|
AC_DEFINE([HAVE_STACK_TRACE],1,[Stack symbols decode functionality])
|
||||||
|
])
|
||||||
CURSES=-lcurses
|
CURSES=-lcurses
|
||||||
;;
|
;;
|
||||||
*-sunos5* | *-solaris2*)
|
*-sunos5* | *-solaris2*)
|
||||||
@ -1244,12 +1248,12 @@ dnl ---------------------------
|
|||||||
dnl check for glibc 'backtrace'
|
dnl check for glibc 'backtrace'
|
||||||
dnl ---------------------------
|
dnl ---------------------------
|
||||||
if test "${glibc}" = "yes"; then
|
if test "${glibc}" = "yes"; then
|
||||||
AC_CHECK_HEADER(execinfo.h)
|
AC_CHECK_HEADER([execinfo.h],
|
||||||
fi
|
[AC_CHECK_FUNC([backtrace],
|
||||||
if test x"${ac_cv_header_execinfo_h}" = x"yes"; then
|
[AC_DEFINE(HAVE_GLIBC_BACKTRACE,,[Glibc backtrace])
|
||||||
AC_CHECK_FUNC(backtrace,
|
AC_DEFINE(HAVE_STACK_TRACE,,[Stack symbol decoding])
|
||||||
[AC_DEFINE(HAVE_GLIBC_BACKTRACE,,Glibc backtrace)]
|
])
|
||||||
)
|
])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
dnl -----------------------------------------
|
dnl -----------------------------------------
|
||||||
|
@ -7,6 +7,11 @@
|
|||||||
we still need it on GNU Libc for mallinfo().
|
we still need it on GNU Libc for mallinfo().
|
||||||
* vty.c: (vty_log/vty_log_fixed) dont crash if called when vty
|
* vty.c: (vty_log/vty_log_fixed) dont crash if called when vty
|
||||||
hasn't been initiliased.
|
hasn't been initiliased.
|
||||||
|
* log.c: (general) Add support for Sun libc printstack().
|
||||||
|
(hex_append) make the cpp conditional on general HAVE_STACK_TRACE
|
||||||
|
define.
|
||||||
|
(zlog_backtrace_sigsafe) Ditto. Add printstack() version of the
|
||||||
|
the DUMP macro in this function.
|
||||||
|
|
||||||
2006-05-21 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
|
2006-05-21 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
|
||||||
|
|
||||||
|
26
lib/log.c
26
lib/log.c
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: log.c,v 1.27 2006/05/15 16:56:51 paul Exp $
|
* $Id$
|
||||||
*
|
*
|
||||||
* Logging of zebra
|
* Logging of zebra
|
||||||
* Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro
|
* Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro
|
||||||
@ -179,7 +179,7 @@ num_append(char *s, int len, u_long x)
|
|||||||
return str_append(s,len,t);
|
return str_append(s,len,t);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SA_SIGINFO) || defined(HAVE_GLIBC_BACKTRACE)
|
#if defined(SA_SIGINFO) || defined(HAVE_STACK_TRACE)
|
||||||
static char *
|
static char *
|
||||||
hex_append(char *s, int len, u_long x)
|
hex_append(char *s, int len, u_long x)
|
||||||
{
|
{
|
||||||
@ -371,7 +371,7 @@ zlog_signal(int signo, const char *action
|
|||||||
void
|
void
|
||||||
zlog_backtrace_sigsafe(int priority, void *program_counter)
|
zlog_backtrace_sigsafe(int priority, void *program_counter)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_GLIBC_BACKTRACE
|
#ifdef HAVE_STACK_TRACE
|
||||||
static const char pclabel[] = "Program counter: ";
|
static const char pclabel[] = "Program counter: ";
|
||||||
void *array[20];
|
void *array[20];
|
||||||
int size;
|
int size;
|
||||||
@ -379,13 +379,10 @@ zlog_backtrace_sigsafe(int priority, void *program_counter)
|
|||||||
char *s;
|
char *s;
|
||||||
#define LOC s,buf+sizeof(buf)-s
|
#define LOC s,buf+sizeof(buf)-s
|
||||||
|
|
||||||
|
#ifdef HAVE_GLIBC_BACKTRACE
|
||||||
if (((size = backtrace(array,sizeof(array)/sizeof(array[0]))) <= 0) ||
|
if (((size = backtrace(array,sizeof(array)/sizeof(array[0]))) <= 0) ||
|
||||||
((size_t)size > sizeof(array)/sizeof(array[0])))
|
((size_t)size > sizeof(array)/sizeof(array[0])))
|
||||||
return;
|
return;
|
||||||
s = buf;
|
|
||||||
s = str_append(LOC,"Backtrace for ");
|
|
||||||
s = num_append(LOC,size);
|
|
||||||
s = str_append(LOC," stack frames:\n");
|
|
||||||
|
|
||||||
#define DUMP(FD) { \
|
#define DUMP(FD) { \
|
||||||
if (program_counter) \
|
if (program_counter) \
|
||||||
@ -396,6 +393,19 @@ zlog_backtrace_sigsafe(int priority, void *program_counter)
|
|||||||
write(FD, buf, s-buf); \
|
write(FD, buf, s-buf); \
|
||||||
backtrace_symbols_fd(array, size, FD); \
|
backtrace_symbols_fd(array, size, FD); \
|
||||||
}
|
}
|
||||||
|
#elif defined(HAVE_PRINTSTACK)
|
||||||
|
#define DUMP(FD) { \
|
||||||
|
if (program_counter) \
|
||||||
|
write((FD), pclabel, sizeof(pclabel)-1); \
|
||||||
|
write((FD), buf, s-buf); \
|
||||||
|
printstack((FD)); \
|
||||||
|
}
|
||||||
|
#endif /* HAVE_GLIBC_BACKTRACE, HAVE_PRINTSTACK */
|
||||||
|
|
||||||
|
s = buf;
|
||||||
|
s = str_append(LOC,"Backtrace for ");
|
||||||
|
s = num_append(LOC,size);
|
||||||
|
s = str_append(LOC," stack frames:\n");
|
||||||
|
|
||||||
if ((logfile_fd >= 0) || ((logfile_fd = open_crashlog()) >= 0))
|
if ((logfile_fd >= 0) || ((logfile_fd = open_crashlog()) >= 0))
|
||||||
DUMP(logfile_fd)
|
DUMP(logfile_fd)
|
||||||
@ -431,7 +441,7 @@ zlog_backtrace_sigsafe(int priority, void *program_counter)
|
|||||||
}
|
}
|
||||||
#undef DUMP
|
#undef DUMP
|
||||||
#undef LOC
|
#undef LOC
|
||||||
#endif /* HAVE_GLIBC_BACKTRACE */
|
#endif /* HAVE_STRACK_TRACE */
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user