Index: test/tools/llvm-nm/X86/weak.test =================================================================== --- test/tools/llvm-nm/X86/weak.test +++ test/tools/llvm-nm/X86/weak.test @@ -1,6 +1,12 @@ -# RUN: llvm-nm -B -S %p/Inputs/weak.obj.elf-x86_64 | FileCheck --match-full-lines %s +# RUN: llvm-nm -B -S %p/Inputs/weak.obj.elf-x86_64 | FileCheck --match-full-lines %s --check-prefix=WEAK +# RUN: llvm-nm -W -B -S %p/Inputs/weak.obj.elf-x86_64 | FileCheck --allow-empty --match-full-lines %s --check-prefix=NOWEAK -CHECK: w weak_extern_func -CHECK: w weak_extern_var -CHECK: 0000000000000000 0000000000000011 W weak_func -CHECK: 0000000000000000 0000000000000004 V weak_var +WEAK: w weak_extern_func +WEAK: w weak_extern_var +WEAK: 0000000000000000 0000000000000011 W weak_func +WEAK: 0000000000000000 0000000000000004 V weak_var + +NOWEAK-NOT: w weak_extern_func +NOWEAK-NOT: w weak_extern_var +NOWEAK-NOT: 0000000000000000 0000000000000011 W weak_func +NOWEAK-NOT: 0000000000000000 0000000000000004 V weak_var Index: tools/llvm-nm/llvm-nm.cpp =================================================================== --- tools/llvm-nm/llvm-nm.cpp +++ tools/llvm-nm/llvm-nm.cpp @@ -81,6 +81,11 @@ cl::aliasopt(ExternalOnly), cl::Grouping, cl::ZeroOrMore); +cl::opt NoWeakSymbols("no-weak", + cl::desc("Don't show weak symbols")); +cl::alias NoWeakSymbols2("W", cl::desc("Alias for --no-weak"), + cl::aliasopt(NoWeakSymbols), cl::Grouping); + cl::opt BSDFormat("B", cl::desc("Alias for --format=bsd"), cl::Grouping); cl::opt POSIXFormat("P", cl::desc("Alias for --format=posix"), @@ -768,8 +773,10 @@ 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())