mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			119 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			119 lines
		
	
	
	
		
			4.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef valgrind -value-,VALGRIND_OPTS,-default-
 | |
| 
 | |
| local curcontext="$curcontext" state line
 | |
| local -a cmd common common_mem_null \
 | |
|   args args_{addrcheck,memcheck,cachegrind,helgrind,lackey,massif,none}
 | |
| 
 | |
| cmd=(
 | |
|   '1:command name:_command_names -e'
 | |
|   '*::args :_normal'
 | |
| )
 | |
| 
 | |
| if [[ $service = *_OPTS* ]]; then
 | |
|   compset -q
 | |
|   words=( fake "$words[@]" )
 | |
|   (( CURRENT++ ))
 | |
|   cmd=()
 | |
| fi
 | |
| 
 | |
| common=(
 | |
|   '--alignment=-[set minimum alignment of allocations]:number'
 | |
| )
 | |
| 
 | |
| common_mem_null=(
 | |
|   '--xml=-[output everything in XML]:enable:(yes no)'
 | |
|   '--xml-user-comment=-[copy specified string verbatim to XML output]:string'
 | |
| )
 | |
| 
 | |
| args_addrcheck=(
 | |
|   $common
 | |
|   $common_mem_null
 | |
|   '--partial-loads-ok=-:enable:(yes no)'
 | |
|   '--freelist-vol=-[volume of freed blocks queue]:blocks'
 | |
|   '--leak-check=-[search for memory leaks at exit]:enable:(yes no)'
 | |
|   '--leak-resolution=-[how much bt merging in leak check]:(low med high)'
 | |
|   '--show-reachable=-[show reachable blocks in leak check]:enable:(yes no)'
 | |
|   '--workaround-gcc296-bugs=-:enable:(yes no)'
 | |
| )
 | |
| 
 | |
| args_memcheck=(
 | |
|   $args_addrcheck
 | |
| )
 | |
| 
 | |
| args_cachegrind=(
 | |
|   '--I1=-[set I1 cache manually]:size,assoc,line_size'
 | |
|   '--D1=-[set D1 cache manually]:size,assoc,line_size'
 | |
|   '--L2=-[set L2 cache manually]:size,assoc,line_size'
 | |
| )
 | |
| 
 | |
| args_helgrind=(
 | |
|   $common
 | |
|   '--private-stacks=-[assume thread stacks are used privately]:enable:(yes no)'
 | |
|   '--show-last-access=-[show location of last word access on error]:locations:(no some all)'
 | |
| )
 | |
| 
 | |
| args_lackey=(
 | |
|   '--fnname=-[count calls to specified name]:name'
 | |
|   '--detailed-counts=-[count loads, stores and alu ops]:enable:(yes no)'
 | |
| )
 | |
| 
 | |
| args_massif=(
 | |
|   $common
 | |
|   '--heap=-[profile heap blocks]:enable:(yes no)'
 | |
|   '--heap-admin=-[specify average admin bytes per heap block]:bytes'
 | |
|   '--stacks=-[enable profile stacks]:enable:(yes no)'
 | |
|   '--depth=-[depth of contexts]:depth'
 | |
|   '--alloc-fn=-[specify alloc function]:function'
 | |
|   '--format=-[specify format of textual output]:format:(text html)'
 | |
| )
 | |
| 
 | |
| args_none=(
 | |
|   $common_mem_null
 | |
| )
 | |
| 
 | |
| args="args_${${words[(r)--tool=*]#*=}:-memcheck}"
 | |
| 
 | |
| _arguments -C ${(P)args} $cmd \
 | |
|   '--tool=-[specify valgrind tool]:valgrind tool:->tools' \
 | |
|   '(-h --help)'{-h,--help}'[show help information]' \
 | |
|   '--help-debug[show help info including debugging options]' \
 | |
|   '--version[show version]' \
 | |
|   '(-q --quiet)'{-q,--quiet}'[run silently; only print error msgs]' \
 | |
|   '(-v --verbose)'{-v,--verbose}'[be more verbose]' \
 | |
|   '--trace-children=-[valgrind-ise child processes]:enable:(yes no)' \
 | |
|   '--track-fds=-[track open file descriptors]:enable:(yes no)' \
 | |
|   '--time-stamp=-[add timestamps to log messages]:enable:(yes no)' \
 | |
|   '--log-fd=-[log messages to specified file descriptor]:file descriptor:_file_descriptors' \
 | |
|   '--log-file=-[log messages to specified file with pid appended]:file:_files' \
 | |
|   '--log-file-exactly=-[log messages to specified file]:file:_files' \
 | |
|   '--log-file-qualifier=-[log messages to filename given by specified environment variable]:variable:_parameters -g "*scalar*"' \
 | |
|   '--log-socket=-[log messages to socket]:ipaddr\:port' \
 | |
|   '--run-libc-freeres=-[free up glibc memory at exit]:enable:(yes no)' \
 | |
|   '--sim-hints=-[enable hint]:hint:(lax-ioctls enable-outer)' \
 | |
|   '--show-emwarns=-[show warnings about emulation limits]:enable:(yes no)' \
 | |
|   '--kernel-variant=-[handle non-standard kernel variants]:kernel variant:_values -s , kernel\ variant bproc' \
 | |
|   '--demangle=-[automatically demangle C++ names]:enable:(yes no)' \
 | |
|   '--num-callers=-[specify no of callers to show in stack traces]:number' \
 | |
|   '--error-limit=-[stop showing new errors if too many]:enable:(yes no)' \
 | |
|   '--show-below-main=-[continue stack traces below main()]:enable:(yes no)' \
 | |
|   '--suppressions=-[suppress errors described in specified file]:file:_files' \
 | |
|   '--gen-suppressions=-[print suppressions for errors detected]:enable:(yes no)' \
 | |
|   '--db-attach=-[start debugger when errors detected]:enable:(yes no)' \
 | |
|   '--db-command=-[specify command to start debugger]:command:_command_names -e' \
 | |
|   '--input-fd=-[specify file descriptor for input]:file descriptor:_file_descriptors' \
 | |
|   '--max-stackframe=-[assume stack switch for SP changes larger than specified number of bytes]:bytes' \
 | |
|   && return
 | |
| 
 | |
| typeset -a tools
 | |
| 
 | |
| if [[ -n "$state" ]]; then
 | |
|   # `valgrind --tool=` no longer works.
 | |
|   # The method below is even more hackish, but the only one I could find.
 | |
|   # Basically uses debug output to find out the directory where the tools are
 | |
|   # present and lists all executables in that directory.
 | |
|   # Hope the program provides a neater interface some day!
 | |
|   tools=(${${${(M)${(f)"$(_call_program tools valgrind --tool=something -d 2> /dev/null)"}:#*launcher launching *something}##*launcher launching }%%something}*(*:t))
 | |
|   _wanted tools exl 'valgrind tool' compadd $tools && return
 | |
| fi
 | |
| 
 | |
| return 1
 |