diff options
-rw-r--r-- | llvm/docs/CommandGuide/llvm-nm.rst | 4 | ||||
-rw-r--r-- | llvm/test/tools/llvm-nm/X86/weak.test | 1 | ||||
-rw-r--r-- | llvm/tools/llvm-nm/llvm-nm.cpp | 9 |
3 files changed, 13 insertions, 1 deletions
diff --git a/llvm/docs/CommandGuide/llvm-nm.rst b/llvm/docs/CommandGuide/llvm-nm.rst index da7edea4743..2a2f8275ffc 100644 --- a/llvm/docs/CommandGuide/llvm-nm.rst +++ b/llvm/docs/CommandGuide/llvm-nm.rst @@ -93,6 +93,10 @@ OPTIONS Print only symbols whose definitions are external; that is, accessible from other files. +.. option:: --no-weak, -W + + Don't print any weak symbols in the output. + .. option:: --format=format, -f format Select an output format; *format* may be *sysv*, *posix*, or *bsd*. The default diff --git a/llvm/test/tools/llvm-nm/X86/weak.test b/llvm/test/tools/llvm-nm/X86/weak.test index 19bcd846ddd..8d06f4fb029 100644 --- a/llvm/test/tools/llvm-nm/X86/weak.test +++ b/llvm/test/tools/llvm-nm/X86/weak.test @@ -1,4 +1,5 @@ # RUN: llvm-nm -B -S %p/Inputs/weak.obj.elf-x86_64 | FileCheck --match-full-lines %s +# RUN: llvm-nm -W -B -S %p/Inputs/weak.obj.elf-x86_64 | count 0 CHECK: w weak_extern_func CHECK: w weak_extern_var diff --git a/llvm/tools/llvm-nm/llvm-nm.cpp b/llvm/tools/llvm-nm/llvm-nm.cpp index 7dacbb45eb0..37c1bf85809 100644 --- a/llvm/tools/llvm-nm/llvm-nm.cpp +++ b/llvm/tools/llvm-nm/llvm-nm.cpp @@ -81,6 +81,11 @@ cl::alias ExternalOnly2("g", cl::desc("Alias for --extern-only"), cl::aliasopt(ExternalOnly), cl::Grouping, cl::ZeroOrMore); +cl::opt<bool> NoWeakSymbols("no-weak", + cl::desc("Show only non-weak symbols")); +cl::alias NoWeakSymbols2("W", cl::desc("Alias for --no-weak"), + cl::aliasopt(NoWeakSymbols), cl::Grouping); + cl::opt<bool> BSDFormat("B", cl::desc("Alias for --format=bsd"), cl::Grouping); cl::opt<bool> POSIXFormat("P", cl::desc("Alias for --format=posix"), @@ -768,8 +773,10 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName, bool Undefined = SymFlags & SymbolRef::SF_Undefined; bool Global = SymFlags & SymbolRef::SF_Global; + bool Weak = SymFlags & SymbolRef::SF_Weak; if ((!Undefined && UndefinedOnly) || (Undefined && DefinedOnly) || - (!Global && ExternalOnly) || (SizeSort && !PrintAddress)) + (!Global && ExternalOnly) || (SizeSort && !PrintAddress) || + (Weak && NoWeakSymbols)) continue; if (PrintFileName) { if (!ArchitectureName.empty()) |