[PATCH] D26936: llvm-nm: Don't print value or size for undefined or weak symbols

Meador Inge via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 23 12:27:15 PST 2016


This revision was automatically updated to reflect the committed changes.
Closed by commit rL287802: llvm-nm: Don't print value or size for undefined or weak symbols (authored by meadori).

Changed prior to commit:
  https://reviews.llvm.org/D26936?vs=78781&id=79136#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D26936

Files:
  llvm/trunk/test/Object/nm-trivial-object.test
  llvm/trunk/test/tools/llvm-nm/X86/Inputs/weak.obj.elf-x86_64
  llvm/trunk/test/tools/llvm-nm/X86/weak.test
  llvm/trunk/tools/llvm-nm/llvm-nm.cpp


Index: llvm/trunk/tools/llvm-nm/llvm-nm.cpp
===================================================================
--- llvm/trunk/tools/llvm-nm/llvm-nm.cpp
+++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp
@@ -597,6 +597,10 @@
   outs() << Str;
 }
 
+static bool symbolIsDefined(const NMSymbol &Sym) {
+  return Sym.TypeChar != 'U' && Sym.TypeChar != 'w' && Sym.TypeChar != 'v';
+}
+
 static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName,
                                    const std::string &ArchiveName,
                                    const std::string &ArchitectureName) {
@@ -683,24 +687,28 @@
     char SymbolAddrStr[18] = "";
     char SymbolSizeStr[18] = "";
 
-    if (OutputFormat == sysv || I->TypeChar == 'U') {
-      if (OutputFormat == posix)
+    // If the format is SysV or the symbol isn't defined, then print spaces.
+    if (OutputFormat == sysv || !symbolIsDefined(*I)) {
+      if (OutputFormat == posix) {
         format(printFormat, I->Address)
           .print(SymbolAddrStr, sizeof(SymbolAddrStr));
-      else
+        format(printFormat, I->Size)
+            .print(SymbolSizeStr, sizeof(SymbolSizeStr));
+      } else {
         strcpy(SymbolAddrStr, printBlanks);
+        strcpy(SymbolSizeStr, printBlanks);
+      }
     }
-    if (OutputFormat == sysv)
-      strcpy(SymbolSizeStr, printBlanks);
 
-    if (I->TypeChar != 'U') {
+    // Otherwise, print the symbol address and size.
+    if (symbolIsDefined(*I)) {
       if (Obj.isIR())
         strcpy(SymbolAddrStr, printDashes);
       else
         format(printFormat, I->Address)
           .print(SymbolAddrStr, sizeof(SymbolAddrStr));
+      format(printFormat, I->Size).print(SymbolSizeStr, sizeof(SymbolSizeStr));
     }
-    format(printFormat, I->Size).print(SymbolSizeStr, sizeof(SymbolSizeStr));
 
     // If OutputFormat is darwin or we are printing Mach-O symbols in hex and
     // we have a MachOObjectFile, call darwinPrintSymbol to print as darwin's
Index: llvm/trunk/test/Object/nm-trivial-object.test
===================================================================
--- llvm/trunk/test/Object/nm-trivial-object.test
+++ llvm/trunk/test/Object/nm-trivial-object.test
@@ -79,10 +79,9 @@
 ELF: 00000000 T main
 ELF:          U puts
 
-FIXME: we should not print the size of undefined symbols.
-ELF-SIZE:               00000000 U SomeOtherFunction
+ELF-SIZE:                        U SomeOtherFunction
 ELF-SIZE-NEXT: 00000000 00000024 T main
-ELF-SIZE-NEXT:          00000000 U puts
+ELF-SIZE-NEXT:                   U puts
 
 ELF-o: {{.*}}/trivial-object-test.elf-i386:          U SomeOtherFunction
 ELF-o: {{.*}}/trivial-object-test.elf-i386: 00000000 T main
Index: llvm/trunk/test/tools/llvm-nm/X86/weak.test
===================================================================
--- llvm/trunk/test/tools/llvm-nm/X86/weak.test
+++ llvm/trunk/test/tools/llvm-nm/X86/weak.test
@@ -0,0 +1,6 @@
+# RUN: llvm-nm -B -S %p/Inputs/weak.obj.elf-x86_64 | FileCheck --match-full-lines %s
+
+CHECK:                  w weak_extern_func
+CHECK:                  w weak_extern_var
+CHECK: 0000000000000000 0000000000000011 W weak_func
+CHECK: 0000000000000000 0000000000000004 V weak_var


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D26936.79136.patch
Type: text/x-patch
Size: 3191 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161123/6ec408dd/attachment.bin>


More information about the llvm-commits mailing list