mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
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. llvm-svn: 354849
This commit is contained in:
parent
b5d36736f7
commit
257ec8cb69
@ -41,8 +41,6 @@
|
||||
namespace llvm {
|
||||
namespace object {
|
||||
|
||||
extern const llvm::EnumEntry<unsigned> 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<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,
|
||||
@ -669,13 +655,6 @@ ELFObjectFile<ELFT>::getSymbolSection(DataRefImpl Symb) const {
|
||||
return getSymbolSection(Sym, SymTab);
|
||||
}
|
||||
|
||||
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);
|
||||
|
@ -174,9 +174,6 @@ 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;
|
||||
};
|
||||
|
||||
@ -231,7 +228,6 @@ 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;
|
||||
@ -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<section_iterator> SymbolRef::getSection() const {
|
||||
return getObject()->getSymbolSection(getRawDataRefImpl());
|
||||
}
|
||||
|
@ -35,16 +35,6 @@
|
||||
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) {}
|
||||
|
||||
|
@ -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 | | | |
|
||||
|
@ -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| |
|
||||
|
@ -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<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);
|
||||
}
|
||||
}
|
||||
static char getNMTypeChar(SymbolicFile &Obj, basic_symbol_iterator I) {
|
||||
uint32_t Symflags = I->getFlags();
|
||||
if ((Symflags & object::SymbolRef::SF_Weak) && !isa<MachOObjectFile>(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";
|
||||
|
@ -1104,6 +1104,16 @@ static const EnumEntry<unsigned> ElfSymbolVisibilities[] = {
|
||||
{"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 }
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user