# LLVM: `llvm-nm` tool

### NAME

`llvm-nm`

### SYNOPSIS

`llvm-nm [options] [filenames...]`

### DESCRIPTION

The `llvm-nm` utility lists the names of symbols from the LLVM bytecode files named on the command line, along with some ancillary information about each symbol. If no filename is specified, or - is used as a filename, `llvm-nm` reads its input from standard input.

`llvm-nm`'s default output format is the traditional BSD `nm(1)` 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.

Type code characters currently supported, and their meanings, are as follows:

U | Named object is referenced but undefined in this bytecode file
C | Common (multiple defs link together into one def)
W | Weak reference (multiple defs link together into zero or one defs)
t | Local function (text) object
T | Global function (text) object
d | Local data object
D | Global data object
? | Something unrecognizable

Because LLVM bytecode files typically contain objects that are not considered to have addresses until they are linked into an executable image or dynamically compiled "just-in-time", `llvm-nm` does not print an address for any symbol, even symbols which are defined in the bytecode file.

### OPTIONS

- -P
  Use POSIX.2 output format. Alias for --format=posix.

- -B (default)
  Use BSD output format. Alias for --format=bsd.

- -help
  Print a summary of command-line options and their meanings.

- -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.)

- -extern-only, -g
  Print only symbols whose definitions are external; that is, accessible from other bytecode files.

- -undefined-only, -u
  Print only symbols referenced but not defined in this bytecode file.

- -format=fmt, -f
  Select an output format; fmt may be sysv, posix, or bsd. The default is bsd.

### BUGS

`llvm-nm` cannot currently see inside `ar(1)` library archive files, like `nm(1)` can. It cannot demangle C++ mangled names, like GNU `nm(1)` can.

### EXIT STATUS

`llvm-nm` exits with an exit code of zero.

### SEE ALSO

`llvm-dis`, `ar(1)`, `nm(1)`

Maintained by the LLVM Team.