Add new function `signame', which returns name (SIGXXX) of numeric
signal, and replace lookups in signalent[] with calls to it.
diff --git a/signal.c b/signal.c
index 5860bf9..c52c8de 100644
--- a/signal.c
+++ b/signal.c
@@ -197,6 +197,33 @@
 
 #endif /* HAVE_SIGACTION */
 
+/* Anonymous realtime signals. */
+/* Under glibc 2.1, SIGRTMIN et al are functions, but __SIGRTMIN is a
+   constant.  This is what we want.  Otherwise, just use SIGRTMIN. */
+#ifdef SIGRTMIN
+#ifndef __SIGRTMIN
+#define __SIGRTMIN SIGRTMIN
+#define __SIGRTMAX SIGRTMAX /* likewise */
+#endif
+#endif
+
+char *
+signame(sig)
+int sig;
+{
+	static char buf[30];
+	if (sig < nsignals) {
+		return signalent[sig];
+#ifdef SIGRTMIN
+	} else if (sig <= __SIGRTMIN && sig <= __SIGRTMAX) {
+		sprintf(buf, "SIGRT_%d", sig);
+		return buf;
+#endif /* SIGRTMIN */
+	} else {
+		sprintf(buf, "%d", sig);
+		return buf;
+	}
+}
 
 static char *
 sprintsigmask(s, mask)
@@ -231,7 +258,7 @@
 	*s++ = '[';
 	for (i = 1; i < nsignals; i++) {
 		if (sigismember(mask, i) == 1) {
-			sprintf(s, format, signalent[i] + 3); s += strlen(s);
+			sprintf(s, format, signame(i) + 3); s += strlen(s);
 			format = " %s";
 		}
 	}
@@ -251,10 +278,7 @@
 printsignal(nr)
 int nr;
 {
-	if (nr > 0 && nr < nsignals)
-		tprintf("%s", signalent[nr]);
-	else
-		tprintf("%d", nr);
+	tprintf(signame(nr));
 }
 
 /*
@@ -1027,12 +1051,7 @@
 struct tcb *tcp;
 {
 	if (entering(tcp)) {
-		long sig = tcp->u_arg[1];
-
-		if (sig >= 0 && sig < NSIG)
-			tprintf("%ld, %s", tcp->u_arg[0], signalent[sig]);
-		else
-			tprintf("%ld, %ld", tcp->u_arg[0], sig);
+		tprintf("%ld, %s", tcp->u_arg[0], signame(tcp->u_arg[1]));
 	}
 	return 0;
 }