LLVM-NM(1)

πŸ“¦
version 16.0.6 Β· 3 versions
, in ubuntu noble

πŸ’– LLVM-NM(1) πŸ’–

okay bestie, welcome to the llvm-nm page πŸ’… this one lives in the LLVM manual, section 1, and it's genuinely one of my faves. let's get into it 🫢


✨ NAME ✨

llvm-nm β€” list LLVM bitcode and object file's symbol table 🌸


✨ SYNOPSIS ✨

llvm-nm [options] [filenames…]

✨ DESCRIPTION ✨

so the llvm-nm utility lists the names of symbols from LLVM bitcode files, object files, and archives, periodt. every symbol shows up with a lil bit of simple info about where it came from ✨

  • no filename given? a.out is the input, no cap.
  • using - as a filename? llvm-nm will read a file from its standard input stream πŸ‘‘

llvm-nm's default output format is the traditional BSD nm output format. every output record is: an (optional) 8-digit hexadecimal address, then a type code character, then a name, for each symbol. one record per line, fields separated by spaces. when the address is omitted, it gets replaced by 8 spaces πŸŽ€

The supported type code characters are as follows. Where both lower and upper-case characters are listed for the same meaning, a lower-case character represents a local symbol, whilst an upper-case character represents a global (external) symbol:

  • a, A β€” Absolute symbol.
  • b, B β€” Uninitialized data (bss) object.
  • C β€” Common symbol. Multiple definitions link together into one definition.
  • d, D β€” Writable data object.
  • i, I β€” COFF: .idata symbol or symbol in a section with IMAGE_SCN_LNK_INFO set.
  • n β€” ELF: local symbol from non-alloc section.
    • COFF: debug symbol.
  • N β€” ELF: debug section symbol, or global symbol from non-alloc section.
  • s, S β€” COFF: section symbol.
    • Mach-O: absolute symbol or symbol from a section other than __TEXT_EXEC __text, __TEXT __text, __DATA __data, or __DATA __bss.
  • r, R β€” Read-only data object.
  • t, T β€” Code (text) object.
  • u β€” ELF: GNU unique symbol.
  • U β€” Named object is undefined in this file.
  • v β€” ELF: Undefined weak object. It is not a link failure if the object is not defined.
  • V β€” ELF: Defined weak object symbol. This definition will only be used if no regular definitions exist in a link. If multiple weak definitions and no regular definitions exist, one of the weak definitions will be used.
  • w β€” Undefined weak symbol other than an ELF object symbol. It is not a link failure if the symbol is not defined.
  • W β€” Defined weak symbol other than an ELF object symbol. This definition will only be used if no regular definitions exist in a link. If multiple weak definitions and no regular definitions exist, one of the weak definitions will be used.
  • - β€” Mach-O: N_STAB symbol.
  • ? β€” Something unrecognizable.

because LLVM bitcode 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 in an LLVM bitcode file β€” even symbols which are defined in the bitcode file. iconic behavior honestly πŸ’€


✨ OPTIONS ✨

  • -B β€” Use BSD output format. Alias for --format=bsd.
  • -X β€” Specify the type of XCOFF object file, ELF object file, or IR object file input from command line or from archive files that llvm-nm should examine. The mode must be one of the following:
    • 32 β€” Process only 32-bit object files.
    • 64 β€” Process only 64-bit object files.
    • 32_64 β€” Process both 32-bit and 64-bit object files.
    • any β€” Process all the supported object files.

On AIX OS, the default is to process 32-bit object files only and to ignore 64-bit objects. The can be changed by setting the OBJECT_MODE environment variable. For example, OBJECT_MODE=64 causes llvm-nm to process 64-bit objects and ignore 32-bit objects. The -X flag overrides the OBJECT_MODE variable.

On other operating systems, the default is to process all object files: the OBJECT_MODE environment variable is not supported.

  • --debug-syms, -a β€” Show all symbols, even those usually suppressed.
  • --defined-only, -U β€” Print only symbols defined in this file.
  • --demangle, -C β€” Demangle symbol names.
  • --dynamic, -D β€” Display dynamic symbols instead of normal symbols.
  • --export-symbols β€” Print sorted symbols with their visibility (if applicable), with duplicates removed.
  • --extern-only, -g β€” Print only symbols whose definitions are external; that is, accessible from other files.
  • --format=<format>, -f β€” Select an output format; format may be sysv, posix, darwin, bsd or just-symbols. The default is bsd.
  • --help, -h β€” Print a summary of command-line options and their meanings.
  • -j β€” Print just the symbol names. Alias for --format=just-symbols.
  • -m β€” Use Darwin format. Alias for --format=darwin.
  • --no-demangle β€” Don't demangle symbol names. This is the default.
  • --no-llvm-bc β€” Disable the LLVM bitcode reader.
  • --no-sort, -p β€” Show symbols in the order encountered.
  • --no-weak, -W β€” Don't print weak symbols.
  • --numeric-sort, -n, -v β€” Sort symbols by address.
  • --portability, -P β€” Use POSIX.2 output format. Alias for --format=posix.
  • --print-armap β€” Print the archive symbol table, in addition to the symbols.
  • --print-file-name, -A, -o β€” Precede each symbol with the file it came from.
  • --print-size, -S β€” Show symbol size as well as address (not applicable for Mach-O).
  • --quiet β€” Suppress 'no symbols' diagnostic.
  • --radix=<RADIX>, -t β€” Specify the radix of the symbol address(es). Values accepted are d (decimal), x (hexadecimal) and o (octal).
  • --reverse-sort, -r β€” Sort symbols in reverse order.
  • --size-sort β€” Sort symbols by size.
  • --special-syms β€” Do not filter special symbols from the output.
  • --undefined-only, -u β€” Print only undefined symbols.
  • --version, -V β€” Display the version of the llvm-nm executable, then exit. Does not stack with other commands.
  • @<FILE> β€” Read command-line options from response file <FILE>.

🍎 MACH-O SPECIFIC OPTIONS 🍎

  • --add-dyldinfo β€” Add symbols from the dyldinfo, if they are not already in the symbol table. This is the default.
  • --add-inlinedinfo β€” Add symbols from the inlined libraries, TBD file inputs only.
  • --arch=<arch1[,arch2,...]> β€” Dump the symbols from the specified architecture(s).
  • --dyldinfo-only β€” Dump only symbols from the dyldinfo.
  • --no-dyldinfo β€” Do not add any symbols from the dyldinfo.
  • -s <segment> <section> β€” Dump only symbols from this segment and section name.
  • -x β€” Print symbol entry in hex.

🐧 XCOFF SPECIFIC OPTIONS 🐧

  • --no-rsrc β€” Exclude resource file symbols (__rsrc) from export symbol list.

😭 BUGS 😭

  • llvm-nm does not support the full set of arguments that GNU nm does.
bestie. it's giving "not everything GNU does". just so u know 🫢

πŸšͺ EXIT STATUS πŸšͺ

llvm-nm exits with an exit code of zero. that's it. flawless. no drama πŸ’…


πŸ‘€ SEE ALSO πŸ‘€

llvm-ar(1), llvm-objdump(1), llvm-readelf(1), llvm-readobj(1)


πŸ’œ AUTHOR πŸ’œ

Maintained by the LLVM Team (https://llvm.org/).


2003-2024, LLVM Project


and that's the whole page, bestie β€” this was the LLVM-NM(1) manual, page 15 of the LLVM set, dated 2024-04-14, brought to u by the LLVM crew πŸŽ€ go read ur symbol tables, u got this πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from