From: Vlad Tsyrklevich Date: Tue, 26 Feb 2019 07:04:56 +0000 (+0000) Subject: Revert "Improve "llvm-nm -f sysv" output for Elf files" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=728bc80a2e43308bf0356f66df30ebcab35670f1;p=llvm Revert "Improve "llvm-nm -f sysv" output for Elf files" This reverts commit r354833, it was causing ASan test failures on sanitizer-x86_64-linux-fast. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@354849 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Object/ELFObjectFile.h b/include/llvm/Object/ELFObjectFile.h index 9d0f58da11a..aab7340a9e8 100644 --- a/include/llvm/Object/ELFObjectFile.h +++ b/include/llvm/Object/ELFObjectFile.h @@ -41,8 +41,6 @@ namespace llvm { namespace object { -extern const llvm::EnumEntry ElfSymbolTypes[8]; - class elf_symbol_iterator; class ELFObjectFileBase : public ObjectFile { @@ -150,17 +148,6 @@ 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 { @@ -257,7 +244,6 @@ protected: Expected getSymbolSection(const Elf_Sym *Symb, const Elf_Shdr *SymTab) const; Expected getSymbolSection(DataRefImpl Symb) const override; - int getSymbolSectionIndex(DataRefImpl Symb) const override; void moveSectionNext(DataRefImpl &Sec) const override; std::error_code getSectionName(DataRefImpl Sec, @@ -669,13 +655,6 @@ ELFObjectFile::getSymbolSection(DataRefImpl Symb) const { return getSymbolSection(Sym, SymTab); } -template -int -ELFObjectFile::getSymbolSectionIndex(DataRefImpl Symb) const { - const Elf_Sym *Sym = getSymbol(Symb); - return Sym->st_shndx; -} - template void ELFObjectFile::moveSectionNext(DataRefImpl &Sec) const { const Elf_Shdr *ESec = getSection(Sec); diff --git a/include/llvm/Object/ObjectFile.h b/include/llvm/Object/ObjectFile.h index 31fbeb6c88e..f13775c914d 100644 --- a/include/llvm/Object/ObjectFile.h +++ b/include/llvm/Object/ObjectFile.h @@ -174,9 +174,6 @@ public: /// end_sections() if it is undefined or is an absolute symbol. Expected getSection() const; - // Get the section index of the section of this symbol - int getSectionIndex() const; - const ObjectFile *getObject() const; }; @@ -231,7 +228,6 @@ protected: virtual Expected getSymbolType(DataRefImpl Symb) const = 0; virtual Expected getSymbolSection(DataRefImpl Symb) const = 0; - virtual int getSymbolSectionIndex(DataRefImpl Symb) const { return -1; } // Same as above for SectionRef. friend class SectionRef; @@ -379,10 +375,6 @@ inline uint64_t SymbolRef::getCommonSize() const { return getObject()->getCommonSymbolSize(getRawDataRefImpl()); } -inline int SymbolRef::getSectionIndex() const { - return getObject()->getSymbolSectionIndex(getRawDataRefImpl()); -} - inline Expected SymbolRef::getSection() const { return getObject()->getSymbolSection(getRawDataRefImpl()); } diff --git a/lib/Object/ELFObjectFile.cpp b/lib/Object/ELFObjectFile.cpp index 822cee7212b..15e09f8116b 100644 --- a/lib/Object/ELFObjectFile.cpp +++ b/lib/Object/ELFObjectFile.cpp @@ -35,16 +35,6 @@ using namespace llvm; using namespace object; -const EnumEntry 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) {} diff --git a/test/tools/llvm-nm/X86/sysv-i386.test b/test/tools/llvm-nm/X86/sysv-i386.test index d3d43247d36..b9b1f6024b1 100644 --- a/test/tools/llvm-nm/X86/sysv-i386.test +++ b/test/tools/llvm-nm/X86/sysv-i386.test @@ -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 | OBJECT|0000000f| |.rodata.str1.1 -CHECK: main |00000000| T | FUNC|00000015| |.text -CHECK: puts | | U | NOTYPE| | |*UND* +CHECK: .L.str |00000000| r | |0000000f| | +CHECK: main |00000000| T | |00000015| | +CHECK: puts | | U | | | | diff --git a/test/tools/llvm-nm/X86/sysv-x86_64.test b/test/tools/llvm-nm/X86/sysv-x86_64.test index c517af97ad8..bf041b202f7 100644 --- a/test/tools/llvm-nm/X86/sysv-x86_64.test +++ b/test/tools/llvm-nm/X86/sysv-x86_64.test @@ -2,8 +2,8 @@ RUN: llvm-nm -f sysv %p/Inputs/hello.obj.elf-x86_64 | FileCheck %s --check-prefi 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 | FUNC|0000000000000015| |.text -ELF: puts | | U | NOTYPE| | |*UND* +ELF: main |0000000000000000| T | |0000000000000015| | +ELF: puts | | U | | | | MACHO: Name Value Class Type Size Line Section MACHO: EH_frame0 |0000000000000068| s | |0000000000000000| | diff --git a/tools/llvm-nm/llvm-nm.cpp b/tools/llvm-nm/llvm-nm.cpp index 55ef0b7661f..a7346d56f32 100644 --- a/tools/llvm-nm/llvm-nm.cpp +++ b/tools/llvm-nm/llvm-nm.cpp @@ -262,8 +262,6 @@ 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 @@ -884,13 +882,8 @@ static void sortAndPrintSymbolList(SymbolicFile &Obj, bool printName, 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 - << " |" << TNPad << I->TypeName << "|" << SymbolSizeStr - << "| |" << I->SectionName << "\n"; + << " | |" << SymbolSizeStr << "| |\n"; } } @@ -1085,37 +1078,7 @@ static bool isObject(SymbolicFile &Obj, basic_symbol_iterator I) { : elf_symbol_iterator(I)->getELFType() == ELF::STT_OBJECT; } -// 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(&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(&Obj)) { - elf_symbol_iterator SymI(I); - - Expected 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); - } - } +static char getNMTypeChar(SymbolicFile &Obj, basic_symbol_iterator I) { uint32_t Symflags = I->getFlags(); if ((Symflags & object::SymbolRef::SF_Weak) && !isa(Obj)) { char Ret = isObject(Obj, I) ? 'v' : 'w'; @@ -1125,10 +1088,8 @@ static char getNMClassTagAndSectionName(SymbolicFile &Obj, if (Symflags & object::SymbolRef::SF_Undefined) return 'U'; - if (Symflags & object::SymbolRef::SF_Common) { - SecName = "*COM*"; + if (Symflags & object::SymbolRef::SF_Common) return 'C'; - } char Ret = '?'; if (Symflags & object::SymbolRef::SF_Absolute) @@ -1240,8 +1201,7 @@ dumpSymbolNamesFromObject(SymbolicFile &Obj, bool printName, } S.Address = *AddressOrErr; } - getNMTypeName(Obj, Sym, S.TypeName); - S.TypeChar = getNMClassTagAndSectionName(Obj, Sym, S.SectionName); + S.TypeChar = getNMTypeChar(Obj, Sym); std::error_code EC = Sym.printName(OS); if (EC && MachO) OS << "bad string index"; diff --git a/tools/llvm-readobj/ELFDumper.cpp b/tools/llvm-readobj/ELFDumper.cpp index 53c390cffe4..ae2ac56e991 100644 --- a/tools/llvm-readobj/ELFDumper.cpp +++ b/tools/llvm-readobj/ELFDumper.cpp @@ -1104,6 +1104,16 @@ static const EnumEntry ElfSymbolVisibilities[] = { {"HIDDEN", "HIDDEN", ELF::STV_HIDDEN}, {"PROTECTED", "PROTECTED", ELF::STV_PROTECTED}}; +static const EnumEntry 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 AMDGPUSymbolTypes[] = { { "AMDGPU_HSA_KERNEL", ELF::STT_AMDGPU_HSA_KERNEL } };