1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-01-01 05:16:05 +01:00

45940: Add _kdump and _ktrace completers and supporting _ktrace_points type

This commit is contained in:
Matthew Martin 2020-05-29 22:27:08 -05:00
parent 7ec05332a2
commit c479107f70
4 changed files with 169 additions and 0 deletions

View file

@ -1,5 +1,10 @@
2020-06-01 Matthew Martin <phy1729@gmail.com>
* 45940: Completion/BSD/Command/_kdump,
Completion/BSD/Command/_ktrace,
Completion/BSD/Type/_ktrace_points: Add _kdump and _ktrace
completers and supporting _ktrace_points type.
* 45939: Completion/Linux/Command/_ionice,
Completion/Unix/Command/_lsof, Completion/Unix/Command/_pgrep,
Completion/Unix/Command/_renice, Completion/Unix/Type/_pgids:

View file

@ -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

View file

@ -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

View file

@ -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