On Wed, Aug 31, 2022 at 05:44:31PM -0900, Philip Guenther wrote:
> kdump.c will need at least a SYS_recvmmsg line in the big table, and if you
> do a ktrmmsghdr() bit in the kernel a matching decoder will be needed in
> kdump.

Here is a new diff for kdump.
OK?

mbuhl

Index: usr.bin/kdump/kdump.c
===================================================================
RCS file: /cvs/src/usr.bin/kdump/kdump.c,v
retrieving revision 1.149
diff -u -p -r1.149 kdump.c
--- usr.bin/kdump/kdump.c       20 Jul 2022 05:56:36 -0000      1.149
+++ usr.bin/kdump/kdump.c       7 Sep 2022 11:14:19 -0000
@@ -720,6 +720,8 @@ static const formatter scargs[][8] = {
     [SYS_ptrace]       = { Ptracedecode, Ppid_t, Pptr, Pdecint },
     [SYS_recvmsg]      = { Pfd, Pptr, Sendrecvflagsname },
     [SYS_sendmsg]      = { Pfd, Pptr, Sendrecvflagsname },
+    [SYS_recvmmsg]     = { Pfd, Pptr, Pucount, Sendrecvflagsname, Pptr },
+    [SYS_sendmmsg]     = { Pfd, Pptr, Pucount, Sendrecvflagsname },
     [SYS_recvfrom]     = { Pfd, Pptr, Pbigsize, Sendrecvflagsname },
     [SYS_accept]       = { Pfd, Pptr, Pptr },
     [SYS_getpeername]  = { Pfd, Pptr, Pptr },
Index: usr.bin/kdump/ktrstruct.c
===================================================================
RCS file: /cvs/src/usr.bin/kdump/ktrstruct.c,v
retrieving revision 1.29
diff -u -p -r1.29 ktrstruct.c
--- usr.bin/kdump/ktrstruct.c   21 Dec 2020 07:47:37 -0000      1.29
+++ usr.bin/kdump/ktrstruct.c   7 Sep 2022 10:00:23 -0000
@@ -398,6 +398,18 @@ ktrquota(const struct dqblk *quota)
 }
 
 static void
+ktrmmsghdr(const struct mmsghdr *mmsg)
+{
+       printf("struct mmsghdr { msg_hdr = { name=%p, namelen=%u, "
+           "iov=%p, iovlen=%u, control=%p, controllen=%u, flags=",
+           mmsg->msg_hdr.msg_name, mmsg->msg_hdr.msg_namelen,
+           mmsg->msg_hdr.msg_iov, mmsg->msg_hdr.msg_iovlen,
+           mmsg->msg_hdr.msg_control, mmsg->msg_hdr.msg_controllen);
+       sendrecvflagsname(mmsg->msg_hdr.msg_flags);
+       printf(" }, msg_len = %u }\n", mmsg->msg_len);
+}
+
+static void
 ktrmsghdr(const struct msghdr *msg)
 {
        printf("struct msghdr { name=%p, namelen=%u, iov=%p, iovlen=%u,"
@@ -649,6 +661,13 @@ ktrstruct(char *buf, size_t buflen)
                        goto invalid;
                memcpy(&msg, data, datalen);
                ktrmsghdr(&msg);
+       } else if (strcmp(name, "mmsghdr") == 0) {
+               struct mmsghdr mmsg;
+
+               if (datalen != sizeof(mmsg))
+                       goto invalid;
+               memcpy(&mmsg, data, datalen);
+               ktrmmsghdr(&mmsg);
        } else if (strcmp(name, "iovec") == 0) {
                if (datalen % sizeof(struct iovec))
                        goto invalid;

Reply via email to