Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Add ioctlprint - descriptive ioctl value printer



details:   https://anonhg.NetBSD.org/src/rev/d9980d831b1b
branches:  trunk
changeset: 850322:d9980d831b1b
user:      kamil <kamil%NetBSD.org@localhost>
date:      Thu Apr 02 03:32:46 2020 +0000

description:
Add ioctlprint - descriptive ioctl value printer

ioctlprint(1) is embedded in the kdump(1) program.

diffstat:

 distrib/sets/lists/base/mi |   3 +-
 distrib/sets/lists/man/mi  |   5 ++-
 usr.bin/kdump/Makefile     |   4 +-
 usr.bin/kdump/ioctlprint.1 |  89 ++++++++++++++++++++++++++++++++++++++++++++++
 usr.bin/kdump/kdump.c      |  84 +++++++++++++++++++++++++++++++++++++++----
 5 files changed, 174 insertions(+), 11 deletions(-)

diffs (truncated from 318 to 300 lines):

diff -r cc58f6bd6e9b -r d9980d831b1b distrib/sets/lists/base/mi
--- a/distrib/sets/lists/base/mi        Thu Apr 02 00:00:16 2020 +0000
+++ b/distrib/sets/lists/base/mi        Thu Apr 02 03:32:46 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1235 2020/03/29 17:13:46 christos Exp $
+# $NetBSD: mi,v 1.1236 2020/04/02 03:32:46 kamil Exp $
 #
 # Note:        Don't delete entries from here - mark them as "obsolete" instead,
 #      unless otherwise stated below.
@@ -797,6 +797,7 @@
 ./usr/bin/install                              base-util-bin
 ./usr/bin/install-info                         base-texinfo-bin
 ./usr/bin/install-sid                          base-gnats-bin
+./usr/bin/ioctlprint                           base-debug-bin
 ./usr/bin/ipcrm                                        base-util-bin
 ./usr/bin/ipcs                                 base-util-bin
 ./usr/bin/join                                 base-util-bin
diff -r cc58f6bd6e9b -r d9980d831b1b distrib/sets/lists/man/mi
--- a/distrib/sets/lists/man/mi Thu Apr 02 00:00:16 2020 +0000
+++ b/distrib/sets/lists/man/mi Thu Apr 02 03:32:46 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.1684 2020/03/29 17:13:46 christos Exp $
+# $NetBSD: mi,v 1.1685 2020/04/02 03:32:46 kamil Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -226,6 +226,7 @@
 ./usr/share/man/cat1/install-info.0            man-texinfo-catman      .cat
 ./usr/share/man/cat1/install.0                 man-util-catman         .cat
 ./usr/share/man/cat1/intro.0                   man-sys-catman          .cat
+./usr/share/man/cat1/ioctlprint.0              man-debug-catman        .cat
 ./usr/share/man/cat1/ipcrm.0                   man-util-catman         .cat
 ./usr/share/man/cat1/ipcs.0                    man-util-catman         .cat
 ./usr/share/man/cat1/ipftest.0                 man-ipf-catman          ipfilter,.cat
@@ -3512,6 +3513,7 @@
 ./usr/share/man/html1/install-info.html                man-texinfo-htmlman     html
 ./usr/share/man/html1/install.html             man-util-htmlman        html
 ./usr/share/man/html1/intro.html               man-sys-htmlman         html
+./usr/share/man/html1/ioctlprint.html          man-debug-htmlman       html
 ./usr/share/man/html1/ipcrm.html               man-util-htmlman        html
 ./usr/share/man/html1/ipcs.html                        man-util-htmlman        html
 ./usr/share/man/html1/ipftest.html             man-ipf-htmlman         ipfilter,html
@@ -6436,6 +6438,7 @@
 ./usr/share/man/man1/install-info.1            man-texinfo-man         .man
 ./usr/share/man/man1/install.1                 man-util-man            .man
 ./usr/share/man/man1/intro.1                   man-sys-man             .man
