diff options
author | 2016-01-14 05:27:42 +0000 | |
---|---|---|
committer | 2016-01-14 05:27:42 +0000 | |
commit | 8449a441fde250afb34b24001069a4c2a7e4821d (patch) | |
tree | 64d96cb96a465362c26d6e632f5a84d3f6dde128 | |
parent | Move more unused files to attic. (diff) | |
download | wireguard-openbsd-8449a441fde250afb34b24001069a4c2a7e4821d.tar.xz wireguard-openbsd-8449a441fde250afb34b24001069a4c2a7e4821d.zip |
Display struct event more like other structs: show all members and use cpp
define names. Use the mksubr infrastructure for EVFILT_*,
EV_*, and (with some kludging) NOTE_* values. If EV_ERROR is set,
include the errno string for the data member.
Also, do MSG_* parsing on the msg_flags member of struct msghdr.
ok millert@
-rw-r--r-- | usr.bin/kdump/kdump_subr.h | 5 | ||||
-rw-r--r-- | usr.bin/kdump/ktrstruct.c | 57 | ||||
-rw-r--r-- | usr.bin/kdump/mksubr | 54 |
3 files changed, 72 insertions, 44 deletions
diff --git a/usr.bin/kdump/kdump_subr.h b/usr.bin/kdump/kdump_subr.h index 71eec04e909..e6e8b6b6430 100644 --- a/usr.bin/kdump/kdump_subr.h +++ b/usr.bin/kdump/kdump_subr.h @@ -1,4 +1,4 @@ -/* $OpenBSD: kdump_subr.h,v 1.17 2015/10/03 23:52:30 guenther Exp $ */ +/* $OpenBSD: kdump_subr.h,v 1.18 2016/01/14 05:27:42 guenther Exp $ */ /* * Copyright(c) 2006 2006 David Kirchner <dpk@dpk.net> * @@ -92,5 +92,8 @@ void sigsegv_name(int); void sigchld_name(int); void ktracefacname(int); void itimername(int); +void evfiltername(int); +void evflagsname(int); +void evfflagsname(int, int); extern int decimal, fancy, basecol, arg1; diff --git a/usr.bin/kdump/ktrstruct.c b/usr.bin/kdump/ktrstruct.c index 2d5bea890a3..18ae356801e 100644 --- a/usr.bin/kdump/ktrstruct.c +++ b/usr.bin/kdump/ktrstruct.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ktrstruct.c,v 1.15 2016/01/06 17:52:18 tedu Exp $ */ +/* $OpenBSD: ktrstruct.c,v 1.16 2016/01/14 05:27:42 guenther Exp $ */ /*- * Copyright (c) 1988, 1993 @@ -370,9 +370,11 @@ static void ktrmsghdr(const struct msghdr *msg) { printf("struct msghdr { name=%p, namelen=%u, iov=%p, iovlen=%u," - " control=%p, controllen=%u, flags=%d }\n", + " control=%p, controllen=%u, flags=", msg->msg_name, msg->msg_namelen, msg->msg_iov, msg->msg_iovlen, - msg->msg_control, msg->msg_controllen, msg->msg_flags); + msg->msg_control, msg->msg_controllen); + sendrecvflagsname(msg->msg_flags); + printf(" }\n"); } static void @@ -402,48 +404,19 @@ ktrevent(const char *data, int count) if (count > 1) printf(" [%d]", count); for (i = 0; i < count; i++) { - char flags[100]; - const char *filter = ""; - const char *comma = ""; memcpy(&kev, data, sizeof(kev)); data += sizeof(kev); - switch (kev.filter) { - case EVFILT_READ: - filter = "read"; - break; - case EVFILT_WRITE: - filter = "write"; - break; - case EVFILT_VNODE: - filter = "vnode"; - break; - case EVFILT_PROC: - filter = "proc"; - break; - case EVFILT_SIGNAL: - filter = "signal"; - break; - case EVFILT_TIMER: - filter = "timer"; - break; + printf(" { ident=%lu, filter=", kev.ident); + evfiltername(kev.filter); + printf(", flags="); + evflagsname(kev.flags); + printf(", fflags="); + evfflagsname(kev.filter, kev.fflags); + printf(", data=%llu", kev.data); + if ((kev.flags & EV_ERROR) && fancy) { + printf("<\"%s\">", strerror(kev.data)); } -#define KEV_FLAG(value, name) \ - do if (kev.flags & value) { \ - strlcat(flags, comma, sizeof(flags)); \ - strlcat(flags, name, sizeof(flags)); \ - comma = ","; \ - } while (0) - - KEV_FLAG(EV_ADD, "add"); - KEV_FLAG(EV_ENABLE, "enable"); - KEV_FLAG(EV_DISABLE, "disable"); - KEV_FLAG(EV_DELETE, "delete"); - KEV_FLAG(EV_ONESHOT, "oneshot"); - KEV_FLAG(EV_CLEAR, "clear"); - KEV_FLAG(EV_EOF, "EOF"); - KEV_FLAG(EV_ERROR, "error"); - - printf(" { filter=%s flags=%s ident=%lu }", filter, flags, kev.ident); + printf(", udata=%p }", kev.udata); } printf("\n"); } diff --git a/usr.bin/kdump/mksubr b/usr.bin/kdump/mksubr index 709e464d48d..4ab95448402 100644 --- a/usr.bin/kdump/mksubr +++ b/usr.bin/kdump/mksubr @@ -1,5 +1,5 @@ #!/bin/sh -# $OpenBSD: mksubr,v 1.28 2015/05/17 01:22:01 deraadt Exp $ +# $OpenBSD: mksubr,v 1.29 2016/01/14 05:27:42 guenther Exp $ # # Copyright (c) 2006 David Kirchner <dpk@dpk.net> # @@ -261,6 +261,7 @@ _EOF_ cat <<_EOF_ #include <stdio.h> #include <sys/param.h> +#include <sys/event.h> #include <sys/fcntl.h> #include <sys/stat.h> #include <sys/unistd.h> @@ -353,8 +354,12 @@ auto_if_type "sockfamilyname" "AF_[[:alnum:]]+[[:space:]]+" "sys/socket.h" auto_if_type "sockipprotoname" "IPPROTO_[[:alnum:]]+[[:space:]]+" "netinet/in.h" auto_switch_type "sockoptname" "SO_[A-Z]+[[:space:]]+0x[0-9]+" "sys/socket.h" #auto_switch_type "ptraceopname" "PT_[[:alnum:]_]+[[:space:]]+[0-9]+" "sys/ptrace.h" +# exclude KTRFAC_MASK auto_orz_type "ktracefacname" "KTRFAC_[^M][[:alnum:]_]+" "sys/ktrace.h" auto_switch_type "itimername" "ITIMER_[[:alnum:]_]+" "sys/time.h" +auto_switch_type "evfiltername" "EVFILT_[[:alnum:]_]+[[:space:]]+[(]" "sys/event.h" +# exclude EV_{SYSFLAGS,FLAG1} +auto_orz_type "evflagsname" "EV_[^S][A-Z]+[[:space:]]+0x" "sys/event.h" cat <<_EOF_ /* @@ -498,4 +503,51 @@ quotactlcmdname(int cmd) } } +/* + * AUTO - Special + * + * kevent() NOTE_* interpretation depends on the filter type + */ +void +evfflagsname (int filter, int fflags) +{ + int or = 0; + + if (fflags == 0) { + printf("0<>"); + return; + } + printf("%#x<", fflags); + switch (filter) { + case EVFILT_READ: + case EVFILT_WRITE: + if_print_or(fflags, NOTE_LOWAT, or); + if_print_or(fflags, NOTE_EOF, or); + break; + case EVFILT_VNODE: +_EOF_ + egrep "^#[[:space:]]*define[[:space:]]+NOTE_.[^O][A-Z]+[[:space:]]+0x[01248]{4}[^[:alnum:]]" \ + $include_dir/sys/event.h | \ + awk '{ for (i = 1; i <= NF; i++) \ + if ($i ~ /define/) \ + break; \ + ++i; \ + printf "\t\tif_print_or(fflags, %s, or);\n", $i }' +cat <<_EOF_ + break; + case EVFILT_PROC: +_EOF_ + egrep "^#[[:space:]]*define[[:space:]]+NOTE_[^S][A-Z]+[[:space:]]+0x[01248]{8}" \ + $include_dir/sys/event.h | \ + awk '{ for (i = 1; i <= NF; i++) \ + if ($i ~ /define/) \ + break; \ + ++i; \ + printf "\t\tif_print_or(fflags, %s, or);\n", $i }' +cat <<_EOF_ + break; + } + printf(">"); +} + _EOF_ |