summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--llvm/docs/CommandGuide/llvm-nm.rst4
-rw-r--r--llvm/test/tools/llvm-nm/X86/weak.test1
-rw-r--r--llvm/tools/llvm-nm/llvm-nm.cpp9
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())
OpenPOWER on IntegriCloud