Add the -just-symbol-name (aka -j) flag to llvm-nm to just print the
authorKevin Enderby <enderby@apple.com>
Thu, 3 Jul 2014 21:51:07 +0000 (21:51 +0000)
committerKevin Enderby <enderby@apple.com>
Thu, 3 Jul 2014 21:51:07 +0000 (21:51 +0000)
symbol’s name.  On darwin the -j flag is used (often in combinations
with other flags) to produce a complete list of symbol names which
than can then be reorder and used with ld(1)’s -order_file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@212294 91177308-0d34-0410-b5e6-96231b3b80d8

test/Object/nm-trivial-object.test
tools/llvm-nm/llvm-nm.cpp

index 09642e1c688d29ddc2dcde2192c22512f7d67566..656d6b00cd3d0e8e2bdb9abcc36f7519847dfed8 100644 (file)
@@ -18,6 +18,8 @@ RUN: llvm-nm %p/Inputs/trivial-object-test.macho-x86-64 \
 RUN:         | FileCheck %s -check-prefix macho64
 RUN: llvm-nm %p/Inputs/macho-text-data-bss.macho-x86_64 \
 RUN:         | FileCheck %s -check-prefix macho-tdb
+RUN: llvm-nm -j %p/Inputs/macho-text-data-bss.macho-x86_64 \
+RUN:         | FileCheck %s -check-prefix macho-j
 RUN: llvm-nm -r %p/Inputs/macho-text-data-bss.macho-x86_64 \
 RUN:         | FileCheck %s -check-prefix macho-r
 RUN: llvm-nm %p/Inputs/common.coff-i386 \
@@ -85,6 +87,12 @@ macho-tdb: 000000000000000c D _d
 macho-tdb: 0000000000000000 T _t
 macho-tdb: 0000000000000048 S _t.eh
 
+macho-j: EH_frame0
+macho-j: _b
+macho-j: _d
+macho-j: _t
+macho-j: _t.eh
+
 macho-r: 0000000000000048 S _t.eh
 macho-r-NEXT: 0000000000000000 T _t
 macho-r-NEXT: 000000000000000c D _d
index 3f9ce24471a9dc5835e8e7994c31c8b08244aefe..d3918547d84d3cb1fba1e72c8c8d583dd64edd0f 100644 (file)
@@ -131,6 +131,11 @@ cl::opt<bool> WithoutAliases("without-aliases", cl::Hidden,
 cl::opt<bool> ArchiveMap("print-armap", cl::desc("Print the archive map"));
 cl::alias ArchiveMaps("s", cl::desc("Alias for --print-armap"),
                       cl::aliasopt(ArchiveMap));
+
+cl::opt<bool> JustSymbolName("just-symbol-name",
+                             cl::desc("Print just the symbol's name"));
+cl::alias JustSymbolNames("j", cl::desc("Alias for --just-symbol-name"),
+                          cl::aliasopt(JustSymbolName));
 bool PrintAddress = true;
 
 bool MultipleFiles = false;
@@ -446,6 +451,10 @@ static void sortAndPrintSymbolList(SymbolicFile *Obj, bool printName) {
       continue;
     if (SizeSort && !PrintAddress && I->Size == UnknownAddressOrSize)
       continue;
+    if (JustSymbolName) {
+      outs() << I->Name << "\n";
+      continue;
+    }
 
     char SymbolAddrStr[18] = "";
     char SymbolSizeStr[18] = "";