summaryrefslogtreecommitdiffstats
path: root/usr.bin/truss
diff options
context:
space:
mode:
authoralfred <alfred@FreeBSD.org>2004-07-17 19:19:36 +0000
committeralfred <alfred@FreeBSD.org>2004-07-17 19:19:36 +0000
commit4c16bbdae3c2b668d0d9672affa2e8749490f8ae (patch)
tree8f528bd7bc53ea73efb5bf295901abfbf07b3c48 /usr.bin/truss
parent8b3e9f1e03ec8f63b9dedbc3298d8d7806e4ddc8 (diff)
downloadFreeBSD-src-4c16bbdae3c2b668d0d9672affa2e8749490f8ae.zip
FreeBSD-src-4c16bbdae3c2b668d0d9672affa2e8749490f8ae.tar.gz
When reporting reciept of a signal, print the signal's name.
Diffstat (limited to 'usr.bin/truss')
-rw-r--r--usr.bin/truss/extern.h1
-rw-r--r--usr.bin/truss/main.c24
-rw-r--r--usr.bin/truss/syscalls.c8
3 files changed, 26 insertions, 7 deletions
diff --git a/usr.bin/truss/extern.h b/usr.bin/truss/extern.h
index 0a1355e..ee977fb 100644
--- a/usr.bin/truss/extern.h
+++ b/usr.bin/truss/extern.h
@@ -35,6 +35,7 @@ extern int setup_and_wait(char **);
extern int start_tracing(int, int, int);
extern void restore_proc(int);
extern const char *ioctlname(register_t val);
+extern char *strsig(int sig);
#ifdef __alpha__
extern void alpha_syscall_entry(struct trussinfo *, int);
extern long alpha_syscall_exit(struct trussinfo *, int);
diff --git a/usr.bin/truss/main.c b/usr.bin/truss/main.c
index f1939c1..8822d9e 100644
--- a/usr.bin/truss/main.c
+++ b/usr.bin/truss/main.c
@@ -45,6 +45,7 @@ __FBSDID("$FreeBSD$");
#include <sys/time.h>
#include <sys/resource.h>
+#include <ctype.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
@@ -138,6 +139,23 @@ set_etype(struct trussinfo *trussinfo) {
return funcs;
}
+char *
+strsig(int sig)
+{
+ char *ret;
+
+ ret = NULL;
+ if (sig > 0 && sig < NSIG) {
+ int i;
+ asprintf(&ret, "sig%s", sys_signame[sig]);
+ if (ret == NULL)
+ return (NULL);
+ for (i = 0; ret[i] != '\0'; ++i)
+ ret[i] = toupper(ret[i]);
+ }
+ return (ret);
+}
+
int
main(int ac, char **av) {
int c;
@@ -149,6 +167,7 @@ main(int ac, char **av) {
char *fname = NULL;
int sigexit = 0;
struct trussinfo *trussinfo;
+ char *signame;
/* Initialize the trussinfo struct */
trussinfo = (struct trussinfo *)malloc(sizeof(struct trussinfo));
@@ -285,7 +304,10 @@ START_TRACE:
funcs->exit_syscall(trussinfo, pfs.val);
break;
case S_SIG:
- fprintf(trussinfo->outfile, "SIGNAL %lu\n", pfs.val);
+ signame = strsig(pfs.val);
+ fprintf(trussinfo->outfile, "SIGNAL %lu (%s)\n", pfs.val,
+ signame == NULL ? "?" : signame);
+ free(signame);
sigexit = pfs.val;
break;
case S_EXIT:
diff --git a/usr.bin/truss/syscalls.c b/usr.bin/truss/syscalls.c
index fff0555..992f94f 100644
--- a/usr.bin/truss/syscalls.c
+++ b/usr.bin/truss/syscalls.c
@@ -471,12 +471,8 @@ print_arg(int fd, struct syscall_args *sc, unsigned long *args) {
long sig;
sig = args[sc->offset];
- if (sig > 0 && sig < NSIG) {
- int i;
- asprintf(&tmp, "sig%s", sys_signame[sig]);
- for (i = 0; tmp[i] != '\0'; ++i)
- tmp[i] = toupper(tmp[i]);
- } else
+ tmp = strsig(sig);
+ if (tmp == NULL)
asprintf(&tmp, "%ld", sig);
}
break;
OpenPOWER on IntegriCloud