[llvm] r354833 - Improve "llvm-nm -f sysv" output for Elf files

Vlad Tsyrklevich via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 25 23:06:43 PST 2019


I've reverted this change in r354849. It was causing ASan failures
<http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/29901>
on sanitizer-x86_64-linux-fast like the following:

FAIL: LLVM :: Object/X86/nm-print-size.s (22871 of 29961)
******************** TEST 'LLVM :: Object/X86/nm-print-size.s' FAILED
********************
Script:
--
: 'RUN: at line 1';
/b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/llvm-mc
/b/sanitizer-x86_64-linux-fast/build/llvm/test/Object/X86/nm-print-size.s
-o /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/test/Object/X86/Output/nm-print-size.s.tmp
-filetype=obj -triple=x86_64-pc-linux
: 'RUN: at line 2';
/b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/llvm-nm
--print-size /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/test/Object/X86/Output/nm-print-size.s.tmp
| /b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/FileCheck
/b/sanitizer-x86_64-linux-fast/build/llvm/test/Object/X86/nm-print-size.s
--
Exit Code: 2

Command Output (stderr):
--
=================================================================
==61874==ERROR: AddressSanitizer: heap-buffer-overflow on address
0x617000000323 at pc 0x000000fce265 bp 0x7ffedd5d10b0 sp
0x7ffedd5d10a8
READ of size 4 at 0x617000000323 thread T0
    #0 0xfce264 in read<unsigned int, 1>
/b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Support/Endian.h:68:3
    #1 0xfce264 in read<unsigned int, llvm::support::little, 1>
/b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Support/Endian.h:79
    #2 0xfce264 in operator unsigned int
/b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Support/Endian.h:215
    #3 0xfce264 in
llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1,
true> >::getSectionName(llvm::object::Elf_Shdr_Impl<llvm::object::ELFType<(llvm::support::endianness)1,
true> > const*, llvm::StringRef) const
/b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Object/ELF.h:623
    #4 0xfcd3d4 in
llvm::object::ELFFile<llvm::object::ELFType<(llvm::support::endianness)1,
true> >::getSectionName(llvm::object::Elf_Shdr_Impl<llvm::object::ELFType<(llvm::support::endianness)1,
true> > const*) const
/b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Object/ELF.h:617:10
    #5 0xfc30e8 in
llvm::object::ELFObjectFile<llvm::object::ELFType<(llvm::support::endianness)1,
true> >::getSectionName(llvm::object::DataRefImpl, llvm::StringRef&)
const /b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Object/ELFObjectFile.h:688:18
    #6 0x5ed81f in getName
/b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Object/ObjectFile.h:422:24
    #7 0x5ed81f in getNMClassTagAndSectionName
/b/sanitizer-x86_64-linux-fast/build/llvm/tools/llvm-nm/llvm-nm.cpp:1116
    #8 0x5ed81f in
dumpSymbolNamesFromObject(llvm::object::SymbolicFile&, bool,
std::__1::basic_string<char, std::__1::char_traits<char>,
std::__1::allocator<char> > const&, std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> > const&)
/b/sanitizer-x86_64-linux-fast/build/llvm/tools/llvm-nm/llvm-nm.cpp:1244
    #9 0x5e063c in
dumpSymbolNamesFromFile(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >&)
/b/sanitizer-x86_64-linux-fast/build/llvm/tools/llvm-nm/llvm-nm.cpp:2073:5
    #10 0x5d3647 in
for_each<std::__1::__wrap_iter<std::__1::basic_string<char> *>, void
(*)(std::__1::basic_string<char> &)>
/b/sanitizer-x86_64-linux-fast/build/libcxx_build_asan/include/c++/v1/algorithm:858:9
    #11 0x5d3647 in
for_each<llvm::cl::list<std::__1::basic_string<char>, bool,
llvm::cl::parser<std::string> > &, void
(*)(std::__1::basic_string<char> &)>
/b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/ADT/STLExtras.h:1179
    #12 0x5d3647 in main
/b/sanitizer-x86_64-linux-fast/build/llvm/tools/llvm-nm/llvm-nm.cpp:2127
    #13 0x7f4af51462e0 in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
    #14 0x4ca6a9 in _start
(/b/sanitizer-x86_64-linux-fast/build/llvm_build_asan/bin/llvm-nm+0x4ca6a9)

0x617000000323 is located 2 bytes to the right of 673-byte region
[0x617000000080,0x617000000321)
allocated by thread T0 here:
    #0 0x5cbd00 in operator new(unsigned long, std::nothrow_t const&)
