mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 18:10:56 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			175 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| #compdef objdump eu-objdump llvm-objdump
 | |
| 
 | |
| local opts args files variant curcontext=$context state state_descr line ret=1
 | |
| typeset -A opt_args
 | |
| 
 | |
| files='*:object file:_object_files'
 | |
| 
 | |
| _pick_variant -r variant binutils=GNU elfutils=elfutils llvm=LLVM unix --version
 | |
| 
 | |
| opts=( -s -S )	# options for _arguments
 | |
| args=(
 | |
|   "(-d --disassemble)"{-d,--disassemble}"[Display assembler code of executable sections]"
 | |
|   "(-r --reloc)"{-r,--reloc}"[Display relocation information]"
 | |
|   "(-s --full-contents)"{-s,--full-contents}"[Display the full contents of all sections requested]"
 | |
|   "*"{-j+,--section=}"[Only display information for section]:section:(.bss .data .dynamic .dynsym .got .interp .shstrtab .symtab .text)"
 | |
| )
 | |
| 
 | |
| case $variant in
 | |
|   binutils)
 | |
|     args+=(
 | |
|     "(-a --archive-headers)"{-a,--archive-headers}"[Display archive header information]"
 | |
|     "(-f --file-headers)"{-f,--file-headers}"[Display the contents of the overall file header]"
 | |
|     "(-p --private-headers)"{-p,--private-headers}"[Display object format specific file header contents]"
 | |
|     "*"{-P,--private=}"[Display object format specific contents]:option"
 | |
|     "(-h --section-headers --headers)"{-h,--section-headers,--headers}"[Display the contents of the section headers]"
 | |
|     "(-x --all-headers)"{-x,--all-headers}"[Display the contents of all headers]"
 | |
|     "(-D --disassemble-all)"{-D,--disassemble-all}"[Display assembler contents of all sections]"
 | |
|     "(-S --source)"{-S,--source}"[Intermix source code with disassembly]"
 | |
|     "(-g --debugging)"{-g,--debugging}"[Display debug information in object file]"
 | |
|     "(-e --debugging-tags)"{-e,--debugging-tags}"[Display debug information using ctags style]"
 | |
|     "(-G --stabs)"{-G,--stabs}"[Display (in raw form) any STABS info in the file]"
 | |
| 
 | |
|     "*-W-[Display DWARF info in the file]::dwarf section:->short_dwarf_names"
 | |
|     "*--dwarf=-[Display DWARF info in the file]::dwarf section:->dwarf_names"
 | |
| 
 | |
|     "(-t --syms)"{-t,--syms}"[Display the contents of the symbol table(s)]"
 | |
|     "(-T --dynamic-syms)"{-T,--dynamic-syms}"[Display the contents of the dynamic symbol table]"
 | |
|     "(-R --dynamic-reloc)"{-R,--dynamic-reloc}"[Display the dynamic relocation entries in the file]"
 | |
|     #@<file>                  Read options from <file>
 | |
| 
 | |
|     "(- *)"{-v,--version}"[Display this program's version number]"
 | |
|     "(- *)"{-i,--info}"[List object formats and architectures supported]"
 | |
|     "(- *)"{-H,--help}"[Display this information]"
 | |
|   
 | |
|     "(-b --target)"{-b+,--target=}"[Specify the target object format]:bfdname:->bfdname"
 | |
|     "(-m --architecture)"{-m+,--architecture=}"[Specify the target architecture]:machine:->machine"
 | |
|     "*"{-M+,--disassembler-options=}"[Pass text OPT on to the disassembler]:opt:->disassembler_options"
 | |
| 
 | |
|     "(-E --endian)-E+[Assume endianess when disassembling]:endianess:((B\:\"Assume big endian format when disassembling\" L\:\"Assume little endian format when disassembling\"))"
 | |
|     "(-E --endian)--endian=[Assume endianess when disassembling]:endianess:((big\:\"Assume big endian format when disassembling\" little\:\"Assume little endian format when disassembling\"))"
 | |
| 
 | |
|     "--file-start-context[Include context from start of file (with -S)]"
 | |
|     "*"{-I+,--include=}"[Add directory to search list for source files]:directory:_files -/"
 | |
|     "(-l --line-numbers)"{-l,--line-numbers}"[Include line numbers and filenames in output]"
 | |
|     "(-F --file-offsets)"{-F,--file-offsets}"[Include file offsets when displaying information]"
 | |
|     "(-C --demangle)-C[Decode mangled/processed symbol names]"
 | |
|     "(-C --demangle)--demangle=-[Decode mangled/processed symbol names]::style:(auto gnu lucid arm hp edg gnu-v3 java gnat)"
 | |
|     "(-w --wide)"{-w,--wide}"[Format output for more than 80 columns]"
 | |
|     "(-z --disassemble-zeroes)"{-z,--disassemble-zeroes}"[Do not skip blocks of zeroes when disassembling]"
 | |
| 
 | |
|     "--start-address=[Only process data whose address is >= ADDR]:addr"
 | |
|     "--stop-address=[Only process data whose address is <= ADDR]:addr"
 | |
|     "--prefix-addresses[Print complete address alongside disassembly]"
 | |
|     "(--show-raw-insn --no-show-raw-insn)"--{,no-}show-raw-insn"[Display hex alongside symbolic disassembly]"
 | |
|     "--insn-width=[Display WIDTH bytes on a single line for -d]:width"
 | |
|     "--adjust-vma=[Add offset to all displayed section addresses]:offset"
 | |
|     "--special-syms[Include special symbols in symbol dumps]"
 | |
|     "--prefix=[Add prefix to absolute paths for -S]:prefix"
 | |
|     "--prefix-strip=[Strip initial directory names for -S]:level"
 | |
|     "--dwarf-depth=[Do not display DIEs at depth N or greater]:n"
 | |
|     "--dwarf-start=[Display DIEs starting with N, at the same depth or deeper]:n"
 | |
|     "--dwarf-check[Make additional dwarf internal consistency checks]"
 | |
|     )
 | |
