[llvm-nm] Switch command line parsing from llvm::cl to OptTable

Authored by MaskRay on Jul 7 2021, 1:34 PM.


[llvm-nm] Switch command line parsing from llvm::cl to OptTable

Part of https://lists.llvm.org/pipermail/llvm-dev/2021-July/151622.html
"Binary utilities: switch command line parsing from llvm::cl to OptTable"

Users should generally observe no difference as long as they only use intended
option forms. Behavior changes:

  • -t=d is removed. Use -t d instead.
  • --demangle=0 cannot be used. Omit the option or use --no-demangle instead.
  • --help-list is removed. This is a cl:: specific option.


  • -t diagnostic gets improved.
  • This patch avoids cl::opt collision if we decide to support multiplexing for binary utilities
  • One-dash long options are still supported.
  • The -s collision (-s segment section for Mach-O) is unfortunate. -s means --print-armap in GNU nm.
  • This patch removes the last cl::multi_val use case from the llvm/lib/Support/CommandLine.cpp library

-M (--print-armap), -U (--defined-only), and -W (--no-weak)
are now deprecated. They could conflict with future GNU nm options.
(--print-armap has an existing alias -s, so GNU will unlikely add a new one.
--no-weak (not in GNU nm) is rarely used anyway.)

--just-symbol-name is now deprecated in favor of
--format=just-symbols and -j.

Reviewed By: jhenderson

Differential Revision: https://reviews.llvm.org/D105330