summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorguenther <guenther@openbsd.org>2016-01-14 05:27:42 +0000
committerguenther <guenther@openbsd.org>2016-01-14 05:27:42 +0000
commit8449a441fde250afb34b24001069a4c2a7e4821d (patch)
tree64d96cb96a465362c26d6e632f5a84d3f6dde128
parentMove more unused files to attic. (diff)
downloadwireguard-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.h5
-rw-r--r--usr.bin/kdump/ktrstruct.c57
-rw-r--r--usr.bin/kdump/mksubr54
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_