|   ;;
 | |
|   elfutils)
 | |
|     args+=(
 | |
|       "--color=-[Colorize the output]::when:(always auto never)"
 | |
|       "(- *)"{-\?,--help}"[Display help]"
 | |
|       "(- *)--usage[Display usage]"
 | |
|       "(- *)"{-V,--version}"[Display program version]"
 | |
| 
 | |
|     )
 | |
|   ;;
 | |
|   llvm)
 | |
|     opts=( -S )	# no option stacking
 | |
|     args=(	# start over from an empty array
 | |
|       '-aarch64-neon-syntax=[chose style of NEON code (AArch64)]:style:(generic apple)'
 | |
|       '-arch=[w -macho: select arch from a fat binary]:arch:(i386 x86_64)'
 | |
|       '-arch-name=[specify target arch to disassemble for]:arch:->llvm_targets'
 | |
|       '-archive-headers[w -macho: print archive headers]'
 | |
|       '-archive-member-offsets[w -macho -archive-headers: print offset to each archive member]'
 | |
|       '-bind[display Mach-O binding info]'
 | |
|       '-color[use colored syntax highlighting]'
 | |
|       '-data-in-code[w -macho: print data in code table]'
 | |
|       "-dis-symname=[w -macho: disassemble just the specfied symbol's instructions]"
 | |
|       '(-disassemble -d)'{-disassemble,-d}'[display assembler mnemonics for machine instructions]'
 | |
|       '(-disassemble-all -D)'{-disassemble-all,-D}'[disassemble all instruction sections]'
 | |
|       '-dsym=[w -macho -g: use the specified .dSYM file for debug info]:dsym file:_files'
 | |
|       '-dwarf=[dump of dwarf debug section]:section:(frames)'
 | |
|       "-dyld-id[w -macho: print the shared library's id for dylib Mach-O file]"
 | |
|       '-dylibs-used[w -macho: print the shared libraries used for linked Mach-O files]'
 | |
|       '-exports-trie[display Mach-O exported symbols]'
 | |
|       '-fault-map-section[display contents of faultmap section]'
 | |
|       '-filter-print-funcs=[only print IR for the specified functions]:function names'
 | |
|       '-full-leading-addr[w -macho: print full leading address]'
 | |
|       '-g[w -macho: print line information from debug info if available]'
 | |
|       '-indirect-symbols[w -macho: print indirect symbol table]'
 | |
|       '-info-plist[w -macho: print the info plist section]'
 | |
|       '-lazy-bind[display Mach-O lazy binding info]'
 | |
|       '(-line-numbers -l)'{-line-numbers,-l}'[display source line numbers with disassembly]'
 | |
|       '-link-opt-hints[w -macho: print the linker optimization hints]'
 | |
|       '(-macho -m)'{-macho,-m}'[use Mach-O specific object file parser]'
 | |
|       '*-mattr=[target specific attributes]:attributes'
 | |
|       '-mcpu=[specify target cpu type]:cpu type'
 | |
|       '-no-leading-addr[w -macho: print no leading address]'
 | |
|       '-no-leading-headers[print no leading headers]'
 | |
|       '-no-show-raw-insn[do not print instruction bytes when disassembling]'
 | |
|       '-no-symbolic-operands[w -macho: do not print operands symbolically when disassembling]'
 | |
|       '-non-verbose[w -macho: print info in non-verbose form]'
 | |
|       '-objc-meta-data[w -macho: print Objective-C runtime meta data]'
 | |
|       '-print-after-all[print IR after each pass]'
 | |
|       '-print-before-all[print IR before each pass]'
 | |
|       '-print-imm-hex[use hex format for immediate values]'
 | |
|       '-private-header[display only the first format specific file header]'
 | |
|       '(-private-headers -p)'{-private-headers,-p}'[display format specific file headers]'
 | |
|       '-r[display the relocation entries in the file]'
 | |
|       '-raw-clang-ast[dump raw binary contents of clang AST section]'
 | |
|       '-rebase[display Mach-O rebasing info]'
 | |
|       '-rng-seed=[seed for the random number generator]:seed'
 | |
|       '-s[display contents of each section]'
 | |
|       '*'{-section=,-j}'[operate on the specified section only]:section'
 | |
|       '(-section-headers -h)'{-section-headers,-h}'[display summaries of the headers for each section]'
 | |
|       '(-source -S)'{-source,-S}'[display source inlined with disassembly]'
 | |
|       '-start-address=[start disassembly at the specified address]:address'
 | |
|       '-stop-address=[stop disassembly at the specified address]:address'
 | |
|       '-t[display the symbol talbe]'
 | |
|       '-time-passes[time each pass, print elapsed time on exit]'
 | |
|       '-triple=[target triple to disassemble for]:triple'
 | |
|       '-universal-headers[w -macho: print Mach-O universal headers]'
 | |
|       '-verify-dom-info[verify dominator info (time consuming)]'
 | |
|       '-unwind-info[display unwind information]'
 | |
|       '-weak-bind[display Mach-O weak binding info]'
 | |
|       '-x86-asm-syntax=[chose style of assembler code (x86)]:style:(att intel)'
 | |
|       '(- *)-help[display available options]'
 | |
|       '(- *)-help-list[display list of available options]'
 | |
|       '(- *)-version[display version of objdump]'
 | |
|     )
 | |
