diff options
| -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: */  | 
