From a511b30bfbd2f7c535c305d4534b4bdfa0c56a0a Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Thu, 20 Jun 2019 10:15:11 +0000 Subject: [PATCH] [llvm-nm] Generalize ELF symbol types 'N' and 'n' 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 | 22 +++++++++++++++++++++- tools/llvm-nm/llvm-nm.cpp | 19 +++++++------------ 2 files changed, 28 insertions(+), 13 deletions(-) diff --git a/test/tools/llvm-nm/nonalloc.test b/test/tools/llvm-nm/nonalloc.test index c8fe432efaa..a00afcb0616 100644 --- a/test/tools/llvm-nm/nonalloc.test +++ b/test/tools/llvm-nm/nonalloc.test @@ -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 diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index 08e0e104be1..ae9bf60baeb 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -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 Name = SymI->getName(); - if (!Name) { - consumeError(Name.takeError()); + StringRef SecName; + if (SecI->getName(SecName)) return '?'; - } - return StringSwitch(*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) { -- 2.40.0