+./usr/share/man/man1/ioctlprint.1              man-debug-man           .man
 ./usr/share/man/man1/ipcrm.1                   man-util-man            .man
 ./usr/share/man/man1/ipcs.1                    man-util-man            .man
 ./usr/share/man/man1/ipftest.1                 man-ipf-man             ipfilter,.man
diff -r cc58f6bd6e9b -r d9980d831b1b usr.bin/kdump/Makefile
--- a/usr.bin/kdump/Makefile    Thu Apr 02 00:00:16 2020 +0000
+++ b/usr.bin/kdump/Makefile    Thu Apr 02 03:32:46 2020 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: Makefile,v 1.32 2016/01/23 21:22:49 christos Exp $
+#      $NetBSD: Makefile,v 1.33 2020/04/02 03:32:46 kamil Exp $
 #      @(#)Makefile    8.1 (Berkeley) 6/6/93
 
 .include <bsd.own.mk>          # for MKDYNAMICROOT & NETBSDSRCDIR
@@ -6,6 +6,8 @@
 USE_FORT?= yes # cryptographic software
 
 PROG=  kdump
+LINKS= ${BINDIR}/kdump ${BINDIR}/ioctlprint
+MAN=   kdump.1 ioctlprint.1
 SRCS=  kdump.c subr.c setemul.c siginfo.c
 .PATH: ${NETBSDSRCDIR}/usr.bin/ktrace
 CLEANFILES+=siginfo.c
diff -r cc58f6bd6e9b -r d9980d831b1b usr.bin/kdump/ioctlprint.1
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/usr.bin/kdump/ioctlprint.1        Thu Apr 02 03:32:46 2020 +0000
@@ -0,0 +1,89 @@
+.\"
+.\" Copyright (c) 2020 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Kamil Rytarowski.
+.\"
+.\" 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.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+.\"
+.Dd April 2, 2020
+.Dt IOCTLPRINT 1
+.Os
+.Sh NAME
+.Nm ioctlprint
+.Nd display descriptive ioctl value
+.Sh SYNOPSIS
+.Nm
+.Op Fl e Ar emulation
+.Op Fl f Ar format
+.Op Ar arg ...
+.Sh DESCRIPTION
+The
+.Nm
+utility displays information about the file ioctl operation pointed to by one or more
+.Ar arg
+arguments.
+.Pp
+The options are as follows:
+.Bl -tag -width Fl
+.It Fl e Ar emulation
+If an emulation of a process is unknown,
+interpret system call maps assuming the named emulation instead of
+default "netbsd".
+.It Fl f Ar format
+The argument is a
+.Xr printf 3
+style format string that allows customization of
+.Nm ioctlprint Ns 's
+output.
+.Pp
+The following conversion characters can be used:
+.Bl -tag -width xxxx
+.It \&%e
+Decoded ioctl string.
+.It \&%n
+Descriptive ioctl operation name.
+.It \&%x
+Hexadecimal ioctl number.
+.It \&%o
+Octal ioctl number.
+.It \&%d or \&%i
+Decimal ioctl number.
+.El
+.Pp
+The default format is:
+.Bd -literal -offset indent
+"%n %e %x\\n"
+.Ed
+.El
+.Pp
+.Sh SEE ALSO
+.Xr kdump 1
+.Xr ktrace 1
+.Sh HISTORY
+The
+.Nm
+command first appeared in
+.Nx 10 .
+.Sh AUTHORS
+.An Kamil Rytarowski Aq Mt kamil%NetBSD.org@localhost
diff -r cc58f6bd6e9b -r d9980d831b1b usr.bin/kdump/kdump.c
--- a/usr.bin/kdump/kdump.c     Thu Apr 02 00:00:16 2020 +0000
+++ b/usr.bin/kdump/kdump.c     Thu Apr 02 03:32:46 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: kdump.c,v 1.132 2019/07/23 01:54:51 nonaka Exp $       */
+/*     $NetBSD: kdump.c,v 1.133 2020/04/02 03:32:46 kamil Exp $        */
 
 /*-
  * Copyright (c) 1988, 1993
@@ -39,7 +39,7 @@
 #if 0
 static char sccsid[] = "@(#)kdump.c    8.4 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: kdump.c,v 1.132 2019/07/23 01:54:51 nonaka Exp $");
+__RCSID("$NetBSD: kdump.c,v 1.133 2020/04/02 03:32:46 kamil Exp $");
 #endif
 #endif /* not lint */
 
