.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.14
.\"
.\" Standard preamble:
.\" ========================================================================
.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R
.fi
..
.\" Set up some character translations and predefined strings.  \*(-- will
.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
.\" double quote, and \*(R" will give a right double quote.  | will give a
.\" real vertical bar.  \*(C+ will give a nicer C++.  Capital omega is used to
.\" do unbreakable dashes and therefore won't be available.  \*(C` and \*(C'
.\" expand to `' in nroff, nothing in troff, for use with C<>.
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.\"
.\" If the F register is turned on, we'll generate index entries on stderr for
.\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index
.\" entries marked with X<> in POD.  Of course, you'll have to process the
.\" output yourself in some meaningful fashion.
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.\"
.\" For nroff, turn off justification.  Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.hy 0
.if n .na
.\"
.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
.\" Fear.  Run.  Save yourself.  No user-serviceable parts.
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.\" ========================================================================
.\"
.IX Title "LLVM-NM 1"
.TH LLVM-NM 1 "2006-11-20" "CVS" "LLVM Command Guide"
.SH "NAME"
llvm\-nm \- list LLVM bytecode file's symbol table
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBllvm-nm\fR [\fIoptions\fR] [\fIfilenames...\fR]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
The \fBllvm-nm\fR utility lists the names of symbols from the \s-1LLVM\s0 bytecode files,
or \fBar\fR archives containing \s-1LLVM\s0 bytecode files, named on the command line.
Each symbol is listed along with some simple information about its provenance.
If no filename is specified, or \fI\-\fR is used as a filename, \fBllvm-nm\fR will
process a bytecode file on its standard input stream.
.PP
\&\fBllvm-nm\fR's default output format is the traditional \s-1BSD\s0 \fBnm\fR output format.
Each such output record consists of an (optional) 8\-digit hexadecimal address,
followed by a type code character, followed by a name, for each symbol. One
record is printed per line; fields are separated by spaces. When the address is
omitted, it is replaced by 8 spaces.
.PP
Type code characters currently supported, and their meanings, are as follows:
.IP "U" 4
.IX Item "U"
Named object is referenced but undefined in this bytecode file
.IP "C" 4
.IX Item "C"
Common (multiple defs link together into one def)
.IP "W" 4
.IX Item "W"
Weak reference (multiple defs link together into zero or one defs)
.IP "t" 4
.IX Item "t"
Local function (text) object
.IP "T" 4
.IX Item "T"
Global function (text) object
.IP "d" 4
.IX Item "d"
Local data object
.IP "D" 4
.IX Item "D"
Global data object
.IP "?" 4
Something unrecognizable
.PP
Because \s-1LLVM\s0 bytecode files typically contain objects that are not considered to
have addresses until they are linked into an executable image or dynamically
compiled \*(L"just\-in\-time\*(R", \fBllvm-nm\fR does not print an address for any symbol,
even symbols which are defined in the bytecode file.
.SH "OPTIONS"
.IX Header "OPTIONS"
.IP "\fB\-P\fR" 4
.IX Item "-P"
Use \s-1POSIX\s0.2 output format. Alias for \fB\-\-format=posix\fR.
.IP "\fB\-B\fR    (default)" 4
.IX Item "-B    (default)"
Use \s-1BSD\s0 output format. Alias for \fB\-\-format=bsd\fR.
.IP "\fB\-\-help\fR" 4
.IX Item "--help"
Print a summary of command-line options and their meanings.
.IP "\fB\-\-defined\-only\fR" 4
.IX Item "--defined-only"
Print only symbols defined in this bytecode file (as opposed to
symbols which may be referenced by objects in this file, but not
defined in this file.)
.IP "\fB\-\-extern\-only\fR, \fB\-g\fR" 4
.IX Item "--extern-only, -g"
Print only symbols whose definitions are external; that is, accessible
from other bytecode files.
.IP "\fB\-\-undefined\-only\fR, \fB\-u\fR" 4
.IX Item "--undefined-only, -u"
Print only symbols referenced but not defined in this bytecode file.
.IP "\fB\-\-format=\fR\fIfmt\fR, \fB\-f\fR" 4
.IX Item "--format=fmt, -f"
Select an output format; \fIfmt\fR may be \fIsysv\fR, \fIposix\fR, or \fIbsd\fR. The
default is \fIbsd\fR.
.SH "BUGS"
.IX Header "BUGS"
\&\fBllvm-nm\fR cannot demangle \*(C+ mangled names, like \s-1GNU\s0 \fBnm\fR can.
.SH "EXIT STATUS"
.IX Header "EXIT STATUS"
\&\fBllvm-nm\fR exits with an exit code of zero.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
llvm-dis, \fIar\fR\|(1), \fInm\fR\|(1)
.SH "AUTHOR"
.IX Header "AUTHOR"
Maintained by the \s-1LLVM\s0 Team (<http://llvm.org>).
