diff options
author | ajs <ajs> | 2005-01-17 15:22:28 +0000 |
---|---|---|
committer | ajs <ajs> | 2005-01-17 15:22:28 +0000 |
commit | 239c26fdeae4dbccb43da359f9ea034041440831 (patch) | |
tree | aefdb215d2e9ad88afe04d105c07cb9d8550bf96 | |
parent | f127165de02a66934082f23810fab37d7efbce8b (diff) |
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]
-rw-r--r-- | lib/ChangeLog | 10 | ||||
-rw-r--r-- | lib/log.c | 12 | ||||
-rw-r--r-- | lib/log.h | 7 |
3 files changed, 23 insertions, 6 deletions
diff --git a/lib/ChangeLog b/lib/ChangeLog index ba4bba97..519467be 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,3 +1,13 @@ +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. + 2005-01-17 Hasso Tepper <hasso at quagga.net> * command.[ch], vty.c: cmd_execute_command() function must not attempt @@ -1,5 +1,5 @@ /* - * $Id: log.c,v 1.21 2005/01/12 17:27:27 ajs Exp $ + * $Id: log.c,v 1.22 2005/01/17 15:22:28 ajs Exp $ * * Logging of zebra * Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro @@ -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)); \ } @@ -1,5 +1,5 @@ /* - * $Id: log.h,v 1.15 2005/01/12 17:27:27 ajs Exp $ + * $Id: log.h,v 1.16 2005/01/17 15:22:28 ajs Exp $ * * Zebra logging funcions. * Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro @@ -161,8 +161,9 @@ extern void zlog_backtrace(int priority); /* Log a backtrace, but in an async-signal-safe way. Should not be called unless the program is about to exit or abort, since it messes - up the state of zlog file pointers. */ -extern void zlog_backtrace_sigsafe(int priority); + up the state of zlog file pointers. If program_counter is non-NULL, + that is logged in addition to the current backtrace. */ +extern void zlog_backtrace_sigsafe(int priority, void *program_counter); /* Defines for use in command construction: */ |