@@ -58,6 +58,7 @@
 
 #include <ctype.h>
 #include <err.h>
+#include <inttypes.h>
 #include <signal.h>
 #include <stddef.h>
 #include <stdio.h>
@@ -107,6 +108,9 @@
        "PTRACE_SYSCALL",
 };
 
+static const char default_format[] = { "%n %e %x\n" };
+
+static void    fmtprint(const char *, unsigned long int);
 static int     fread_tail(void *, size_t, size_t);
 static int     dumpheader(struct ktr_header *);
 static int     output_ts(const struct timespec *);
@@ -132,25 +136,33 @@
 int
 main(int argc, char **argv)
 {
+       unsigned long int u;
        unsigned int ktrlen, size;
        int ch;
        void *m;
        int trpoints = 0;
        int trset = 0;
        const char *emul_name = "netbsd";
+       const char *format = default_format;
        int col;
+       int e;
        char *cp;
 
        setprogname(argv[0]);
 
-       if (strcmp(getprogname(), "ioctlname") == 0) {
+       if (strcmp(getprogname(), "ioctlprint") == 0) {
                int i;
 
-               while ((ch = getopt(argc, argv, "e:")) != -1)
+               while ((ch = getopt(argc, argv, "e:f:")) != -1)
                        switch (ch) {
                        case 'e':
                                emul_name = optarg;
                                break;
+                       case 'f':
+                               if (format != default_format)
+                                       errx(1, "Too many formats");
+                               format = optarg;
+                               break;
                        default:
                                usage();
                                break;
@@ -163,8 +175,10 @@
                        usage();
 
                for (i = 0; i < argc; i++) {
-                       ioctldecode(strtoul(argv[i], NULL, 0));
-                       (void)putchar('\n');
+                       u = strtou(argv[i], NULL, 0, 0, ULONG_MAX, &e);
+                       if (e)
+                               errc(1, e, "invalid argument: `%s'", argv[i]);
+                       fmtprint(format, u);
                }
                return 0;
        }
@@ -323,6 +337,60 @@
        return (0);
 }
 
+static void
+fmtprint(const char *fmt, unsigned long int u)
+{
+       const char *name;
+       int c;
+
+       while ((c = *fmt++) != '\0') {
+               switch (c) {
+               default:
+                       putchar(c);
+                       continue;
+               case '\\':
+                       switch (c = *fmt) {
+                               case '\0':
+                               continue;
+                       case 'n':
+                               putchar('\n');
+                               break;
+                       case 't':
+                               putchar('\t');
+                               break;
+                       }
+                       break;
+               case '%':
+                       switch (c = *fmt) {
+                       case '\0':
+                               continue;
+                       case '%':
+                       default:
+                               putchar(c);
+                               break;
+                       case 'e':
+                               ioctldecode(u);
+                               break;
+                       case 'n':
+                               name = ioctlname(u);
+                               printf("%s", name ? name : "(null)");
+                               break;
+                       case 'x':
+                               printf("%#lx", u);
+                               break;
+                       case 'o':
+                               printf("%#lo", u);
+                               break;
+                       case 'd': case 'i':
+                               printf("%ld", u);
+                               break;
+                       }
+                       break;
+               }



Home | Main Index | Thread Index | Old Index