#compdef otool llvm-otool # local opts args files variant curcontext=$context state state_descr line typeset -A opt_args _arguments \ '-a[display the archive header]' \ '-S[display the contents of the __.SYMDEF file]' \ '-f[display the universal headers]' \ '-h[display the Mach header]' \ '-l[display the load commands]' \ '-L[display names and versions of shared libs that the object file uses]' \ '-D[display just the internal name of shared lib]' \ '-s[display the contents of the specified section]:segment name: :section name: ' \ '-t[display the contents of (__TEXT,__text) section]' \ '-d[display the contents of (__DATA,__data) section]' \ '-o[display the contents of __OBJC segment]' \ '-r[display the relocation entries]' \ '-c[display the argument strings from a core file]' \ '-I[display the indirect symbol table]' \ '-T[display the table of contents for a dynamic shared library]' \ '-R[display the reference table of a dynamic shared library]' \ '-M[display the module table of dymamic shared library]' \ '-H[display the two-level namespace hints table]' \ '-G[display the data in code table]' \ '-C[display the linker optimization hints]' \ '-P[print the info_plist section as strings]' \ '-p[with -t and -v/V: start disassembly from the specified symbol]:symbol name: ' \ '-v[display verbosely (symbolically) when possible]' \ '-V[display disassembled operands symbolically]' \ "-X[don't print leading addresses/headers with disassembly]" \ '-q[use the llvm disassembler (default)]' \ '-mcpu=[use the specified cpu for the llvm disassembler]:target:->targets' \ '-function_offsets[with disassembly, print decimal offset from the last label]' \ '-j[with disassembly, print opcode bytes]' \ "-Q[use otool's disassembler]" \ '-arch[select the specified architecture from a universal file]:arch:(i386 x86_64)' \ '-m[object file names are not assuemd to be in archive(member) syntax]' \ '(- *)--version[print version of otool]' \ '*:file:_object_files' && return 0 case $state in targets) _values "target architecture" "${(z)${(@)${(f)$(_call_program targets ${~words[1]} --version 2>/dev/null)##*Registered Targets:}/ -*}}" ;; esac