]> granicus.if.org Git - llvm/commitdiff
[llvm-nm] Generalize ELF symbol types 'N' and 'n'
authorFangrui Song <maskray@google.com>
Thu, 20 Jun 2019 10:15:11 +0000 (10:15 +0000)
committerFangrui Song <maskray@google.com>
Thu, 20 Jun 2019 10:15:11 +0000 (10:15 +0000)
Reviewed By: grimar, jhenderson

Differential Revision: https://reviews.llvm.org/D63588

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

test/tools/llvm-nm/nonalloc.test
tools/llvm-nm/llvm-nm.cpp

index c8fe432efaa44052b48db9ecc2fa0a8c1fe1ecff..a00afcb06168d45132f9a9c774695ad4ccfd5de7 100644 (file)
@@ -1,7 +1,11 @@
 # RUN: yaml2obj %s -o %t
 # RUN: llvm-nm --no-sort %t | FileCheck %s
 
-# CHECK: n debug_info_main
+# CHECK: N debug_info_main
+# CHECK: n readonly_local
+# CHECK: ? writable_local
+# CHECK: N readonly_global
+# CHECK: ? writable_global
 
 !ELF
 FileHeader:
@@ -12,6 +16,22 @@ FileHeader:
 Sections:
   - Name: .debug_info
     Type: SHT_PROGBITS
+  - Name: .readonly
+    Type: SHT_PROGBITS
+  - Name: .writable
+    Type: SHT_PROGBITS
+    Flags: [SHF_WRITE]
 Symbols:
   - Name:    debug_info_main
     Section: .debug_info
+  - Name:    readonly_local
+    Section: .readonly
+  - Name:    writable_local
+    Section: .writable
+
+  - Name:    readonly_global
+    Binding: STB_GLOBAL
+    Section: .readonly
+  - Name:    writable_global
+    Binding: STB_GLOBAL
+    Section: .writable
index 08e0e104be196097cc66aa95eb1116e3038db23f..ae9bf60baeba390afc69fad758af0790f8e0788b 100644 (file)
@@ -907,22 +907,17 @@ static char getSymbolNMTypeChar(ELFObjectFileBase &Obj,
       return 'b';
     if (Flags & ELF::SHF_ALLOC)
       return Flags & ELF::SHF_WRITE ? 'd' : 'r';
-  }
 
-  if (SymI->getELFType() == ELF::STT_SECTION) {
-    Expected<StringRef> Name = SymI->getName();
-    if (!Name) {
-      consumeError(Name.takeError());
+    StringRef SecName;
+    if (SecI->getName(SecName))
       return '?';
-    }
-    return StringSwitch<char>(*Name)
-        .StartsWith(".debug", 'N')
-        .StartsWith(".note", 'n')
-        .StartsWith(".comment", 'n')
-        .Default('?');
+    if (SecName.startswith(".debug"))
+      return 'N';
+    if (!(Flags & ELF::SHF_WRITE))
+      return 'n';
   }
 
-  return 'n';
+  return '?';
 }
 
 static char getSymbolNMTypeChar(COFFObjectFile &Obj, symbol_iterator I) {