diff options
author | ajs <ajs> | 2005-01-17 15:22:28 +0000 |
---|---|---|
committer | ajs <ajs> | 2005-01-17 15:22:28 +0000 |
commit | 09c64f5153f2450f59a9a42d886c96b4b00ae9f4 (patch) | |
tree | 560e082354cf06665f912a5a8cf31e3f2c45b75b /lib/log.c | |
parent | 6213d09378e706f7625a8a114d554f0b17e66595 (diff) | |
download | quagga-09c64f5153f2450f59a9a42d886c96b4b00ae9f4.tar.bz2 quagga-09c64f5153f2450f59a9a42d886c96b4b00ae9f4.tar.xz |
2005-01-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* log.h: Change prototype for zlog_backtrace_sigsafe to take additional
program_counter argument.
* log.c: (zlog_backtrace_sigsafe) Add additional program_counter
argument. If it is non-NULL, use backtrace_symbols_fd to resolve
the address.
(zlog_signal) Call zlog_backtrace_sigsafe with additional
program_counter argument.
[pullup candidate]
Diffstat (limited to 'lib/log.c')
-rw-r--r-- | lib/log.c | 10 |
1 files changed, 8 insertions, 2 deletions
@@ -312,7 +312,7 @@ zlog_signal(int signo, const char *action, siginfo_t *siginfo, } #undef DUMP - zlog_backtrace_sigsafe(PRI); + zlog_backtrace_sigsafe(PRI, program_counter); #undef PRI #undef LOC } @@ -320,9 +320,10 @@ zlog_signal(int signo, const char *action, siginfo_t *siginfo, /* Log a backtrace using only async-signal-safe functions. Needs to be enhanced to support syslog logging. */ void -zlog_backtrace_sigsafe(int priority) +zlog_backtrace_sigsafe(int priority, void *program_counter) { #ifdef HAVE_GLIBC_BACKTRACE + static const char pclabel[] = "Program counter: "; void *array[20]; int size; char buf[100]; @@ -338,6 +339,11 @@ zlog_backtrace_sigsafe(int priority) s = str_append(LOC," stack frames:\n"); #define DUMP(FP) { \ + if (program_counter) \ + { \ + write(fileno(FP),pclabel,sizeof(pclabel)-1); \ + backtrace_symbols_fd(&program_counter, 1, fileno(FP)); \ + } \ write(fileno(FP),buf,s-buf); \ backtrace_symbols_fd(array, size, fileno(FP)); \ } |