diff --git a/lib/ChangeLog b/lib/ChangeLog
index 519467b..d17d7e0 100644
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,19 @@
+2005-01-18 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
+
+	* log.h: Test for SA_SIGINFO to see whether zlog_signal takes final
+	  two args (siginfo and program_counter).
+	* log.c: (hex_append) Include this function only if SA_SIGINFO or
+	  HAVE_GLIBC_BACKTRACE is defined.
+	  (zlog_signal) Final two args (siginfo and program_counter) now
+	  depend on whether SA_SIGINFO is defined on this platform.
+	* sigevent.c: (program_counter) Do not include this function if
+	  SA_SIGINFO is not defined on this platform.
+	  (exit_handler,core_handler) Test for SA_SIGINFO to decide whether
+	  2nd & 3rd arguments are present and to decide how to invoke
+	  zlog_signal.
+	  (trap_default_signals) Test for SA_SIGINFO and invoke sigaction
+	  appropriately.
+
 2005-01-17 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
 
 	* log.h: Change prototype for zlog_backtrace_sigsafe to take additional
diff --git a/lib/log.c b/lib/log.c
index a639745..2efc30f 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -1,5 +1,5 @@
 /*
- * $Id: log.c,v 1.22 2005/01/17 15:22:28 ajs Exp $
+ * $Id: log.c,v 1.23 2005/01/18 22:18:59 ajs Exp $
  *
  * Logging of zebra
  * Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro
@@ -177,6 +177,7 @@
   return str_append(s,len,t);
 }
 
+#if defined(SA_SIGINFO) || defined(HAVE_GLIBC_BACKTRACE)
 static char *
 hex_append(char *s, int len, u_long x)
 {
@@ -194,6 +195,7 @@
     }
   return str_append(s,len,t);
 }
+#endif
 
 static int syslog_fd = -1;
 
@@ -258,8 +260,11 @@
 
 /* Note: the goal here is to use only async-signal-safe functions. */
 void
-zlog_signal(int signo, const char *action, siginfo_t *siginfo,
-	    void *program_counter)
+zlog_signal(int signo, const char *action
+#ifdef SA_SIGINFO
+	    , siginfo_t *siginfo, void *program_counter
+#endif
+	   )
 {
   time_t now;
   char buf[sizeof("DEFAULT: Received signal S at T (si_addr 0xP, PC 0xP); aborting...")+100];
@@ -279,6 +284,7 @@
   s = num_append(LOC,signo);
   s = str_append(LOC," at ");
   s = num_append(LOC,now);
+#ifdef SA_SIGINFO
   s = str_append(LOC," (si_addr 0x");
   s = hex_append(LOC,(u_long)(siginfo->si_addr));
   if (program_counter)
@@ -287,6 +293,9 @@
       s = hex_append(LOC,(u_long)program_counter);
     }
   s = str_append(LOC,"); ");
+#else /* SA_SIGINFO */
+  s = str_append(LOC,"; ");
+#endif /* SA_SIGINFO */
   s = str_append(LOC,action);
   if (s < buf+sizeof(buf))
     *s++ = '\n';
@@ -312,7 +321,13 @@
     }
 #undef DUMP
 
-  zlog_backtrace_sigsafe(PRI, program_counter);
+  zlog_backtrace_sigsafe(PRI,
+#ifdef SA_SIGINFO
+  			 program_counter
+#else
+			 NULL
+#endif
+			);
 #undef PRI
 #undef LOC
 }
diff --git a/lib/log.h b/lib/log.h
index 43b5f1c..46c4f11 100644
--- a/lib/log.h
+++ b/lib/log.h
@@ -1,5 +1,5 @@
 /*
- * $Id: log.h,v 1.16 2005/01/17 15:22:28 ajs Exp $
+ * $Id: log.h,v 1.17 2005/01/18 22:18:59 ajs Exp $
  *
  * Zebra logging funcions.
  * Copyright (C) 1997, 1998, 1999 Kunihiro Ishiguro
@@ -153,8 +153,11 @@
 extern const char *safe_strerror(int errnum);
 
 /* To be called when a fatal signal is caught. */
-extern void zlog_signal(int signo, const char *action,
-			siginfo_t *siginfo, void *program_counter);
+extern void zlog_signal(int signo, const char *action
+#ifdef SA_SIGINFO
+			, siginfo_t *siginfo, void *program_counter
+#endif
+		       );
 
 /* Log a backtrace. */
 extern void zlog_backtrace(int priority);
diff --git a/lib/sigevent.c b/lib/sigevent.c
index 7acdad2..9c25d76 100644
--- a/lib/sigevent.c
+++ b/lib/sigevent.c
@@ -23,6 +23,7 @@
 #include <sigevent.h>
 #include <log.h>
 
+#ifdef SA_SIGINFO
 #ifdef HAVE_UCONTEXT_H
 #ifdef GNU_LINUX
 /* get REG_EIP from ucontext.h */
@@ -30,6 +31,7 @@
 #endif /* GNU_LINUX */
 #include <ucontext.h>
 #endif /* HAVE_UCONTEXT_H */
+#endif /* SA_SIGINFO */
 
 
 /* master signals descriptor struct */
@@ -161,6 +163,8 @@
     return 0;
 }
 
+#ifdef SA_SIGINFO
+
 /* XXX This function should be enhanced to support more platforms
        (it currently works only on Linux/x86). */
 static void *
@@ -177,17 +181,35 @@
   return NULL;
 }
 
+#endif /* SA_SIGINFO */
+
 static void
-exit_handler(int signo, siginfo_t *siginfo, void *context)
+exit_handler(int signo
+#ifdef SA_SIGINFO
+	     , siginfo_t *siginfo, void *context
+#endif
+	    )
 {
-  zlog_signal(signo, "exiting...", siginfo, program_counter(context));
+  zlog_signal(signo, "exiting..."
+#ifdef SA_SIGINFO
+	      , siginfo, program_counter(context)
+#endif
+	     );
   _exit(128+signo);
 }
 
 static void
-core_handler(int signo, siginfo_t *siginfo, void *context)
+core_handler(int signo
+#ifdef SA_SIGINFO
+	     , siginfo_t *siginfo, void *context
+#endif
+	    )
 {
-  zlog_signal(signo, "aborting...", siginfo, program_counter(context));
+  zlog_signal(signo, "aborting..."
+#ifdef SA_SIGINFO
+	      , siginfo, program_counter(context)
+#endif
+	     );
   abort();
 }
 
@@ -236,7 +258,11 @@
   static const struct {
     const int *sigs;
     u_int nsigs;
-    void (*handler)(int signo, siginfo_t *info, void *context);
+    void (*handler)(int signo
+#ifdef SA_SIGINFO
+		    , siginfo_t *info, void *context
+#endif
+		   );
   } sigmap[] = {
     { core_signals, sizeof(core_signals)/sizeof(core_signals[0]), core_handler},
     { exit_signals, sizeof(exit_signals)/sizeof(exit_signals[0]), exit_handler},
@@ -263,9 +289,14 @@
 	        }
 	      else
 	        {
+#ifdef SA_SIGINFO
 		  /* Request extra arguments to signal handler. */
 		  act.sa_sigaction = sigmap[i].handler;
 		  act.sa_flags = SA_SIGINFO;
+#else
+		  act.sa_handler = sigmap[i].handler;
+		  act.sa_flags = 0;
+#endif
 	        }
 	      if (sigaction(sigmap[i].sigs[j],&act,NULL) < 0)
 	        zlog_warn("Unable to set signal handler for signal %d: %s",
