+++ /dev/null
-## Show that the -j/--just-symbol-name prints only the the symbol name (except
-## in posix output).
-
-# RUN: yaml2obj %s -o %t.o
-
-# RUN: llvm-nm --just-symbol-name %t.o > %t.bsd.txt
-# RUN: llvm-nm -j %t.o > %t.j.txt
-# RUN: cmp %t.bsd.txt %t.j.txt
-
-# RUN: FileCheck %s --input-file=%t.bsd.txt --implicit-check-not={{.}} --check-prefix=COMMON
-# RUN: llvm-nm -j %t.o --format=sysv | \
-# RUN: FileCheck %s --implicit-check-not={{.}} --check-prefixes=COMMON,SYSV -DFILE=%t.o
-# RUN: llvm-nm -j %t.o --format=posix | FileCheck %s --implicit-check-not={{.}} --check-prefix=POSIX
-
-# SYSV: Symbols from [[FILE]]:
-# SYSV-EMPTY:
-# SYSV-NEXT: Name Value Class Type Size Line Section
-# COMMON: {{^}}defined{{$}}
-# COMMON-NEXT: {{^}}undefined{{$}}
-
-# POSIX: defined T 0 0
-# POSIX-NEXT: undefined U 0 0
-
---- !ELF
-FileHeader:
- Class: ELFCLASS64
- Data: ELFDATA2LSB
- Type: ET_REL
-Sections:
- - Name: .text
- Type: SHT_PROGBITS
- Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
-Symbols:
- - Name: defined
- Section: .text
- Binding: STB_GLOBAL
- - Name: undefined
- Binding: STB_GLOBAL
--- /dev/null
+## Show that the -j/--just-symbol-name/--format=just-symbols prints only the the
+## symbol name.
+
+# RUN: yaml2obj %s -o %t.o
+
+# RUN: llvm-nm -j %t.o > %t.txt
+# RUN: llvm-nm --just-symbol-name %t.o | diff %t.txt -
+# RUN: llvm-nm --format=just-symbols %t.o | diff %t.txt -
+# RUN: llvm-nm --format=sysv -j %t.o | diff %t.txt -
+# RUN: llvm-nm -j --format=posix %t.o | diff %t.txt -
+
+# RUN: FileCheck %s --input-file=%t.txt --implicit-check-not={{.}} --check-prefix=COMMON
+
+# COMMON: {{^}}defined{{$}}
+# COMMON-NEXT: {{^}}undefined{{$}}
+
+# RUN: llvm-nm -j %t.o %t.o | FileCheck %s --check-prefix=MULTI1 -DFILE=%t.o
+
+# MULTI1-NOT: {{.}}
+# MULTI1: {{^$}}
+# MULTI1-NEXT: [[FILE]]:
+# MULTI1-NEXT: defined
+# MULTI1-NEXT: undefined
+# MULTI1-EMPTY:
+# MULTI1-NEXT: [[FILE]]:
+# MULTI1-NEXT: defined
+# MULTI1-NEXT: undefined
+# MULTI1-NOT: {{.}}
+
+# RUN: llvm-nm -j --print-file-name %t.o %t.o | FileCheck %s --check-prefix=MULTI2 -DFILE=%t.o
+
+# MULTI2-NOT: {{.}}
+# MULTI2: [[FILE]]: defined
+# MULTI2-NEXT: [[FILE]]: undefined
+# MULTI2-NEXT: [[FILE]]: defined
+# MULTI2-NEXT: [[FILE]]: undefined
+# MULTI2-NOT: {{.}}
+
+--- !ELF
+FileHeader:
+ Class: ELFCLASS64
+ Data: ELFDATA2LSB
+ Type: ET_REL
+Sections:
+ - Name: .text
+ Type: SHT_PROGBITS
+ Flags: [ SHF_ALLOC, SHF_EXECINSTR ]
+Symbols:
+ - Name: defined
+ Section: .text
+ Binding: STB_GLOBAL
+ - Name: undefined
+ Binding: STB_GLOBAL
using namespace object;
namespace {
-enum OutputFormatTy { bsd, sysv, posix, darwin };
+enum OutputFormatTy { bsd, sysv, posix, darwin, just_symbols };
cl::OptionCategory NMCat("llvm-nm Options");
"format", cl::desc("Specify output format"),
cl::values(clEnumVal(bsd, "BSD format"), clEnumVal(sysv, "System V format"),
clEnumVal(posix, "POSIX.2 format"),
- clEnumVal(darwin, "Darwin -m format")),
+ clEnumVal(darwin, "Darwin -m format"),
+ cl::OptionEnumValue{"just-symbols", int(just_symbols),
+ "just symbol names"}),
cl::init(bsd), cl::cat(NMCat));
cl::alias OutputFormat2("f", cl::desc("Alias for --format"),
cl::aliasopt(OutputFormat));
cl::aliasopt(AddressRadix));
cl::opt<bool> JustSymbolName("just-symbol-name",
- cl::desc("Print just the symbol's name"),
+ cl::desc("Alias for --format=just-symbols"),
cl::cat(NMCat));
-cl::alias JustSymbolNames("j", cl::desc("Alias for --just-symbol-name"),
+cl::alias JustSymbolNames("j", cl::desc("Alias for --format-just-symbols"),
cl::aliasopt(JustSymbolName), cl::Grouping);
cl::opt<bool>
}
if (!PrintFileName) {
- if (OutputFormat == posix && MultipleFiles && printName) {
+ if ((OutputFormat == bsd || OutputFormat == posix ||
+ OutputFormat == just_symbols) &&
+ MultipleFiles && printName) {
outs() << '\n' << CurrentFilename << ":\n";
- } else if (OutputFormat == bsd && MultipleFiles && printName) {
- outs() << "\n" << CurrentFilename << ":\n";
} else if (OutputFormat == sysv) {
outs() << "\n\nSymbols from " << CurrentFilename << ":\n\n";
if (isSymbolList64Bit(Obj))
continue;
if (PrintFileName)
writeFileName(outs(), ArchiveName, ArchitectureName);
- if ((JustSymbolName ||
+ if ((OutputFormat == just_symbols ||
(UndefinedOnly && MachO && OutputFormat != darwin)) &&
OutputFormat != posix) {
outs() << Name << "\n";
OutputFormat = posix;
if (DarwinFormat)
OutputFormat = darwin;
+ if (JustSymbolName)
+ OutputFormat = just_symbols;
// The relative order of these is important. If you pass --size-sort it should
// only print out the size. However, if you pass -S --size-sort, it should