#compdef elfdump
local -a args
args=(
'-c[dump section header information]'
'-d[dump .dynamic section]'
'-e[dump file header]'
'-G[dump .got (global offset table) section]'
'-h[dump .hash section]'
'-i[dump .interp (interpreter) section]'
'-n[dump .note sections]'
'(-w)-p[dump program headers]'
'-r[dump relocation sections]'
'-s[dump symbol table sections]'
'(-p)-w[write contents of matched sections to file]:file:_files'
)
case $OSTYPE in
solaris*)
args+=(
'-g[dump .group section]'
'-H[dump .SUNW_cap (capabilities) section]'
'-m[dump .SUNW_move section]'
'-S[dump symbol table sections sorted according to symbol sort sections]'
'-u[dump stack unwind/exceptions sections]'
'-v[dump .SUNW_version (versioning) sections]'
'-y[dump .SUNW_syminfo (symbol bindings) section]'
'-I[match sections by index]:index or range'
"-N[match sections by name]:section"
'-T[match sections by type]:type'
'-C[demangle C++ symbol names]'
'-k[calculate ELF checksum]'
'-l[show long section names without truncation]'
'-O[specify osabi to apply]:osabi'
'-P[use alternative section header]'
"*:elf file:_object_files"
)
;;
freebsd*) args+=( '-a[dump all information]' ) ;;
esac
_arguments -s $args