diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2017-08-02 17:35:18 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2017-08-02 17:35:18 +0000 |
commit | 3a8e4d98f88c0bc4436df6e37cf8dee3ea36c507 (patch) | |
tree | fc401a838ba921e604da450802d0b47c0b346169 | |
parent | 80a1c26a3f472e3d822ac79cc4066aa94777d067 (diff) | |
download | bcm5719-llvm-3a8e4d98f88c0bc4436df6e37cf8dee3ea36c507.tar.gz bcm5719-llvm-3a8e4d98f88c0bc4436df6e37cf8dee3ea36c507.zip |
Use more consistent names
Reviewing another change I noticed that we use "getSymbols" to mean
different things in different files. Depending on the file it can
return
ArrayRef<StringRef>
ArrayRef<SymbolBody*>
ArrayRef<Symbol*>
ArrayRef<Elf_Sym>
With this change it always returns an ArrayRef<SymbolBody*>. The other
functions are renamed getELFsyms() and getSymbolNames().
Note that we cannot return ArrayRef<Symbol*> instead of
ArreyRef<SymbolBody*> because local symbols have a SymbolBody but not
a Symbol.
llvm-svn: 309840
-rw-r--r-- | lld/ELF/Driver.cpp | 4 | ||||
-rw-r--r-- | lld/ELF/GdbIndex.cpp | 2 | ||||
-rw-r--r-- | lld/ELF/InputFiles.cpp | 33 | ||||
-rw-r--r-- | lld/ELF/InputFiles.h | 16 | ||||
-rw-r--r-- | lld/ELF/LTO.cpp | 6 | ||||
-rw-r--r-- | lld/ELF/Relocations.cpp | 2 |
6 files changed, 32 insertions, 31 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp index 263ba7b9e2b..a52693b0537 100644 --- a/lld/ELF/Driver.cpp +++ b/lld/ELF/Driver.cpp @@ -942,8 +942,8 @@ static void excludeLibs(opt::InputArgList &Args, ArrayRef<InputFile *> Files) { for (InputFile *File : Files) if (auto *F = dyn_cast<ArchiveFile>(File)) if (All || Libs.count(path::filename(F->getName()))) - for (Symbol *Sym : F->getSymbols()) - Sym->VersionId = VER_NDX_LOCAL; + for (SymbolBody *Sym : F->getSymbols()) + Sym->symbol()->VersionId = VER_NDX_LOCAL; } // Do actual linking. Note that when this function is called, diff --git a/lld/ELF/GdbIndex.cpp b/lld/ELF/GdbIndex.cpp index 952092182fb..1258bdaea2e 100644 --- a/lld/ELF/GdbIndex.cpp +++ b/lld/ELF/GdbIndex.cpp @@ -88,7 +88,7 @@ LLDDwarfObj<ELFT>::findAux(const InputSectionBase &Sec, uint64_t Pos, const ObjFile<ELFT> *File = Sec.getFile<ELFT>(); uint32_t SymIndex = Rel.getSymbol(Config->IsMips64EL); - const typename ELFT::Sym &Sym = File->getELFSymbols()[SymIndex]; + const typename ELFT::Sym &Sym = File->getELFSyms()[SymIndex]; uint32_t SecIndex = File->getSectionIndex(Sym); SymbolBody &B = File->getRelocTargetSym(Rel); auto &DR = cast<DefinedRegular>(B); diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index a6cd1a6e3a8..40793161c3a 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -133,13 +133,13 @@ ELFFileBase<ELFT>::ELFFileBase(Kind K, MemoryBufferRef MB) : InputFile(K, MB) { } template <class ELFT> -typename ELFT::SymRange ELFFileBase<ELFT>::getGlobalSymbols() { - return makeArrayRef(Symbols.begin() + FirstNonLocal, Symbols.end()); +typename ELFT::SymRange ELFFileBase<ELFT>::getGlobalELFSyms() { + return makeArrayRef(ELFSyms.begin() + FirstNonLocal, ELFSyms.end()); } template <class ELFT> uint32_t ELFFileBase<ELFT>::getSectionIndex(const Elf_Sym &Sym) const { - return check(getObj().getSectionIndex(&Sym, Symbols, SymtabSHNDX), + return check(getObj().getSectionIndex(&Sym, ELFSyms, SymtabSHNDX), toString(this)); } @@ -147,8 +147,8 @@ template <class ELFT> void ELFFileBase<ELFT>::initSymtab(ArrayRef<Elf_Shdr> Sections, const Elf_Shdr *Symtab) { FirstNonLocal = Symtab->sh_info; - Symbols = check(getObj().symbols(Symtab), toString(this)); - if (FirstNonLocal == 0 || FirstNonLocal > Symbols.size()) + ELFSyms = check(getObj().symbols(Symtab), toString(this)); + if (FirstNonLocal == 0 || FirstNonLocal > ELFSyms.size()) fatal(toString(this) + ": invalid sh_info in symbol table"); StringTable = check(getObj().getStringTableForSymtab(*Symtab, Sections), @@ -188,13 +188,13 @@ StringRef ObjFile<ELFT>::getShtGroupSignature(ArrayRef<Elf_Shdr> Sections, const Elf_Shdr &Sec) { // Group signatures are stored as symbol names in object files. // sh_info contains a symbol index, so we fetch a symbol and read its name. - if (this->Symbols.empty()) + if (this->ELFSyms.empty()) this->initSymtab( Sections, check(object::getSection<ELFT>(Sections, Sec.sh_link), toString(this))); const Elf_Sym *Sym = check( - object::getSymbol<ELFT>(this->Symbols, Sec.sh_info), toString(this)); + object::getSymbol<ELFT>(this->ELFSyms, Sec.sh_info), toString(this)); StringRef Signature = check(Sym->getName(this->StringTable), toString(this)); // As a special case, if a symbol is a section symbol and has no name, @@ -523,8 +523,8 @@ StringRef ObjFile<ELFT>::getSectionName(const Elf_Shdr &Sec) { } template <class ELFT> void ObjFile<ELFT>::initializeSymbols() { - SymbolBodies.reserve(this->Symbols.size()); - for (const Elf_Sym &Sym : this->Symbols) + SymbolBodies.reserve(this->ELFSyms.size()); + for (const Elf_Sym &Sym : this->ELFSyms) SymbolBodies.push_back(createSymbolBody(&Sym)); } @@ -617,7 +617,7 @@ ArchiveFile::ArchiveFile(std::unique_ptr<Archive> &&File) template <class ELFT> void ArchiveFile::parse() { Symbols.reserve(File->getNumberOfSymbols()); for (const Archive::Symbol &Sym : File->symbols()) - Symbols.push_back(Symtab->addLazyArchive<ELFT>(this, Sym)); + Symbols.push_back(Symtab->addLazyArchive<ELFT>(this, Sym)->body()); } // Returns a buffer pointing to a member file containing a given symbol. @@ -654,7 +654,7 @@ template <class ELFT> const typename ELFT::Shdr * SharedFile<ELFT>::getSection(const Elf_Sym &Sym) const { return check( - this->getObj().getSection(&Sym, this->Symbols, this->SymtabSHNDX), + this->getObj().getSection(&Sym, this->ELFSyms, this->SymtabSHNDX), toString(this)); } @@ -689,7 +689,7 @@ template <class ELFT> void SharedFile<ELFT>::parseSoName() { } } - if (this->VersymSec && this->Symbols.empty()) + if (this->VersymSec && this->ELFSyms.empty()) error("SHT_GNU_versym should be associated with symbol table"); // Search for a DT_SONAME tag to initialize this->SoName. @@ -756,7 +756,7 @@ template <class ELFT> void SharedFile<ELFT>::parseRest() { const Elf_Versym *Versym = nullptr; std::vector<const Elf_Verdef *> Verdefs = parseVerdefs(Versym); - Elf_Sym_Range Syms = this->getGlobalSymbols(); + Elf_Sym_Range Syms = this->getGlobalELFSyms(); for (const Elf_Sym &Sym : Syms) { unsigned VersymIndex = 0; if (Versym) { @@ -899,7 +899,8 @@ void BitcodeFile::parse(DenseSet<CachedHashStringRef> &ComdatGroups) { KeptComdats.push_back(ComdatGroups.insert(CachedHashStringRef(S)).second); for (const lto::InputFile::Symbol &ObjSym : Obj->symbols()) - Symbols.push_back(createBitcodeSymbol<ELFT>(KeptComdats, ObjSym, this)); + Symbols.push_back( + createBitcodeSymbol<ELFT>(KeptComdats, ObjSym, this)->body()); } static ELFKind getELFKind(MemoryBufferRef MB) { @@ -1001,7 +1002,7 @@ InputFile *LazyObjFile::fetch() { } template <class ELFT> void LazyObjFile::parse() { - for (StringRef Sym : getSymbols()) + for (StringRef Sym : getSymbolNames()) Symtab->addLazyObject<ELFT>(Sym, *this); } @@ -1041,7 +1042,7 @@ std::vector<StringRef> LazyObjFile::getBitcodeSymbols() { } // Returns a vector of globally-visible defined symbol names. -std::vector<StringRef> LazyObjFile::getSymbols() { +std::vector<StringRef> LazyObjFile::getSymbolNames() { if (isBitcode(this->MB)) return getBitcodeSymbols(); diff --git a/lld/ELF/InputFiles.h b/lld/ELF/InputFiles.h index b791bcb7019..ba6679f4867 100644 --- a/lld/ELF/InputFiles.h +++ b/lld/ELF/InputFiles.h @@ -126,11 +126,11 @@ public: uint32_t getSectionIndex(const Elf_Sym &Sym) const; - Elf_Sym_Range getGlobalSymbols(); - Elf_Sym_Range getELFSymbols() const { return Symbols; } + Elf_Sym_Range getGlobalELFSyms(); + Elf_Sym_Range getELFSyms() const { return ELFSyms; } protected: - ArrayRef<Elf_Sym> Symbols; + ArrayRef<Elf_Sym> ELFSyms; uint32_t FirstNonLocal = 0; ArrayRef<Elf_Word> SymtabSHNDX; StringRef StringTable; @@ -244,7 +244,7 @@ public: InputFile *fetch(); private: - std::vector<StringRef> getSymbols(); + std::vector<StringRef> getSymbolNames(); template <class ELFT> std::vector<StringRef> getElfSymbols(); std::vector<StringRef> getBitcodeSymbols(); @@ -258,7 +258,7 @@ public: explicit ArchiveFile(std::unique_ptr<Archive> &&File); static bool classof(const InputFile *F) { return F->kind() == ArchiveKind; } template <class ELFT> void parse(); - ArrayRef<Symbol *> getSymbols() { return Symbols; } + ArrayRef<SymbolBody *> getSymbols() { return Symbols; } // Returns a memory buffer for a given symbol and the offset in the archive // for the member. An empty memory buffer and an offset of zero @@ -269,7 +269,7 @@ public: private: std::unique_ptr<Archive> File; llvm::DenseSet<uint64_t> Seen; - std::vector<Symbol *> Symbols; + std::vector<SymbolBody *> Symbols; }; class BitcodeFile : public InputFile { @@ -279,12 +279,12 @@ public: static bool classof(const InputFile *F) { return F->kind() == BitcodeKind; } template <class ELFT> void parse(llvm::DenseSet<llvm::CachedHashStringRef> &ComdatGroups); - ArrayRef<Symbol *> getSymbols() { return Symbols; } + ArrayRef<SymbolBody *> getSymbols() { return Symbols; } std::unique_ptr<llvm::lto::InputFile> Obj; static std::vector<BitcodeFile *> Instances; private: - std::vector<Symbol *> Symbols; + std::vector<SymbolBody *> Symbols; }; // .so file. diff --git a/lld/ELF/LTO.cpp b/lld/ELF/LTO.cpp index bf2dadc6c3c..3657f7c867c 100644 --- a/lld/ELF/LTO.cpp +++ b/lld/ELF/LTO.cpp @@ -127,15 +127,15 @@ static void undefine(Symbol *S) { void BitcodeCompiler::add(BitcodeFile &F) { lto::InputFile &Obj = *F.Obj; unsigned SymNum = 0; - std::vector<Symbol *> Syms = F.getSymbols(); + std::vector<SymbolBody *> Syms = F.getSymbols(); std::vector<lto::SymbolResolution> Resols(Syms.size()); // Provide a resolution to the LTO API for each symbol. for (const lto::InputFile::Symbol &ObjSym : Obj.symbols()) { - Symbol *Sym = Syms[SymNum]; + SymbolBody *B = Syms[SymNum]; + Symbol *Sym = B->symbol(); lto::SymbolResolution &R = Resols[SymNum]; ++SymNum; - SymbolBody *B = Sym->body(); // Ideally we shouldn't check for SF_Undefined but currently IRObjectFile // reports two symbols for module ASM defined. Without this check, lld diff --git a/lld/ELF/Relocations.cpp b/lld/ELF/Relocations.cpp index efbebc0d070..aafb99a8d1d 100644 --- a/lld/ELF/Relocations.cpp +++ b/lld/ELF/Relocations.cpp @@ -457,7 +457,7 @@ static std::vector<SharedSymbol *> getSymbolsAt(SharedSymbol *SS) { uint64_t Value = SS->getValue<ELFT>(); std::vector<SharedSymbol *> Ret; - for (const Elf_Sym &S : File->getGlobalSymbols()) { + for (const Elf_Sym &S : File->getGlobalELFSyms()) { if (S.st_shndx != Shndx || S.st_value != Value) continue; StringRef Name = check(S.getName(File->getStringTable())); |