diff options
Diffstat (limited to 'usr.bin')
-rw-r--r-- | usr.bin/truss/extern.h | 1 | ||||
-rw-r--r-- | usr.bin/truss/main.c | 24 | ||||
-rw-r--r-- | usr.bin/truss/syscalls.c | 8 |
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; |