summary refs log tree commit diff
path: root/Completion/Unix/Command/_objdump
blob: ee2f3ea6fdef52bb8c95738096b58ad86e625e7b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
#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