[lib] Put symbolic backtrace on system log

When BGP crashes, sometimes all we get to see is syslog.
diff --git a/lib/log.c b/lib/log.c
index 407904d..f7a3685 100644
--- a/lib/log.c
+++ b/lib/log.c
@@ -435,10 +435,10 @@
 {
 #ifdef HAVE_STACK_TRACE
   static const char pclabel[] = "Program counter: ";
-  void *array[20];
+  void *array[64];
   int size;
   char buf[100];
-  char *s;
+  char *s, **bt = NULL;
 #define LOC s,buf+sizeof(buf)-s
 
 #ifdef HAVE_GLIBC_BACKTRACE
@@ -485,20 +485,29 @@
 	syslog_sigsafe(priority|zlog_default->facility,buf,s-buf);
       {
 	int i;
+#ifdef HAVE_GLIBC_BACKTRACE
+        bt = backtrace_symbols(array, size);
+#endif
 	/* Just print the function addresses. */
 	for (i = 0; i < size; i++)
 	  {
 	    s = buf;
-	    s = str_append(LOC,"[bt ");
-	    s = num_append(LOC,i);
-	    s = str_append(LOC,"] 0x");
-	    s = hex_append(LOC,(u_long)(array[i]));
+	    if (bt) 
+	      s = str_append(LOC, bt[i]);
+	    else {
+	      s = str_append(LOC,"[bt ");
+	      s = num_append(LOC,i);
+	      s = str_append(LOC,"] 0x");
+	      s = hex_append(LOC,(u_long)(array[i]));
+	    }
 	    *s = '\0';
 	    if (priority <= zlog_default->maxlvl[ZLOG_DEST_MONITOR])
 	      vty_log_fixed(buf,s-buf);
 	    if (priority <= zlog_default->maxlvl[ZLOG_DEST_SYSLOG])
 	      syslog_sigsafe(priority|zlog_default->facility,buf,s-buf);
 	  }
+	  if (bt)
+	    free(bt);
       }
     }
 #undef DUMP