]> git.puffer.fish Git - matthieu/frr.git/commitdiff
2005-01-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
authorajs <ajs>
Mon, 17 Jan 2005 15:22:28 +0000 (15:22 +0000)
committerajs <ajs>
Mon, 17 Jan 2005 15:22:28 +0000 (15:22 +0000)
* 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]

lib/ChangeLog
lib/log.c
lib/log.h

index ba4bba9763577ac34a987cb3c4666a9311da5e53..519467bec841bde997ad1a54b5c640b093158589 100644 (file)
@@ -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
index fcf7c5d5829e97654a90393adc4a4e9eb012d9ce..a639745dbf53658860ddec19d40e22855c02c95c 100644 (file)
--- a/lib/log.c
+++ b/lib/log.c
@@ -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)); \
 }
index b8288298d756cc612deeaf505b1afb83cc4549c4..43b5f1c2ddb9b0becfbd7847879756af57fb19a8 100644 (file)
--- a/lib/log.h
+++ b/lib/log.h
@@ -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: */