From c479107f70d75ec4522cb9d97c2c178ead4607dd Mon Sep 17 00:00:00 2001 From: Matthew Martin Date: Fri, 29 May 2020 22:27:08 -0500 Subject: 45940: Add _kdump and _ktrace completers and supporting _ktrace_points type --- Completion/BSD/Command/_kdump | 84 ++++++++++++++++++++++++++++++++++++++ Completion/BSD/Command/_ktrace | 30 ++++++++++++++ Completion/BSD/Type/_ktrace_points | 50 +++++++++++++++++++++++ 3 files changed, 164 insertions(+) create mode 100644 Completion/BSD/Command/_kdump create mode 100644 Completion/BSD/Command/_ktrace create mode 100644 Completion/BSD/Type/_ktrace_points (limited to 'Completion/BSD') 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 diff --git a/Completion/BSD/Type/_ktrace_points b/Completion/BSD/Type/_ktrace_points new file mode 100644 index 000000000..1993c8d7b --- /dev/null +++ b/Completion/BSD/Type/_ktrace_points @@ -0,0 +1,50 @@ +#autoload + +local points=( + 'c[trace system calls]' + 'i[trace I/O]' + 'n[trace namei translations]' + 's[trace signal processing]' + 'u[trace user data]' + '+[trace the default points]' +) + +case $OSTYPE in + dragonfly*|freebsd*|netbsd*) + points+=( + 'w[context switches]' + ) + ;| + freebsd*|openbsd*) + points+=( + 't[trace various structures]' + ) + ;| + freebsd*) + points+=( + 'f[trace page faults]' + 'p[trace capability check failures]' + 'y[trace sysctl(3) requests]' + ) + ;; + netbsd*) + points+=( + 'A[trace all tracepoints]' + 'a[trace exec arguments]' + 'e[trace emulation changes]' + 'f[trace open file descriptors after exec]' + 'S[trace MIB access (sysctl)]' + 'v[trace exec environment]' + '-[do not trace following trace points]' + ) + ;; + openbsd*) + points+=( + 'p[trace violation of pledge(2) restrictions]' + 'x[trace argument vector in execve(2)]' + 'X[trace environment in execve(2)]' + ) + ;; +easc + +_values -s '' 'ktrace point' $points -- cgit 1.4.1