summaryrefslogtreecommitdiff
path: root/Completion/BSD/Command
diff options
context:
space:
mode:
authorMatthew Martin <phy1729@gmail.com>2020-05-29 22:27:08 -0500
committerMatthew Martin <phy1729@gmail.com>2020-06-01 21:18:25 -0500
commitc479107f70d75ec4522cb9d97c2c178ead4607dd (patch)
tree3ff64e67f147265187d09f9fcd1b0486f5f6b462 /Completion/BSD/Command
parent7ec05332a281ab0229a864bb4ccc4571e4f8ca1b (diff)
downloadzsh-c479107f70d75ec4522cb9d97c2c178ead4607dd.tar.gz
zsh-c479107f70d75ec4522cb9d97c2c178ead4607dd.zip
45940: Add _kdump and _ktrace completers and supporting _ktrace_points type
Diffstat (limited to 'Completion/BSD/Command')
-rw-r--r--Completion/BSD/Command/_kdump84
-rw-r--r--Completion/BSD/Command/_ktrace30
2 files changed, 114 insertions, 0 deletions
diff --git a/Completion/BSD/Command/_kdump b/Completion/BSD/Command/_kdump
new file mode 100644
index 000000000..669260eee
--- /dev/null
+++ b/Completion/BSD/Command/_kdump
@@ -0,0 +1,84 @@
+#compdef kdump
+
+_kdump_pid() {
+ local -a args pids
+ local -A assoc_pids
+
+ if (( $+opt_args[-f] )); then
+ args=(-f $opt_args[-f])
+ fi
+ pids=(${${${(f)"$(_call_program kdump-pids kdump $args)"}:#($'\t'| )*}## #})
+ [[ $OSTYPE == netbsd* ]] && pids=(${pids/ ##[0-9]##/})
+ pids=(${(u)${pids/ /:}%% *})
+ for 1 in $pids; do
+ local pid=${1%%:*} process=${1#*:}
+ if (( $+assoc_pids[$pid] )); then
+ assoc_pids[$pid]+=", $process"
+ else
+ assoc_pids[$pid]=$process
+ fi
+ done
+ pids=()
+ for pid procs in ${(kv)assoc_pids}; do
+ pids+=($pid:$procs)
+ done
+ _describe -t kdump-pids 'kdump pid' pids
+}
+
+local args=(
+ '-d[display numbers in decimal]'
+ '-f+[use the specified file (- for stdin)]:dump file:_files'
+ '-l[loop reading the trace file]'
+ '-m+[maximum I/O bytes to display]:max data bytes:'
+ '-n[supress ad hoc translations]'
+ '-p+[show output only for the specified pid]: :_kdump_pid'
+ '(-E -T)-R[display relative timestamps]'
+ '(-E -R )-T[display absolute timestamps]'
+ '-t[select which tracepoints to display]: :_ktrace_points'
+)
+
+case $OSTYPE; in
+ freebsd*|netbsd*)
+ args+=(
+ '(-R -T)-E[display elapsed timestamps]'
+ )
+ ;|
+ freebsd*|openbsd*)
+ args+=(
+ '-H[display thread identifiers]'
+ )
+ ;|
+ dragonfly*)
+ args+=(
+ '(-c -R)-a[display full human readable output]'
+ '-c[display the CPU the thread is running on]'
+ '-j[use a fixed format output]'
+ )
+ ;;
+ freebsd*)
+ args+=(
+ '-A[display description of the ABI of traced process]'
+ '-r[symbolically display structure members]'
+ '-S[display system call numbers]'
+ '-s[suppress display of I/O data]'
+ )
+ ;;
+ netbsd*)
+ args+=(
+ '-e[interpret system call maps using the specified emulation]:emulation:'
+ '-N[suppress system call name translation]'
+ '-X[Display GIO data in hex and ascii in groups of specified size]:size:(1 2 4 8 16)'
+ '-x[Display GIO data in hex and ascii]
+ '1:dump file:_files'
+ )
+ ;;
+ openbsd*)
+ args+=(
+ # XXX handle -TR
+ '-X[display I/O data in hex and ASCII]'
+ '-x[display I/O data in hex]'
+ )
+ ;;
+esac
+
+_arguments -s -S -A '-*' : $args
diff --git a/Completion/BSD/Command/_ktrace b/Completion/BSD/Command/_ktrace
new file mode 100644
index 000000000..13c11f15d
--- /dev/null
+++ b/Completion/BSD/Command/_ktrace
@@ -0,0 +1,30 @@
+#compdef ktrace
+
+local args=(
+ '-a[append to the trace file]'
+ '(*)-C[disable tracing on all user owned processes or all processes if executed by root]'
+ '-c[clear the trace points]'
+ '-d[trace current decendants]'
+ '-f+[log trace to specified file]:trace file:_files'
+ '(-p *)-g+[enable/disable tracing on specified process group]:pgid:_pgids'
+ '-i[inherit trace flags on future children]'
+ '(-g *)-p+[enable/disable tracing on specified PID]: :_pids'
+ '-t+[select information to include in dump]:trace string:_ktrace_points'
+ '*:: : _normal -p ktrace'
+)
+
+case $OSTYPE; in
+ openbsd*)
+ args+=(
+ '-B[process relocations immediately]'
+ )
+ ;;
+ netbsd*)
+ args+=(
+ '-n[stop tracing if writes to the trace file would block]'
+ '-s[write to the trace file with synchronized I/O]'
+ )
+ ;;
+esac
+
+_arguments -s -S -A '-*' : $args