/b/sanitizer-x86_64-linux-fast/build/llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:112
    #1 0x1174b2d in
llvm::WritableMemoryBuffer::getNewUninitMemBuffer(unsigned long,
llvm::Twine const&)
/b/sanitizer-x86_64-linux-fast/build/llvm/lib/Support/MemoryBuffer.cpp:283:34
    #2 0x1175647 in
llvm::ErrorOr<std::__1::unique_ptr<llvm::MemoryBuffer,
std::__1::default_delete<llvm::MemoryBuffer> > >
getOpenFileImpl<llvm::MemoryBuffer>(int, llvm::Twine const&, unsigned
long, unsigned long, long, bool, bool)
/b/sanitizer-x86_64-linux-fast/build/llvm/lib/Support/MemoryBuffer.cpp:455:14
    #3 0x1173fca in getFileAux<llvm::MemoryBuffer>
/b/sanitizer-x86_64-linux-fast/build/llvm/lib/Support/MemoryBuffer.cpp:251:14
    #4 0x1173fca in getFile
/b/sanitizer-x86_64-linux-fast/build/llvm/lib/Support/MemoryBuffer.cpp:231
    #5 0x1173fca in llvm::MemoryBuffer::getFileOrSTDIN(llvm::Twine
const&, long, bool)
/b/sanitizer-x86_64-linux-fast/build/llvm/lib/Support/MemoryBuffer.cpp:150
    #6 0x5d456a in
dumpSymbolNamesFromFile(std::__1::basic_string<char,
std::__1::char_traits<char>, std::__1::allocator<char> >&)
/b/sanitizer-x86_64-linux-fast/build/llvm/tools/llvm-nm/llvm-nm.cpp:1775:7
    #7 0x5d3647 in
for_each<std::__1::__wrap_iter<std::__1::basic_string<char> *>, void
(*)(std::__1::basic_string<char> &)>
/b/sanitizer-x86_64-linux-fast/build/libcxx_build_asan/include/c++/v1/algorithm:858:9
    #8 0x5d3647 in
for_each<llvm::cl::list<std::__1::basic_string<char>, bool,
llvm::cl::parser<std::string> > &, void
(*)(std::__1::basic_string<char> &)>
/b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/ADT/STLExtras.h:1179
    #9 0x5d3647 in main
/b/sanitizer-x86_64-linux-fast/build/llvm/tools/llvm-nm/llvm-nm.cpp:2127
    #10 0x7f4af51462e0 in __libc_start_main
(/lib/x86_64-linux-gnu/libc.so.6+0x202e0)

SUMMARY: AddressSanitizer: heap-buffer-overflow
/b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Support/Endian.h:68:3
in read<unsigned int, 1>
Shadow bytes around the buggy address:
  0x0c2e7fff8010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c2e7fff8020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c2e7fff8030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c2e7fff8040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c2e7fff8050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c2e7fff8060: 00 00 00 00[01]fa fa fa fa fa fa fa fa fa fa fa
  0x0c2e7fff8070: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c2e7fff8080: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c2e7fff8090: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c2e7fff80a0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c2e7fff80b0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==61874==ABORTING



