diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1995-10-18 08:53:40 +0000 |
commit | d6583bb2a13f329cf0332ef2570eb8bb8fc0e39c (patch) | |
tree | ece253b876159b39c620e62b6c9b1174642e070e /usr.bin/ktrace |
initial import of NetBSD tree
Diffstat (limited to 'usr.bin/ktrace')
-rw-r--r-- | usr.bin/ktrace/Makefile | 8 | ||||
-rw-r--r-- | usr.bin/ktrace/ktrace.1 | 166 | ||||
-rw-r--r-- | usr.bin/ktrace/ktrace.c | 187 | ||||
-rw-r--r-- | usr.bin/ktrace/ktrace.h | 42 | ||||
-rw-r--r-- | usr.bin/ktrace/subr.c | 88 |
5 files changed, 491 insertions, 0 deletions
diff --git a/usr.bin/ktrace/Makefile b/usr.bin/ktrace/Makefile new file mode 100644 index 00000000000..8500316a0f4 --- /dev/null +++ b/usr.bin/ktrace/Makefile @@ -0,0 +1,8 @@ +# from: @(#)Makefile 8.1 (Berkeley) 6/6/93 +# $Id: Makefile,v 1.1 1995/10/18 08:45:27 deraadt Exp $ + +LDSTATIC=-static +PROG= ktrace +SRCS= ktrace.c subr.c + +.include <bsd.prog.mk> diff --git a/usr.bin/ktrace/ktrace.1 b/usr.bin/ktrace/ktrace.1 new file mode 100644 index 00000000000..d0257c28382 --- /dev/null +++ b/usr.bin/ktrace/ktrace.1 @@ -0,0 +1,166 @@ +.\" Copyright (c) 1990, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" from: @(#)ktrace.1 8.1 (Berkeley) 6/6/93 +.\" $Id: ktrace.1,v 1.1 1995/10/18 08:45:27 deraadt Exp $ +.\" +.Dd June 6, 1993 +.Dt KTRACE 1 +.Os BSD 4.4 +.Sh NAME +.Nm ktrace +.Nd enable kernel process tracing +.Sh SYNOPSIS +.Nm ktrace +.Op Fl aCcdi +.Op Fl f Ar trfile +.Op Fl g Ar pgrp +.Op Fl p Ar pid +.Op Fl t Ar trstr +.Nm ktrace +.Op Fl adi +.Op Fl f Ar trfile +.Op Fl t Ar trstr +command +.Sh DESCRIPTION +.Nm Ktrace +enables kernel trace logging for the specified processes. +Kernel trace data is logged to the file +.Pa ktrace.out . +The kernel operations that are traced include system calls, namei +translations, signal processing, and +.Tn I/O . +.Pp +Once tracing is enabled on a process, trace data will be logged until +either the process exits or the trace point is cleared. +A traced process can generate enormous amounts of log data quickly; +It is strongly suggested that users memorize how to disable tracing before +attempting to trace a process. +The following command is sufficient to disable tracing on all user owned +processes, and, if executed by root, all processes: +.Pp +.Dl \&$ trace -C +.Pp +The trace file is not human readable; use +.Xr kdump 1 +to decode it. +.Pp +The options are as follows: +.Bl -tag -width indent +.It Fl a +Append to the trace file instead of truncating it. +.It Fl C +Disable tracing on all user owned processes, and, if executed by root, all +processes in the system. +.It Fl c +Clear the trace points associated with the specified file or processes. +.It Fl d +Descendants; perform the operation for all current children of the +designated processes. +.It Fl f Ar file +Log trace records to +.Ar file +instead of +.Pa ktrace.out . +.It Fl g Ar pgid +Enable (disable) tracing on all processes in the process group (only one +.Fl g +flag is permitted). +.It Fl i +Inherit; pass the trace flags to all future children of the designated +processes. +.It Fl p Ar pid +Enable (disable) tracing on the indicated process id (only one +.Fl p +flag is permitted). +.It Fl t Ar trstr +The string argument represents the kernel trace points, one per letter. +The following table equates the letters with the tracepoints: +.Pp +.Bl -tag -width flag -compact +.It Cm c +trace system calls +.It Cm e +trace emulation changes +.It Cm n +trace namei translations +.It Cm i +trace +.Tn I/O +.It Cm s +trace signal processing +.El +.It Ar command +Execute +.Ar command +with the specified trace flags. +.El +.Pp +The +.Fl p , +.Fl g , +and +.Ar command +options are mutually exclusive. +.Sh EXAMPLES +# trace all kernel operations of process id 34 +.Dl $ ktrace -p 34 +.Pp +# trace all kernel operations of processes in process group 15 and +# pass the trace flags to all current and future children +.Dl $ ktrace -idg 15 +.Pp +# disable all tracing of process 65 +.Dl $ ktrace -cp 65 +.Pp +# disable tracing signals on process 70 and all current children +.Dl $ ktrace -t s -cdp 70 +.Pp +# enable tracing of +.Tn I/O +on process 67 +.Dl $ ktrace -ti -p 67 +.Pp +# run the command "w", tracing only system calls +.Dl $ ktrace -tc w +.Pp +# disable all tracing to the file "tracedata" +.Dl $ ktrace -c -f tracedata +.Pp +# disable tracing of all processes owned by the user +.Dl $ ktrace -C +.Sh SEE ALSO +.Xr kdump 1 +.Sh HISTORY +The +.Nm ktrace +command appears in +.Bx 4.4 . diff --git a/usr.bin/ktrace/ktrace.c b/usr.bin/ktrace/ktrace.c new file mode 100644 index 00000000000..f0de4fbe216 --- /dev/null +++ b/usr.bin/ktrace/ktrace.c @@ -0,0 +1,187 @@ +/* $NetBSD: ktrace.c,v 1.4 1995/08/31 23:01:44 jtc Exp $ */ + +/*- + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +static char copyright[] = +"@(#) Copyright (c) 1988, 1993\n\ + The Regents of the University of California. All rights reserved.\n"; +#endif /* not lint */ + +#ifndef lint +#if 0 +static char sccsid[] = "@(#)ktrace.c 8.2 (Berkeley) 4/28/95"; +#endif +static char *rcsid = "$NetBSD: ktrace.c,v 1.4 1995/08/31 23:01:44 jtc Exp $"; +#endif /* not lint */ + +#include <sys/param.h> +#include <sys/stat.h> +#include <sys/file.h> +#include <sys/time.h> +#include <sys/errno.h> +#include <sys/uio.h> +#include <sys/ktrace.h> + +#include <err.h> +#include <stdio.h> +#include <unistd.h> + +#include "ktrace.h" + +void no_ktrace __P((int)); +void usage __P((void)); + +main(argc, argv) + int argc; + char **argv; +{ + enum { NOTSET, CLEAR, CLEARALL } clear; + int append, ch, fd, inherit, ops, pid, pidset, trpoints; + char *tracefile; + + clear = NOTSET; + append = ops = pidset = inherit = 0; + trpoints = DEF_POINTS; + tracefile = DEF_TRACEFILE; + while ((ch = getopt(argc,argv,"aCcdf:g:ip:t:")) != EOF) + switch((char)ch) { + case 'a': + append = 1; + break; + case 'C': + clear = CLEARALL; + pidset = 1; + break; + case 'c': + clear = CLEAR; + break; + case 'd': + ops |= KTRFLAG_DESCEND; + break; + case 'f': + tracefile = optarg; + break; + case 'g': + pid = -rpid(optarg); + pidset = 1; + break; + case 'i': + inherit = 1; + break; + case 'p': + pid = rpid(optarg); + pidset = 1; + break; + case 't': + trpoints = getpoints(optarg); + if (trpoints < 0) { + warnx("unknown facility in %s", optarg); + usage(); + } + break; + default: + usage(); + } + argv += optind; + argc -= optind; + + if (pidset && *argv || !pidset && !*argv) + usage(); + + if (inherit) + trpoints |= KTRFAC_INHERIT; + + (void)signal(SIGSYS, no_ktrace); + if (clear != NOTSET) { + if (clear == CLEARALL) { + ops = KTROP_CLEAR | KTRFLAG_DESCEND; + trpoints = ALL_POINTS; + pid = 1; + } else + ops |= pid ? KTROP_CLEAR : KTROP_CLEARFILE; + + if (ktrace(tracefile, ops, trpoints, pid) < 0) + err(1, tracefile); + exit(0); + } + + if ((fd = open(tracefile, O_CREAT | O_WRONLY | (append ? 0 : O_TRUNC), + DEFFILEMODE)) < 0) + err(1, tracefile); + (void)close(fd); + + if (*argv) { + if (ktrace(tracefile, ops, trpoints, getpid()) < 0) + err(1, tracefile); + execvp(argv[0], &argv[0]); + err(1, "exec of '%s' failed", argv[0]); + } + else if (ktrace(tracefile, ops, trpoints, pid) < 0) + err(1, tracefile); + exit(0); +} + +rpid(p) + char *p; +{ + static int first; + + if (first++) { + warnx("only one -g or -p flag is permitted."); + usage(); + } + if (!*p) { + warnx("illegal process id."); + usage(); + } + return(atoi(p)); +} + +void +usage() +{ + (void)fprintf(stderr, +"usage:\tktrace [-aCcid] [-f trfile] [-g pgid] [-p pid] [-t [acgn]\n\tktrace [-aCcid] [-f trfile] [-t [acgn] command\n"); + exit(1); +} + +void +no_ktrace(sig) + int sig; +{ + (void)fprintf(stderr, +"error:\tktrace() system call not supported in the running kernel\n\tre-compile kernel with 'options KTRACE'\n"); + exit(1); +} diff --git a/usr.bin/ktrace/ktrace.h b/usr.bin/ktrace/ktrace.h new file mode 100644 index 00000000000..a5fb9e3afa4 --- /dev/null +++ b/usr.bin/ktrace/ktrace.h @@ -0,0 +1,42 @@ +/*- + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * from: @(#)ktrace.h 8.1 (Berkeley) 6/6/93 + * $Id: ktrace.h,v 1.1 1995/10/18 08:45:27 deraadt Exp $ + */ + +#define DEF_POINTS (KTRFAC_SYSCALL | KTRFAC_SYSRET | KTRFAC_NAMEI | \ + KTRFAC_GENIO | KTRFAC_PSIG | KTRFAC_EMUL) + +#define ALL_POINTS (DEF_POINTS | KTRFAC_CSW) + +#define DEF_TRACEFILE "ktrace.out" diff --git a/usr.bin/ktrace/subr.c b/usr.bin/ktrace/subr.c new file mode 100644 index 00000000000..5f0ded7d7da --- /dev/null +++ b/usr.bin/ktrace/subr.c @@ -0,0 +1,88 @@ +/* $NetBSD: subr.c,v 1.6 1995/08/31 23:01:45 jtc Exp $ */ + +/*- + * Copyright (c) 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef lint +#if 0 +static char sccsid[] = "@(#)subr.c 8.2 (Berkeley) 4/28/95"; +#endif +static char *rcsid = "$NetBSD: subr.c,v 1.6 1995/08/31 23:01:45 jtc Exp $"; +#endif /* not lint */ + +#include <sys/param.h> +#include <sys/file.h> +#include <sys/user.h> +#include <sys/proc.h> +#include <sys/time.h> +#include <sys/ktrace.h> + +#include <stdio.h> + +#include "ktrace.h" + +getpoints(s) + char *s; +{ + int facs = 0; + + while (*s) { + switch(*s) { + case 'c': + facs |= KTRFAC_SYSCALL | KTRFAC_SYSRET; + break; + case 'e': + facs |= KTRFAC_EMUL; + break; + case 'n': + facs |= KTRFAC_NAMEI; + break; + case 'i': + facs |= KTRFAC_GENIO; + break; + case 's': + facs |= KTRFAC_PSIG; + break; + case 'w': + facs |= KTRFAC_CSW; + break; + case '+': + facs |= DEF_POINTS; + break; + default: + return (-1); + } + s++; + } + return (facs); +} |