|   ;;
 | |
| esac
 | |
| 
 | |
| _arguments $opts -C : "$args[@]" $files && ret=0
 | |
| 
 | |
| case "$state" in
 | |
|   short_dwarf_names)
 | |
|     _values -s "" "dwarf section" "l[rawline]" "L[decodedline]" "i[info]" "a[abbrev]" "p[pubnames]" "r[aranges]" "m[macro]" "f[frames]" "F[frames-interp]" "s[str]" "o[loc]" "R[Ranges]" "t[pubtypes]" "U[trace_info]" "u[trace_abbrev]" "g[gdb_index]" "T[trace_aranges]" "A[addr]" "c[cu_index]" "k[links]" "K[follow-links]" && ret=0
 | |
|   ;;
 | |
|   dwarf_names)
 | |
|     _values -s , "dwarf section" rawline decodedline info abbrev pubnames aranges macro frames frames-interp str loc Ranges pubtypes gdb_index trace_info trace_abbrev trace_aranges addr cu_index links follow-links && ret=0
 | |
|   ;;
 | |
|   bfdname)
 | |
|     _values "object format" "${(z)${(@M)${(f)$(_call_program targets objdump --help)}##* supported targets:*}##*: }" && ret=0
 | |
|   ;;
 | |
|   machine)
 | |
|     _values "machine architecture" "${(@)${(z)${(@M)${(f)$(_call_program targets objdump --help)}##* supported architectures:*}##*: }//:/\\:}" && ret=0
 | |
|   ;;
 | |
|   disassembler_options)
 | |
|     _values -s , "disassembler options" "${(@)${(@)${(@M)${(f)${(ps.-M switch.)$(_call_program targets objdump --help)}[2]}:#  [^ ]*}#  }%% *}" && ret=0
 | |
|   ;;
 | |
|   llvm_targets)
 | |
|     _values "target architecture" "${(z)${(@)${(f)$(_call_program targets
 | |
| 	    ${~words[1]} -version)##*Registered Targets:}/ -*}}"
 | |
|   ;;
 | |
| esac
 | |
| 
 | |
| return ret
 |