about summary refs log tree commit diff
path: root/Completion/Unix/Command/_nm
blob: 963b43f2735aa9eb76e4bf6dc01c23df54b696ab (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
#compdef nm eu-nm

local args files variant

files="*:object file:_object_files"
args=(
  '(-A -o --print-file-name)'{-A,-o,--print-file-name}'[print name of input file on each line]'
  '(--demangle)-C[decode symbol names]'
  '(-D --dynamic)'{-D,--dynamic}'[display dynamic symbols instead of normal ones]'
  '(-g --extern-only)'{-g,--extern-only}'[display only global symbols]'
  '(-t --radix -o -x)'{-t,--radix}'[specify radix for numeric values]:radix:((d\:decimal o\:octal x\:hexadecimal))'
)

if _pick_variant -r variant binutils=GNU elftoolchain=elftoolchain elfutils=elfutils unix -V; then
  compset -P '@' && files='*:options file:_files'
  args+=(
    '(- *)--help[display help information]'
    '(- *)--version[display version information]'
    '(-f --format -P --portability)-B[same as --format=bsd]'
    '(-C --no-demangle)--demangle=-[decode symbol names]::style:(auto gnu lucid arm hp edg gnu-v3 java gnat)'
    "(-C --demangle)--no-demangle[don't decode symbol names]"
    '(-u --undefined-only)--defined-only[display only defined symbols]'
    '(-f --format -P)--format=[specify output format]:format:(bsd sysv posix)'
    '(-n --numeric-sort -p --no-sort --size-sort -v)'{-n,--numeric-sort}'[sort symbols numerically by address]'
    '(-p --no-sort -n --numeric-sort -r -P --reverse-sort --size-sort)'{-p,--no-sort}'[do not sort symbols]'
    '(-P --portability -B -f --format)'{-P,--portability}'[same as --format=posix]'
    '(-r --reverse-sort -p --no-sort --size-sort -v)'{-r,--reverse-sort}'[reverse sort order]'
    '(-u --undefined-only --defined-only)'{-u,--undefined-only}'[display only undefined symbols]'
    '(-a --debug-syms)'{-a,--debug-syms}'[display debugger-only symbols]'
    '(-S --print-size)'{-S,--print-size}'[print size of defined symbols]'
    '(-s --print-armap)'{-s,--print-armap}'[include index for symbols from archive members]'
    '(-p --no-sort -n --numeric-sort -r -v)--size-sort[sort symbols by size]'
  )
  case $variant in
    elftoolchain|binutils)
      args+=(
	'(-l --line-numbers)'{-l,--line-numbers}'[display source file and line numbers from debug information]'
      )
    ;|
    elftoolchain)
      args=( ${args:#*--(portability|extern-only)\[*}
        '(- *)-h[display help information]'
	'(-t -x)-o[print values in octal]'
	'(-t -o)-x[print values in hexadecimal]'
	'(--size-sort)-v[sort output by value]'
      )
    ;;
    elfutils)
      args+=(
        '--mark-special[mark special symbols]'
	'--color=[use color in output]:color:(always auto never)'
      )
    ;;
    binutils)
      args+=(
	'(-f --format -P)-f+[specify output format]:format:(bsd sysv posix)'
	'--plugin[load specified plugin]:plugin'
	'--special-syms[include special symbols in the output]'
	'--synthetic[display synthetic symbols as well]'
	"--target=[target object format]:targets:(${${(@M)${(f)$(_call_program targets nm --help)}:#*supported targets:*}##*: })"
	'--with-symbol-versions[display version strings after symbol names]'
      )
    ;;
  esac
else
  # following flags are accurate for Solaris
  args=( ${args:#(|*\)(\*|))-[o-]*}
    "-h[don't display column headers]"
    '-l[distinguish WEAK symbols with * character]'
    '(-t -x)-o[print values in octal]'
    '(-v)-n[sort symbols by name]'
    '(-P)-p[produce parsable output]'
    '(-p)-P[portable output format]'
    '(-r)-R[print archive name, object file and symbol name]'
    '-r[prepend name of input file to each symbol name]'
    '-s[print section name instead of index]'
    '-u[print undefined symbols only]'
    '(-n)-v[sort external symbols by value]'
    '-V[display version of the nm command]'
    '(-o -t)-x[print values in hexadecimal]'
  )
fi

_arguments -s "$args[@]" $files