LLVM-NM(1)

πŸ“¦
version 13.0.1 Β· 5 versions
, in ubuntu jammy

πŸ’… LLVM-NM πŸ’…

okay bestie, real talk: this is the llvm-nm page from the LLVM manual, and we're gonna make it make sense. it lists symbol tables. that's the whole gig. let's go πŸŽ€


✨ 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 β€” like, it goes through and tells you every symbol living in there. each symbol gets listed along with some simple info about its provenance, iykyk. πŸ•΅οΈ

no filename? no problem β€” a.out is used as the input. and if you use - as a filename, llvm-nm will read a file from its standard input stream. iconic behavior honestly.

llvm-nm's default output format is the traditional BSD nm output format. each one of those output records is made of an (optional) 8-digit hexadecimal address, then a type code character, then a name β€” for each symbol. one record printed per line, fields separated by spaces. and when the address is omitted, it gets replaced by 8 spaces. yes, spaces. the vibes are preserved. πŸ’…

here are the supported type code characters, babes. 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. 😭

okay and this next bit is important: 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. no address. none. periodt. πŸ’€


✨ OPTIONS ✨

  • -B β€” Use BSD output format. Alias for --format=bsd.
  • --debug-syms, -a β€” Show all symbols, even those usually suppressed. πŸ‘€
  • --defined-only β€” Print only symbols defined in this file.
  • --demangle, -C β€” Demangle symbol names. make 'em readable bestie.
  • --dynamic, -D β€” Display dynamic symbols instead of normal symbols.
  • --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 β€” 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 🍎

these ones are only for the Apple-heads, bestie. πŸ¦‹

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

😭 BUGS 😭

  • llvm-nm does not support the full set of arguments that GNU nm does. not me finding out the hard way πŸ™ˆ

🌈 EXIT STATUS 🌈

llvm-nm exits with an exit code of zero. that's it. that's the status. slay. ✨


πŸ‘€ SEE ALSO πŸ‘€

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


πŸ’– AUTHOR πŸ’–

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

2003-2023, LLVM Project


okay and that's the whole thing, bestie β€” this page comes from the LLVM manual, source 13, dated 2023-07-14. go forth and read those symbol tables πŸ’…πŸ«ΆπŸŒΈ

πŸ“¦ where this page comes from