From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_BL_SPAMCOP_NET,RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 4272 invoked from network); 24 Mar 2021 11:18:24 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 24 Mar 2021 11:18:24 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1616584704; b=jde/AXbrqmIyWF3qxAse3VaAbpLet1Jicv1qopKwAcIqWcrtHBazMZsJlO9GOrOX5mSQr41RC8 pu7B4LfZ64yHbFAgTU5y7Lyy8Cnq2u4N55q6rZfETDyRB1WxQNnX/fRb79KkltfwQPa4RF30VE Ewd/0iPIxHlHOy2FaK/lG+C7xKa+qTZp3hlkVEMr9FbuMim/IhSexi87IYcNT8aRnsoGM1K4SK Voh+KtKrcsy7kz9aBLopjd29wFSiXhrvEGf64sX5qXE9Gq4Iw4qrnc1AGwcIWD8bmTgf9JpERo B3r1xq9tA7oJ+iFJmDotNowEcgJOIHuykzRG6PYL7vEQLA==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (snd01013-bg.im.kddi.ne.jp) smtp.remote-ip=27.86.113.29; dmarc=none header.from=kba.biglobe.ne.jp; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1616584704; bh=7xzMa4QZ8p3lsyZ7j0FL1ZTbwK2vZ7BppiRBa6luJhk=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Message-ID:In-Reply-To:To:References:Date:Subject: MIME-Version:Content-Transfer-Encoding:Content-Type:From:DKIM-Signature; b=mtsK7Jz/ypyTmzFmzOliT0kFNiN0jrcxYvol1xqxxnNSkEPrE/EQW7G9hEMCAxypj8O8MNZVPZ +kmJBTST4dxwvPHulHep7SblMmJYYJIimsykZaNStikKSugdh70b0xKxvTfra69p0RShi6U1Wz wyqJpvKh1mbhE1MyO2tM6jT8CGgYpmTmUIAGVD8gzqGtCMWONG37kT3oHrQXdlnbI5U4jSlN3f XGsQ7oVZd6YLuNZOOAX87KeqGLu11FSygLypquN8/pPQcoPE3p56AWDAqF43lQWrgDbkDndMeY IEL7m+d1L3xj4P3dNVbh6CGWbOcSqW01tzDnwdjFlQfvEg==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Message-Id:In-Reply-To:To:References: Date:Subject:Mime-Version:Content-Transfer-Encoding:Content-Type:From: Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=HZZeiegzFv/6+QIdf05tS3eEYfmFRYNaN18BjG5B/Cg=; b=EIrDOS22aBo1lCVdE+dTE96Pxv 2wmZ9FXYiFlkzOg+rM4OoRTrKQf1u0H8sn7AQp8sFh4pUFD4t/zZAb5stepaU5wb8WXgzE3uGvuBQ PUExt2rmbLwcKbJNaYzMdpg+HC5O54oxPWHAtLwslUvst5rRdJgp/zmoTKol7Rks6MWnNpmpWdRhB BveAh1OgwporHMik1NEwysFZryL23/+tSKMmAjXNGnJetlZqjahBJ6i+RRsSBHPC1E1KFiaihpeeL BCurEwJ9MNaXIgaJhC4dZ9LtBwWQmImu7g4DO9LgW8zA4yIioMgSboV8OB6XZOgX0eS3xPibCTem1 ZDhNqTuw==; Received: from authenticated user by zero.zsh.org with local id 1lP1Wk-000EuM-NZ; Wed, 24 Mar 2021 11:18:18 +0000 Authentication-Results: zsh.org; iprev=pass (snd01013-bg.im.kddi.ne.jp) smtp.remote-ip=27.86.113.29; dmarc=none header.from=kba.biglobe.ne.jp; arc=none Received: from snd01013-bg.im.kddi.ne.jp ([27.86.113.29]:19680 helo=omta1015.biglobe.ne.jp) by zero.zsh.org with esmtp id 1lP1WR-000Elb-BF; Wed, 24 Mar 2021 11:18:02 +0000 Received: from mail.biglobe.ne.jp by omta1015.biglobe.ne.jp with ESMTP id <20210324111754552.YQJG.13954.mail.biglobe.ne.jp@biglobe.ne.jp> for ; Wed, 24 Mar 2021 20:17:54 +0900 From: Jun T Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 12.4 \(3445.104.17\)) Subject: Re: PATCH: complete probes for dtrace completion Date: Wed, 24 Mar 2021 20:17:54 +0900 References: <35706-1616539392.227174@49wn.5333.Rj93> To: zsh-workers@zsh.org In-Reply-To: <35706-1616539392.227174@49wn.5333.Rj93> Message-Id: X-Mailer: Apple Mail (2.3445.104.17) X-Biglobe-Sender: takimoto-j@kba.biglobe.ne.jp X-Seq: 48233 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: Archived-At: I tested on macOS. [1] > 2021/03/24 7:43, Oliver Kiddle wrote: >=20 > I have simply filtered them > out. It is not filtered out due to a typo; 'pattern' in ${${...}:#pattern} needs a trailing '*'. On macOS, output of 'dtrace -l' includes lines like 170 syscall #8 entry This just indicates there is no system call with this number. I think these lines should also be filtered out. And dtrace on macOS always issues waring like dtrace: system integrity protection is on, some features will not be = available We need to send it to /dev/null. So I replaced line 82 by ${${${${(f)"$(_call_program dtrace-probes dtrace -l = 2>/dev/null)"}[2,-1]}:#*[:[#]*}... [2] > runtime options (-x) may also differ on macOS. Yes. And I also added options listed in the online document for Solaris 11.4: https://docs.oracle.com/cd/E37838_01/html/E61035/gkzhi.html [3] Option -X does not exist on macOS. The patch below is against the current git master. diff --git a/Completion/Solaris/Command/_dtrace = b/Completion/Solaris/Command/_dtrace index a095589eb..425d0cf66 100644 --- a/Completion/Solaris/Command/_dtrace +++ b/Completion/Solaris/Command/_dtrace @@ -1,41 +1,152 @@ #compdef dtrace -# Synced with Nevada build 160 man pages =20 -_dtrace() { - _arguments -s \ - '-32[generate 32-bit D programs and ELF files]' \ - '-64[generate 64-bit D programs and ELF files]' \ - '-a[claim anonymous tracing state]' \ - '-A[generate driver.conf(4) directives for anonymous tracing]' \ - '-b[set trace buffer size]' \ - '-c[run specified command and exit upon its completion]' \ - '-C[run cpp(1) preprocessor on script files]' \ - '-D[define symbol when invoking preprocessor]' \ - '-e[exit after compiling request but prior to enabling probes]' = \ - '-f[enable or list probes matching the specified function = name]:function: ' \ - '-F[coalesce trace output by function]' \ - '-G[generate an ELF file containing embedded dtrace program]' \ - '-H[print included files when invoking preprocessor]' \ - '-h[Generate a header file]' \ - '-i[enable or list probes matching the specified probe id]' \ - '-I[add include directory to preprocessor search path]:include = dir:_files -/' \ - '-L[Add directory to search path for DTrace libraries]:lib = dir:_files -/' \ - '-l[list probes matching specified criteria]' \ - '-m[enable or list probes matching the specified module = name]:module: ' \ - '-n[enable or list probes matching the specified probe = name]:name: ' \ - '-o[set output file]:output file:_files' \ - '-p[grab specified process-ID and cache its symbol = tables]:pid:_pids' \ - '-P[enable or list probes matching the specified provider = name]:provider: ' \ - '-q[set quiet mode (only output explicitly traced data)]' \ - '-s[enable or list probes according to the specified D script]' = \ - '-S[print D compiler intermediate code]' \ - '-U[undefine symbol when invoking preprocessor]' \ - '-v[set verbose mode (report program stability attributes)]' \ - '-V[report DTrace API version]' \ - '-w[permit destructive actions]' \ - '-x[enable or modify compiler and tracing options]' \ - '-X[specify ISO C conformance settings for preprocessor]:ISO C = conformance:((a\:"ISO plus K&R extensions (default)" c\:"Strictly = conformant ISO C" s\:"K&R C only" t\:"ISO plus K&R extensions"))' \ - '-Z[permit probe descriptions that match zero probes]' -} +local curcontext=3D"$curcontext" ret=3D1 +local -a state line args xopts =20 -_dtrace "$@" +case $OSTYPE in + ^darwin*) + args=3D( + '-32[generate 32-bit D programs and ELF files]' + '-64[generate 64-bit D programs and ELF files]' + '(-A -h -l -V)-G[generate an ELF file containing embedded dtrace = program]' + '-X+[specify ISO C conformance settings for preprocessor]:ISO C = conformance:((a\:"ISO plus K&R extensions (default)" c\:"Strictly = conformant ISO C" s\:"K&R C only" t\:"ISO plus K&R extensions"))' + ) + xopts=3D( + 'errexit[exit on error with specified status code (default = 1)]::status' + 'noresolve[do not perform user address symbol resolution]' + 'uresolve[specify resolution of user addresses]:how:(no symbol = basename absolute)' + ) + ;; + darwin*) + args=3D( + '*-W[wait for the named process to launch]:name' + ) + xopts=3D( + 'amin[set minimum stability attributes]:attribute' + 'arch[set target data model]:arch' + 'argref[ignore additional positional command-line args]' + 'core[create core dump when exiting dtrace]' + 'cpp[run C preprocessor over D programs before compiling]' + 'cpphdrs[print each header file name used]' + 'ctypes[write all CTF definitions into a file]:file:_file' + 'debug[enable DTrace debug messages]' + 'define[add preprocessor define]:var[=3Dval]' + 'disallow_dsym[do not use dSYM files]' + 'droptags[print drop tags to stderr]' + 'empty[allow empty D files]' + 'encoding[set encoding used for output]:encoding:(ascii utf8)' + 'errtags[prefix error message with error tags]' + 'evaltime[when to start instrumenting a new = process]:when:(preinit postinit)' + 'incdir[add include file search directory]:directory:_files -/' + 'ireg[specify size of DIF integer register set]:size' + 'late[set whether references to dynamic translators are allowed]: = :(dynamic static)' + 'libdir[add library search directory]:directory:_files -/' + 'mangled[show mangled symbols for C++/Swift probes]' + 'nolibs[do not include D system libraries]' + 'nojtanalysis[disable jump table analysis]' + 'noerror[do not show error messages]' + 'pgmax[set maximum number of processes DTrace can grab at the = same time]:number' + 'preallocate[preallocate memory in dtrace before running the = script]:size' + 'pspec[interpret ambiguous specifications as probe names]' + 'strip[strip non-loadable sections from D program]' + 'tree[show dtrace compiler parse tree at different = stages]:bitmap:(1 2 4)' + 'tregs[specify size of DIF tuple register set]:size' + 'undef[add #undef into preprocessor predefines]:var name' + 'verbose[show D compiler intermediate code]' + 'version[request specific version of DTrace scripting = language]:version' + 'zdefs[permit probe descriptions that match zero probes]' + 'buflimit[specify threshold percentage for early buffer = switches]:percentage (1-99)' + 'temporal[whether to sort events in time order]:bool:(true = false)' + 'stacksymbols[whether to symbolicate stack symbols]:bool:(true = false)' + ) + ;; +esac + +xopts+=3D( + 'aggrate[rate of aggregation reading]:time' + 'aggsize[aggregation buffer size]:size' + 'ustackframes[number of user stack frames]:scalar' + 'bufpolicy[specify the buffer policy for the principal = buffer]:policy:(fill switch ring)' + 'bufresize[buffer resizing policy]:policy:(auto manual)' + 'bufsize[size of the per-CPU principal buffer]:size' + 'cleanrate[cleaning rate (hz)]:time' + 'cpu[specify the CPU on which to enable tracing]:scalar' + 'defaultargs[allow references to unspecified macro arguments]' + 'destructive[allow destructive actions]' + 'dynvarsize[size of the dynamic variable space]:size' + 'flowindent[turn on flow indentation]' + 'grabanon[claim anonymous state]' + 'jstackframes[number of default stack frames for jstack()]:scalar' + 'jstackstrsize[default string space size for jstack()]:scalar' + 'nspec[number of speculations]:scalar' + 'quiet[set quiet mode]' + 'specsize[size of the speculation buffer]:size' + 'strsize[maximum size of strings]:size' + 'stackframes[maximum number of kernelspace stack frames to unwind = for stack()]:scalar' + 'stackindent[whitespace characters to use when indenting stack() = and ustack() output]:scalar' + 'statusrate[rate of status checking]:time' + 'switchrate[rate of buffer switching]:time' + 'ustackframes[maximum number of userspace stack frames to unwind = for ustack()]:scalar' + 'agghist[whether to show histogram for all aggregations]:bool:(true = false)' + 'aggpack[pack aggregations together]' + 'aggsortkey[sort aggregation by key]' + 'aggsortkeypos[position of aggregate key used for = sorting]:position' + 'aggsortpos[position of the aggregate variable used for = sorting]:position' + 'aggsortrev[sort aggregations in reverse order]' + 'aggzoom[zoom aggregation histogram to the maximum value]' + 'rawbytes[always print tracemem output in hexadecimal]' +) + +_arguments -C -s $args \ + '-a[claim anonymous tracing state]' \ + '(-G -h -l -V)-A[generate driver.conf(4) directives for anonymous = tracing]' \ + '-b+[set trace buffer size]:size' \ + '*-c+[run specified command and exit upon its completion]:command' \ + '-C[run cpp(1) preprocessor on script files]' \ + '*-D+[define symbol when invoking preprocessor]:name' \ + '-e[exit after compiling request but prior to enabling probes]' \ + '-f+[enable or list probes matching the specified function = name]:function:->functions' \ + '-F[coalesce trace output by function]' \ + '-H[print included files when invoking preprocessor]' \ + '(-A -G -l -V)-h[generate a header file]' \ + '*-i+[enable or list probes matching the specified probe = id]:probe-id' \ + '-I+[add include directory to preprocessor search = path]:path:_directories' \ + '(-A -G -h -V)-l[list probes instead of enabling them]' \ + '-L+[add directory to search path for DTrace = libraries]:path:_directories' \ + '*-m+[trace or list probes matching the specified module = name]:module:->modules' \ + '*-n+[trace or list probes matching the specified probe = name]:name:->probes' \ + '-o+[set output file]:output file:_files' \ + '-p+[grab specified process-ID and cache its symbol = tables]:pid:_pids' \ + '*-P+[trace or list probes matching the specified provider = name]:provider:->providers' \ + '-q[set quiet mode (only output explicitly traced data)]' \ + '*-s+[enable or list probes according to the specified D = script]:script file:_files' \ + '-S[print D compiler intermediate code]' \ + '*-U+[undefine symbol when invoking preprocessor]:name' \ + '-v[set verbose mode (report program stability attributes)]' \ + '(-A -G -h -l)-V[report DTrace API version]' \ + '-w[permit destructive actions]' \ + '*-x+[enable or modify compiler and tracing options]: : _values = option $xopts' \ + '-Z[permit probe descriptions that match zero probes]' && return + +if [[ -n $state ]]; then + local -a fields=3D( providers modules functions probes ) + local -a suf=3D( : : : ) + typeset -ga _cache_dtrace_probes + (( $#_cache_dtrace_probes )) || _cache_dtrace_probes=3D( + ${${${${(f)"$(_call_program dtrace-probes dtrace -l = 2>/dev/null)"}[2,-1]}:#*[:[#]*}/(#b) #<-> #([^ ]#) #([^ ]#) #([^ ]#) = ##([^ = ]##)/${match[1]}:${match[3]:+$match[2]}:${match[3]:-$match[2]}:$match[4]} + ) # filtering out those containing : and [, they occur on macos but = may just be unmangled forms and not directly usable + suf[${fields[(i)$state]}]=3D( "${compstate[quote][-1]} " ) # field = matching the state gets a space suffix + while compset -P 1 '*:'; do + shift fields # each already listed field reduces one being possible + done + _tags dtrace-${^fields[1,(r)$state]} + while _tags; do + _requested dtrace-probes expl 'probe name' compadd -S "$suf[4]" - = ${${(M)_cache_dtrace_probes:#((#s)|*:)${IPREFIX}[^:]#(#e)}##*:} && ret=3D0= + _requested dtrace-functions expl 'function' compadd -S "$suf[3]" - = ${${${(M)_cache_dtrace_probes:#((#s)|*:)${IPREFIX}[^:]#:[^:]#(#e)}%:*}##*:= } && ret=3D0 + _requested dtrace-modules expl 'module' compadd -S "$suf[2]" - = ${${${(M)_cache_dtrace_probes:#((#s)|*:)${IPREFIX}[^:]#:[^:]#:[^:]#(#e)}#*= :}%%:*} && ret=3D0 + _requested dtrace-providers expl 'provider' compadd -S "$suf[1]" - = ${_cache_dtrace_probes%%:*} && ret=3D0 + (( ret )) || return 0 + done +fi + +return 1