When displaying fcntl() arguments, kdump knows that fcntl commands F_GETFD, F_GETFL, and F_ISATTY don't take an additional argument. That's also true of F_GETOWN, so add it to that list.
This diff would be three lines, but I think it's cleaner to figure out whether an argument should be displayed in the main 'switch' in fcntlcmdname() instead of making the later 'if' conditional more complicated. With this, adding more "no argument" fnctl commands becomes one liner diffs. Example output with this: 34617 fsetown CALL fcntl(3,F_GETOWN) 34617 fsetown RET fcntl -34617/0xffffffffffff78c7 (It would be nice if we displayed the fnctl command's additional argument in the prefered form for its type, such as just decimal for pid/pgid args, and ditto for return values, but that requires more thought...) ok? Philip Guenther Index: usr.bin/kdump/mksubr =================================================================== RCS file: /data/src/openbsd/src/usr.bin/kdump/mksubr,v retrieving revision 1.32 diff -u -p -r1.32 mksubr --- usr.bin/kdump/mksubr 28 Apr 2017 13:53:05 -0000 1.32 +++ usr.bin/kdump/mksubr 27 Nov 2017 17:35:03 -0000 @@ -375,18 +375,25 @@ cat <<_EOF_ void fcntlcmdname (int arg) { + int noarg = 0; + switch (arg1) { _EOF_ egrep "^#[[:space:]]*define[[:space:]]+F_[A-Z_]+[[:space:]]+[0-9]+[[:space:]]*" \ $include_dir/sys/fcntl.h | \ - awk 'BEGIN { o=0 } { for (i = 1; i <= NF; i++) \ + awk 'BEGIN { o=0; \ + noarg["F_GETFD"] = 1; \ + noarg["F_GETFL"] = 1; \ + noarg["F_ISATTY"] = 1; \ + noarg["F_GETOWN"] = 1; \ + }{ for (i = 1; i <= NF; i++) \ if ($i ~ /define/) \ break; \ ++i; \ - if (o <= $(i+1)) \ - printf "\tcase %s:\n\t\t(void)printf(\"%s\");\n\t\tbreak;\n", $i, $i; \ - else \ + if (o > $(i+1)) \ exit; \ + printf "\tcase %s:\n\t\t(void)printf(\"%s\");%s\n\t\tbreak;\n", $i, $i, \ + noarg[$i] ? "\n\t\tnoarg = 1;" : ""; \ o = $(i+1) }' cat <<_EOF_ default: /* Should not reach */ @@ -404,7 +411,7 @@ cat <<_EOF_ } else if (arg1 == F_SETFL) { (void)putchar(','); doflagsname(arg, 0); - } else if (!fancy || (arg1 != F_GETFD && arg1 != F_GETFL && arg1 != F_ISATTY)) + } else if (!fancy || !noarg) (void)printf(",%#x", arg); }