On Mon, Feb 25, 2019 at 4:18 PM Sunil Srivastava via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: ssrivastava
> Date: Mon Feb 25 16:19:39 2019
> New Revision: 354833
>
> URL: http://llvm.org/viewvc/llvm-project?rev=354833&view=rev
> Log:
> Improve "llvm-nm -f sysv" output for Elf files
>
> Specifically, compute and Print Type and Section columns.
>
> Differential Revision: https://reviews.llvm.org/D58263
>
> Modified:
>     llvm/trunk/include/llvm/Object/ELFObjectFile.h
>     llvm/trunk/include/llvm/Object/ObjectFile.h
>     llvm/trunk/lib/Object/ELFObjectFile.cpp
>     llvm/trunk/test/tools/llvm-nm/X86/sysv-i386.test
>     llvm/trunk/test/tools/llvm-nm/X86/sysv-x86_64.test
>     llvm/trunk/tools/llvm-nm/llvm-nm.cpp
>     llvm/trunk/tools/llvm-readobj/ELFDumper.cpp
>
> Modified: llvm/trunk/include/llvm/Object/ELFObjectFile.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFObjectFile.h?rev=354833&r1=354832&r2=354833&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/ELFObjectFile.h (original)
> +++ llvm/trunk/include/llvm/Object/ELFObjectFile.h Mon Feb 25 16:19:39 2019
> @@ -41,6 +41,8 @@
>  namespace llvm {
>  namespace object {
>
> +extern const llvm::EnumEntry<unsigned> ElfSymbolTypes[8];
> +
>  class elf_symbol_iterator;
>
>  class ELFObjectFileBase : public ObjectFile {
> @@ -148,6 +150,17 @@ public:
>    uint8_t getELFType() const {
>      return getObject()->getSymbolELFType(getRawDataRefImpl());
>    }
> +
> +  void getELFTypeName(StringRef &TN) const {
> +    uint8_t et = getELFType();
> +    TN = "";
> +    for (auto &ee : ElfSymbolTypes) {
> +      if (ee.Value == et) {
> +        TN = ee.AltName;
> +        break;
> +      }
> +    }
> +  }
>  };
>
>  class elf_symbol_iterator : public symbol_iterator {
> @@ -244,6 +257,7 @@ protected:
>    Expected<section_iterator> getSymbolSection(const Elf_Sym *Symb,
>                                                const Elf_Shdr *SymTab)
> const;
>    Expected<section_iterator> getSymbolSection(DataRefImpl Symb) const
> override;
> +  int getSymbolSectionIndex(DataRefImpl Symb) const override;
>
>    void moveSectionNext(DataRefImpl &Sec) const override;
>    std::error_code getSectionName(DataRefImpl Sec,
> @@ -656,6 +670,13 @@ ELFObjectFile<ELFT>::getSymbolSection(Da
>  }
>
>  template <class ELFT>
> +int
> +ELFObjectFile<ELFT>::getSymbolSectionIndex(DataRefImpl Symb) const {
> +  const Elf_Sym *Sym = getSymbol(Symb);
> +  return Sym->st_shndx;
> +}
> +
> +template <class ELFT>
>  void ELFObjectFile<ELFT>::moveSectionNext(DataRefImpl &Sec) const {
>    const Elf_Shdr *ESec = getSection(Sec);
>    Sec = toDRI(++ESec);
>
> Modified: llvm/trunk/include/llvm/Object/ObjectFile.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ObjectFile.h?rev=354833&r1=354832&r2=354833&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Object/ObjectFile.h (original)
> +++ llvm/trunk/include/llvm/Object/ObjectFile.h Mon Feb 25 16:19:39 2019
> @@ -174,6 +174,9 @@ public:
>    /// end_sections() if it is undefined or is an absolute symbol.
>    Expected<section_iterator> getSection() const;
>
> +  // Get the section index of the section of this symbol
> +  int getSectionIndex() const;
> +
>    const ObjectFile *getObject() const;
>  };
>
> @@ -228,6 +231,7 @@ protected:
>    virtual Expected<SymbolRef::Type> getSymbolType(DataRefImpl Symb) const
> = 0;
>    virtual Expected<section_iterator>
>    getSymbolSection(DataRefImpl Symb) const = 0;
> +  virtual int getSymbolSectionIndex(DataRefImpl Symb) const { return -1; }
>
>    // Same as above for SectionRef.
>    friend class SectionRef;
> @@ -375,6 +379,10 @@ inline uint64_t SymbolRef::getCommonSize
>    return getObject()->getCommonSymbolSize(getRawDataRefImpl());
>  }
>
> +inline int SymbolRef::getSectionIndex() const {
> +  return getObject()->getSymbolSectionIndex(getRawDataRefImpl());
> +}
> +
>  inline Expected<section_iterator> SymbolRef::getSection() const {
>    return getObject()->getSymbolSection(getRawDataRefImpl());
>  }
>
> Modified: llvm/trunk/lib/Object/ELFObjectFile.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/ELFObjectFile.cpp?rev=354833&r1=354832&r2=354833&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Object/ELFObjectFile.cpp (original)
> +++ llvm/trunk/lib/Object/ELFObjectFile.cpp Mon Feb 25 16:19:39 2019
> @@ -35,6 +35,16 @@
>  using namespace llvm;
>  using namespace object;
>
> +const EnumEntry<unsigned> llvm::object::ElfSymbolTypes[8] = {
> +    {"None", "NOTYPE", ELF::STT_NOTYPE},
> +    {"Object", "OBJECT", ELF::STT_OBJECT},
> +    {"Function", "FUNC", ELF::STT_FUNC},
> +    {"Section", "SECTION", ELF::STT_SECTION},
> +    {"File", "FILE", ELF::STT_FILE},
> +    {"Common", "COMMON", ELF::STT_COMMON},
> +    {"TLS", "TLS", ELF::STT_TLS},
> +    {"GNU_IFunc", "IFUNC", ELF::STT_GNU_IFUNC}};
> +
>  ELFObjectFileBase::ELFObjectFileBase(unsigned int Type, MemoryBufferRef
> Source)
>      : ObjectFile(Type, Source) {}
>
>
> Modified: llvm/trunk/test/tools/llvm-nm/X86/sysv-i386.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-nm/X86/sysv-i386.test?rev=354833&r1=354832&r2=354833&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-nm/X86/sysv-i386.test (original)
> +++ llvm/trunk/test/tools/llvm-nm/X86/sysv-i386.test Mon Feb 25 16:19:39
> 2019
> @@ -1,6 +1,6 @@
>  RUN: llvm-nm -f sysv %p/Inputs/hello.obj.elf-i386 | FileCheck %s
> --strict-whitespace
>
>  CHECK: Name                  Value   Class        Type         Size
>  Line  Section
> -CHECK: .L.str              |00000000|   r  |                  |0000000f|
>    |
> -CHECK: main                |00000000|   T  |                  |00000015|
>    |
> -CHECK: puts                |        |   U  |                  |        |
>    |
> +CHECK: .L.str              |00000000|   r  |            OBJECT|0000000f|
>    |.rodata.str1.1
> +CHECK: main                |00000000|   T  |              FUNC|00000015|
>    |.text
> +CHECK: puts                |        |   U  |            NOTYPE|        |
>    |*UND*
>
> Modified: llvm/trunk/test/tools/llvm-nm/X86/sysv-x86_64.test
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-nm/X86/sysv-x86_64.test?rev=354833&r1=354832&r2=354833&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/tools/llvm-nm/X86/sysv-x86_64.test (original)
> +++ llvm/trunk/test/tools/llvm-nm/X86/sysv-x86_64.test Mon Feb 25 16:19:39
> 2019
> @@ -2,8 +2,8 @@ RUN: llvm-nm -f sysv %p/Inputs/hello.obj
>  RUN: llvm-nm -f sysv %p/Inputs/hello.obj.macho-x86_64 2>&1 | FileCheck %s
> --check-prefix=MACHO --strict-whitespace
>
>  ELF: Name                  Value           Class        Type
>  Size             Line  Section
> -ELF: main                |0000000000000000|   T  |
> |0000000000000015|     |
> -ELF: puts                |                |   U  |                  |
>             |     |
> +ELF: main                |0000000000000000|   T  |
> FUNC|0000000000000015|     |.text
> +ELF: puts                |                |   U  |            NOTYPE|
>             |     |*UND*
>
>  MACHO: Name                  Value           Class        Type
>  Size             Line  Section
>  MACHO: EH_frame0           |0000000000000068|   s  |
> |0000000000000000|     |
>
> Modified: llvm/trunk/tools/llvm-nm/llvm-nm.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=354833&r1=354832&r2=354833&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original)
> +++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Mon Feb 25 16:19:39 2019
> @@ -262,6 +262,8 @@ struct NMSymbol {
>    uint64_t Size;
>    char TypeChar;
>    StringRef Name;
> +  StringRef SectionName;
> +  StringRef TypeName;
>    BasicSymbolRef Sym;
>    // The Sym field above points to the native symbol in the object file,
>    // for Mach-O when we are creating symbols from the dyld info the above
> @@ -882,8 +884,13 @@ static void sortAndPrintSymbolList(Symbo
>        std::string PaddedName(Name);
>        while (PaddedName.length() < 20)
>          PaddedName += " ";
> +      std::string TNPad = "";
> +      int TNL = I->TypeName.size();
> +      while ((TNPad.length() + TNL) < 18)
> +        TNPad += " ";
>        outs() << PaddedName << "|" << SymbolAddrStr << "|   " <<
> I->TypeChar
> -             << "  |                  |" << SymbolSizeStr << "|     |\n";
> +             << "  |" << TNPad << I->TypeName << "|" << SymbolSizeStr
> +             << "|     |" << I->SectionName << "\n";
>      }
>    }
>
> @@ -1078,7 +1085,37 @@ static bool isObject(SymbolicFile &Obj,
>               : elf_symbol_iterator(I)->getELFType() == ELF::STT_OBJECT;
>  }
>
> -static char getNMTypeChar(SymbolicFile &Obj, basic_symbol_iterator I) {
> +// For ELF object files, Set TypeName to the symbol typename, to be
> printed
> +// in the 'Type' column of the SYSV format output.
> +static void getNMTypeName(SymbolicFile &Obj, basic_symbol_iterator I,
> +                          StringRef &TypeName) {
> +  if (isa<ELFObjectFileBase>(&Obj)) {
> +    elf_symbol_iterator SymI(I);
> +    SymI->getELFTypeName(TypeName);
> +  }
> +}
> +
> +// Return Posix nm class type tag (single letter), but also set SecName
> and
> +// section and name, to be used in format=sysv output.
> +static char getNMClassTagAndSectionName(SymbolicFile &Obj,
> +                                        basic_symbol_iterator I,
> +                                        StringRef &SecName) {
> +  if (isa<ELFObjectFileBase>(&Obj)) {
> +    elf_symbol_iterator SymI(I);
> +
> +    Expected<elf_section_iterator> SecIOrErr = SymI->getSection();
> +    if (!SecIOrErr) {
> +      consumeError(SecIOrErr.takeError());
> +      return '?';
> +    }
> +    int SI = SymI->getSectionIndex();
> +    if (SI == 0) {
> +      SecName = "*UND*";
> +    } else {
> +      elf_section_iterator secT = *SecIOrErr;
> +      secT->getName(SecName);
> +    }
> +  }
>    uint32_t Symflags = I->getFlags();
>    if ((Symflags & object::SymbolRef::SF_Weak) &&
> !isa<MachOObjectFile>(Obj)) {
>      char Ret = isObject(Obj, I) ? 'v' : 'w';
> @@ -1088,8 +1125,10 @@ static char getNMTypeChar(SymbolicFile &
>    if (Symflags & object::SymbolRef::SF_Undefined)
>      return 'U';
>
> -  if (Symflags & object::SymbolRef::SF_Common)
> +  if (Symflags & object::SymbolRef::SF_Common) {
> +    SecName = "*COM*";
>      return 'C';
> +  }
>
>    char Ret = '?';
>    if (Symflags & object::SymbolRef::SF_Absolute)
> @@ -1201,7 +1240,8 @@ dumpSymbolNamesFromObject(SymbolicFile &
>          }
>          S.Address = *AddressOrErr;
>        }
> -      S.TypeChar = getNMTypeChar(Obj, Sym);
> +      getNMTypeName(Obj, Sym, S.TypeName);
> +      S.TypeChar = getNMClassTagAndSectionName(Obj, Sym, S.SectionName);
>        std::error_code EC = Sym.printName(OS);
>        if (EC && MachO)
>          OS << "bad string index";
>
> Modified: llvm/trunk/tools/llvm-readobj/ELFDumper.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-readobj/ELFDumper.cpp?rev=354833&r1=354832&r2=354833&view=diff
>
> ==============================================================================
> --- llvm/trunk/tools/llvm-readobj/ELFDumper.cpp (original)
> +++ llvm/trunk/tools/llvm-readobj/ELFDumper.cpp Mon Feb 25 16:19:39 2019
> @@ -1104,16 +1104,6 @@ static const EnumEntry<unsigned> ElfSymb
>      {"HIDDEN",    "HIDDEN",    ELF::STV_HIDDEN},
>      {"PROTECTED", "PROTECTED", ELF::STV_PROTECTED}};
>
> -static const EnumEntry<unsigned> ElfSymbolTypes[] = {
> -    {"None",      "NOTYPE",  ELF::STT_NOTYPE},
> -    {"Object",    "OBJECT",  ELF::STT_OBJECT},
> -    {"Function",  "FUNC",    ELF::STT_FUNC},
> -    {"Section",   "SECTION", ELF::STT_SECTION},
> -    {"File",      "FILE",    ELF::STT_FILE},
> -    {"Common",    "COMMON",  ELF::STT_COMMON},
> -    {"TLS",       "TLS",     ELF::STT_TLS},
> -    {"GNU_IFunc", "IFUNC",   ELF::STT_GNU_IFUNC}};
> -
>  static const EnumEntry<unsigned> AMDGPUSymbolTypes[] = {
>    { "AMDGPU_HSA_KERNEL",            ELF::STT_AMDGPU_HSA_KERNEL }
>  };
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190225/baefa8f1/attachment.html>


More information about the llvm-commits mailing list