[lld] r317370 - Rename SymbolBody -> Symbol
Rui Ueyama via llvm-commits
llvm-commits at lists.llvm.org
Fri Nov 3 14:21:47 PDT 2017
Author: ruiu
Date: Fri Nov 3 14:21:47 2017
New Revision: 317370
URL: http://llvm.org/viewvc/llvm-project?rev=317370&view=rev
Log:
Rename SymbolBody -> Symbol
Now that we have only SymbolBody as the symbol class. So, "SymbolBody"
is a bit strange name now. This is a mechanical change generated by
perl -i -pe s/SymbolBody/Symbol/g $(git grep -l SymbolBody lld/ELF lld/COFF)
nd clang-format-diff.
Differential Revision: https://reviews.llvm.org/D39459
Modified:
lld/trunk/COFF/Chunks.cpp
lld/trunk/COFF/Chunks.h
lld/trunk/COFF/Config.h
lld/trunk/COFF/Driver.cpp
lld/trunk/COFF/Driver.h
lld/trunk/COFF/DriverUtils.cpp
lld/trunk/COFF/ICF.cpp
lld/trunk/COFF/InputFiles.cpp
lld/trunk/COFF/InputFiles.h
lld/trunk/COFF/LTO.cpp
lld/trunk/COFF/MapFile.cpp
lld/trunk/COFF/MarkLive.cpp
lld/trunk/COFF/PDB.cpp
lld/trunk/COFF/SymbolTable.cpp
lld/trunk/COFF/SymbolTable.h
lld/trunk/COFF/Symbols.cpp
lld/trunk/COFF/Symbols.h
lld/trunk/COFF/Writer.cpp
lld/trunk/ELF/Arch/AArch64.cpp
lld/trunk/ELF/Arch/AMDGPU.cpp
lld/trunk/ELF/Arch/ARM.cpp
lld/trunk/ELF/Arch/AVR.cpp
lld/trunk/ELF/Arch/Mips.cpp
lld/trunk/ELF/Arch/PPC.cpp
lld/trunk/ELF/Arch/PPC64.cpp
lld/trunk/ELF/Arch/SPARCV9.cpp
lld/trunk/ELF/Arch/X86.cpp
lld/trunk/ELF/Arch/X86_64.cpp
lld/trunk/ELF/Driver.cpp
lld/trunk/ELF/GdbIndex.cpp
lld/trunk/ELF/ICF.cpp
lld/trunk/ELF/InputFiles.cpp
lld/trunk/ELF/InputFiles.h
lld/trunk/ELF/InputSection.cpp
lld/trunk/ELF/InputSection.h
lld/trunk/ELF/LTO.cpp
lld/trunk/ELF/LinkerScript.cpp
lld/trunk/ELF/LinkerScript.h
lld/trunk/ELF/MapFile.cpp
lld/trunk/ELF/MarkLive.cpp
lld/trunk/ELF/OutputSections.cpp
lld/trunk/ELF/OutputSections.h
lld/trunk/ELF/Relocations.cpp
lld/trunk/ELF/Relocations.h
lld/trunk/ELF/SymbolTable.cpp
lld/trunk/ELF/SymbolTable.h
lld/trunk/ELF/Symbols.cpp
lld/trunk/ELF/Symbols.h
lld/trunk/ELF/SyntheticSections.cpp
lld/trunk/ELF/SyntheticSections.h
lld/trunk/ELF/Target.cpp
lld/trunk/ELF/Target.h
lld/trunk/ELF/Thunks.cpp
lld/trunk/ELF/Thunks.h
lld/trunk/ELF/Writer.cpp
Modified: lld/trunk/COFF/Chunks.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Chunks.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/Chunks.cpp (original)
+++ lld/trunk/COFF/Chunks.cpp Fri Nov 3 14:21:47 2017
@@ -251,7 +251,7 @@ void SectionChunk::writeTo(uint8_t *Buf)
// Get the output section of the symbol for this relocation. The output
// section is needed to compute SECREL and SECTION relocations used in debug
// info.
- SymbolBody *Body = File->getSymbolBody(Rel.SymbolTableIndex);
+ Symbol *Body = File->getSymbol(Rel.SymbolTableIndex);
Defined *Sym = cast<Defined>(Body);
Chunk *C = Sym->getChunk();
OutputSection *OS = C ? C->getOutputSection() : nullptr;
@@ -328,7 +328,7 @@ void SectionChunk::getBaserels(std::vect
uint8_t Ty = getBaserelType(Rel);
if (Ty == IMAGE_REL_BASED_ABSOLUTE)
continue;
- SymbolBody *Body = File->getSymbolBody(Rel.SymbolTableIndex);
+ Symbol *Body = File->getSymbol(Rel.SymbolTableIndex);
if (isa<DefinedAbsolute>(Body))
continue;
Res->emplace_back(RVA + Rel.VirtualAddress, Ty);
Modified: lld/trunk/COFF/Chunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Chunks.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/Chunks.h (original)
+++ lld/trunk/COFF/Chunks.h Fri Nov 3 14:21:47 2017
@@ -35,7 +35,7 @@ class DefinedImportData;
class DefinedRegular;
class ObjFile;
class OutputSection;
-class SymbolBody;
+class Symbol;
// Mask for section types (code, data, bss, disacardable, etc.)
// and permissions (writable, readable or executable).
@@ -117,7 +117,7 @@ class SectionChunk final : public Chunk
public:
class symbol_iterator : public llvm::iterator_adaptor_base<
symbol_iterator, const coff_relocation *,
- std::random_access_iterator_tag, SymbolBody *> {
+ std::random_access_iterator_tag, Symbol *> {
friend SectionChunk;
ObjFile *File;
@@ -128,9 +128,7 @@ public:
public:
symbol_iterator() = default;
- SymbolBody *operator*() const {
- return File->getSymbolBody(I->SymbolTableIndex);
- }
+ Symbol *operator*() const { return File->getSymbol(I->SymbolTableIndex); }
};
SectionChunk(ObjFile *File, const coff_section *Header);
Modified: lld/trunk/COFF/Config.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Config.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/Config.h (original)
+++ lld/trunk/COFF/Config.h Fri Nov 3 14:21:47 2017
@@ -27,7 +27,7 @@ using llvm::StringRef;
class DefinedAbsolute;
class DefinedRelative;
class StringChunk;
-class SymbolBody;
+class Symbol;
// Short aliases.
static const auto AMD64 = llvm::COFF::IMAGE_FILE_MACHINE_AMD64;
@@ -39,7 +39,7 @@ static const auto I386 = llvm::COFF::IMA
struct Export {
StringRef Name; // N in /export:N or /export:E=N
StringRef ExtName; // E in /export:E=N
- SymbolBody *Sym = nullptr;
+ Symbol *Sym = nullptr;
uint16_t Ordinal = 0;
bool Noname = false;
bool Data = false;
@@ -79,7 +79,7 @@ struct Configuration {
llvm::COFF::MachineTypes Machine = IMAGE_FILE_MACHINE_UNKNOWN;
bool Verbose = false;
WindowsSubsystem Subsystem = llvm::COFF::IMAGE_SUBSYSTEM_UNKNOWN;
- SymbolBody *Entry = nullptr;
+ Symbol *Entry = nullptr;
bool NoEntry = false;
std::string OutputFile;
std::string ImportName;
@@ -94,7 +94,7 @@ struct Configuration {
std::vector<llvm::StringRef> Argv;
// Symbols in this set are considered as live by the garbage collector.
- std::set<SymbolBody *> GCRoot;
+ std::set<Symbol *> GCRoot;
std::set<StringRef> NoDefaultLibs;
bool NoDefaultLibAll = false;
@@ -105,13 +105,13 @@ struct Configuration {
std::vector<Export> Exports;
std::set<std::string> DelayLoads;
std::map<std::string, int> DLLOrder;
- SymbolBody *DelayLoadHelper = nullptr;
+ Symbol *DelayLoadHelper = nullptr;
bool SaveTemps = false;
// Used for SafeSEH.
- SymbolBody *SEHTable = nullptr;
- SymbolBody *SEHCount = nullptr;
+ Symbol *SEHTable = nullptr;
+ Symbol *SEHCount = nullptr;
// Used for /opt:lldlto=N
unsigned LTOOptLevel = 2;
Modified: lld/trunk/COFF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/Driver.cpp (original)
+++ lld/trunk/COFF/Driver.cpp Fri Nov 3 14:21:47 2017
@@ -353,8 +353,8 @@ void LinkerDriver::addLibSearchPaths() {
}
}
-SymbolBody *LinkerDriver::addUndefined(StringRef Name) {
- SymbolBody *B = Symtab->addUndefined(Name);
+Symbol *LinkerDriver::addUndefined(StringRef Name) {
+ Symbol *B = Symtab->addUndefined(Name);
Config->GCRoot.insert(B);
return B;
}
@@ -1181,7 +1181,7 @@ void LinkerDriver::link(ArrayRef<const c
for (auto Pair : Config->AlternateNames) {
StringRef From = Pair.first;
StringRef To = Pair.second;
- SymbolBody *Sym = Symtab->find(From);
+ Symbol *Sym = Symtab->find(From);
if (!Sym)
continue;
if (auto *U = dyn_cast<Undefined>(Sym))
@@ -1237,7 +1237,7 @@ void LinkerDriver::link(ArrayRef<const c
Args.hasArg(OPT_export_all_symbols))) {
AutoExporter Exporter;
- Symtab->forEachSymbol([=](SymbolBody *S) {
+ Symtab->forEachSymbol([=](Symbol *S) {
auto *Def = dyn_cast<Defined>(S);
if (!Exporter.shouldExport(Def))
return;
@@ -1268,7 +1268,7 @@ void LinkerDriver::link(ArrayRef<const c
StringRef Name = Pair.first;
uint32_t Alignment = Pair.second;
- SymbolBody *Sym = Symtab->find(Name);
+ Symbol *Sym = Symtab->find(Name);
if (!Sym) {
warn("/aligncomm symbol " + Name + " not found");
continue;
Modified: lld/trunk/COFF/Driver.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/Driver.h (original)
+++ lld/trunk/COFF/Driver.h Fri Nov 3 14:21:47 2017
@@ -96,7 +96,7 @@ private:
std::set<std::string> VisitedFiles;
std::set<std::string> VisitedLibs;
- SymbolBody *addUndefined(StringRef Sym);
+ Symbol *addUndefined(StringRef Sym);
StringRef mangle(StringRef Sym);
// Windows specific -- "main" is not the only main function in Windows.
Modified: lld/trunk/COFF/DriverUtils.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/DriverUtils.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/DriverUtils.cpp (original)
+++ lld/trunk/COFF/DriverUtils.cpp Fri Nov 3 14:21:47 2017
@@ -574,7 +574,7 @@ void fixupExports() {
}
for (Export &E : Config->Exports) {
- SymbolBody *Sym = E.Sym;
+ Symbol *Sym = E.Sym;
if (!E.ForwardTo.empty() || !Sym) {
E.SymbolName = E.Name;
} else {
Modified: lld/trunk/COFF/ICF.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/ICF.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/ICF.cpp (original)
+++ lld/trunk/COFF/ICF.cpp Fri Nov 3 14:21:47 2017
@@ -119,8 +119,8 @@ bool ICF::equalsConstant(const SectionCh
R1.VirtualAddress != R2.VirtualAddress) {
return false;
}
- SymbolBody *B1 = A->File->getSymbolBody(R1.SymbolTableIndex);
- SymbolBody *B2 = B->File->getSymbolBody(R2.SymbolTableIndex);
+ Symbol *B1 = A->File->getSymbol(R1.SymbolTableIndex);
+ Symbol *B2 = B->File->getSymbol(R2.SymbolTableIndex);
if (B1 == B2)
return true;
if (auto *D1 = dyn_cast<DefinedRegular>(B1))
@@ -143,8 +143,8 @@ bool ICF::equalsConstant(const SectionCh
bool ICF::equalsVariable(const SectionChunk *A, const SectionChunk *B) {
// Compare relocations.
auto Eq = [&](const coff_relocation &R1, const coff_relocation &R2) {
- SymbolBody *B1 = A->File->getSymbolBody(R1.SymbolTableIndex);
- SymbolBody *B2 = B->File->getSymbolBody(R2.SymbolTableIndex);
+ Symbol *B1 = A->File->getSymbol(R1.SymbolTableIndex);
+ Symbol *B2 = B->File->getSymbol(R2.SymbolTableIndex);
if (B1 == B2)
return true;
if (auto *D1 = dyn_cast<DefinedRegular>(B1))
Modified: lld/trunk/COFF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/InputFiles.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/InputFiles.cpp (original)
+++ lld/trunk/COFF/InputFiles.cpp Fri Nov 3 14:21:47 2017
@@ -51,7 +51,7 @@ std::vector<BitcodeFile *> BitcodeFile::
/// If Source is Undefined and has no weak alias set, makes it a weak
/// alias to Target.
static void checkAndSetWeakAlias(SymbolTable *Symtab, InputFile *F,
- SymbolBody *Source, SymbolBody *Target) {
+ Symbol *Source, Symbol *Target) {
if (auto *U = dyn_cast<Undefined>(Source)) {
if (U->WeakAlias && U->WeakAlias != Target)
Symtab->reportDuplicate(Source, F);
@@ -175,7 +175,7 @@ void ObjFile::initializeSymbols() {
SymbolBodies.reserve(NumSymbols);
SparseSymbolBodies.resize(NumSymbols);
- SmallVector<std::pair<SymbolBody *, uint32_t>, 8> WeakAliases;
+ SmallVector<std::pair<Symbol *, uint32_t>, 8> WeakAliases;
int32_t LastSectionNumber = 0;
for (uint32_t I = 0; I < NumSymbols; ++I) {
@@ -186,7 +186,7 @@ void ObjFile::initializeSymbols() {
AuxP = check(COFFObj->getSymbol(I + 1)).getRawPtr();
bool IsFirst = (LastSectionNumber != Sym.getSectionNumber());
- SymbolBody *Body = nullptr;
+ Symbol *Body = nullptr;
if (Sym.isUndefined()) {
Body = createUndefined(Sym);
} else if (Sym.isWeakExternal()) {
@@ -206,26 +206,26 @@ void ObjFile::initializeSymbols() {
}
for (auto &KV : WeakAliases) {
- SymbolBody *Sym = KV.first;
+ Symbol *Sym = KV.first;
uint32_t Idx = KV.second;
checkAndSetWeakAlias(Symtab, this, Sym, SparseSymbolBodies[Idx]);
}
}
-SymbolBody *ObjFile::createUndefined(COFFSymbolRef Sym) {
+Symbol *ObjFile::createUndefined(COFFSymbolRef Sym) {
StringRef Name;
COFFObj->getSymbolName(Sym, Name);
return Symtab->addUndefined(Name, this, Sym.isWeakExternal());
}
-SymbolBody *ObjFile::createDefined(COFFSymbolRef Sym, const void *AuxP,
- bool IsFirst) {
+Symbol *ObjFile::createDefined(COFFSymbolRef Sym, const void *AuxP,
+ bool IsFirst) {
StringRef Name;
if (Sym.isCommon()) {
auto *C = make<CommonChunk>(Sym);
Chunks.push_back(C);
COFFObj->getSymbolName(Sym, Name);
- SymbolBody *S =
+ Symbol *S =
Symtab->addCommon(this, Name, Sym.getValue(), Sym.getGeneric(), C);
return S;
}
@@ -280,7 +280,7 @@ SymbolBody *ObjFile::createDefined(COFFS
DefinedRegular *B;
if (Sym.isExternal()) {
COFFObj->getSymbolName(Sym, Name);
- SymbolBody *S =
+ Symbol *S =
Symtab->addRegular(this, Name, SC->isCOMDAT(), Sym.getGeneric(), SC);
B = cast<DefinedRegular>(S);
} else
@@ -368,7 +368,7 @@ void BitcodeFile::parse() {
MB.getBuffer(), Saver.save(ParentName + MB.getBufferIdentifier()))));
for (const lto::InputFile::Symbol &ObjSym : Obj->symbols()) {
StringRef SymName = Saver.save(ObjSym.getName());
- SymbolBody *Sym;
+ Symbol *Sym;
if (ObjSym.isUndefined()) {
Sym = Symtab->addUndefined(SymName, this, false);
} else if (ObjSym.isCommon()) {
@@ -377,7 +377,7 @@ void BitcodeFile::parse() {
// Weak external.
Sym = Symtab->addUndefined(SymName, this, true);
std::string Fallback = ObjSym.getCOFFWeakExternalFallback();
- SymbolBody *Alias = Symtab->addUndefined(Saver.save(Fallback));
+ Symbol *Alias = Symtab->addUndefined(Saver.save(Fallback));
checkAndSetWeakAlias(Symtab, this, Sym, Alias);
} else {
bool IsCOMDAT = ObjSym.getComdatIndex() != -1;
Modified: lld/trunk/COFF/InputFiles.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/InputFiles.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/InputFiles.h (original)
+++ lld/trunk/COFF/InputFiles.h Fri Nov 3 14:21:47 2017
@@ -47,7 +47,7 @@ class DefinedImportData;
class DefinedImportThunk;
class Lazy;
class SectionChunk;
-class SymbolBody;
+class Symbol;
class Undefined;
// The root class of input files.
@@ -110,11 +110,11 @@ public:
MachineTypes getMachineType() override;
std::vector<Chunk *> &getChunks() { return Chunks; }
std::vector<SectionChunk *> &getDebugChunks() { return DebugChunks; }
- std::vector<SymbolBody *> &getSymbols() { return SymbolBodies; }
+ std::vector<Symbol *> &getSymbols() { return SymbolBodies; }
- // Returns a SymbolBody object for the SymbolIndex'th symbol in the
+ // Returns a Symbol object for the SymbolIndex'th symbol in the
// underlying object file.
- SymbolBody *getSymbolBody(uint32_t SymbolIndex) {
+ Symbol *getSymbol(uint32_t SymbolIndex) {
return SparseSymbolBodies[SymbolIndex];
}
@@ -129,7 +129,7 @@ public:
// The list of safe exception handlers listed in .sxdata section.
// COFF-specific and x86-only.
- std::set<SymbolBody *> SEHandlers;
+ std::set<Symbol *> SEHandlers;
// Pointer to the PDB module descriptor builder. Various debug info records
// will reference object files by "module index", which is here. Things like
@@ -142,8 +142,8 @@ private:
void initializeSymbols();
void initializeSEH();
- SymbolBody *createDefined(COFFSymbolRef Sym, const void *Aux, bool IsFirst);
- SymbolBody *createUndefined(COFFSymbolRef Sym);
+ Symbol *createDefined(COFFSymbolRef Sym, const void *Aux, bool IsFirst);
+ Symbol *createUndefined(COFFSymbolRef Sym);
std::unique_ptr<COFFObjectFile> COFFObj;
const coff_section *SXData = nullptr;
@@ -163,13 +163,13 @@ private:
std::vector<Chunk *> SparseChunks;
// List of all symbols referenced or defined by this file.
- std::vector<SymbolBody *> SymbolBodies;
+ std::vector<Symbol *> SymbolBodies;
// This vector contains the same symbols as SymbolBodies, but they
- // are indexed such that you can get a SymbolBody by symbol
+ // are indexed such that you can get a Symbol by symbol
// index. Nonexistent indices (which are occupied by auxiliary
// symbols in the real symbol table) are filled with null pointers.
- std::vector<SymbolBody *> SparseSymbolBodies;
+ std::vector<Symbol *> SparseSymbolBodies;
};
// This type represents import library members that contain DLL names
@@ -210,7 +210,7 @@ class BitcodeFile : public InputFile {
public:
explicit BitcodeFile(MemoryBufferRef M) : InputFile(BitcodeKind, M) {}
static bool classof(const InputFile *F) { return F->kind() == BitcodeKind; }
- std::vector<SymbolBody *> &getSymbols() { return SymbolBodies; }
+ std::vector<Symbol *> &getSymbols() { return SymbolBodies; }
MachineTypes getMachineType() override;
static std::vector<BitcodeFile *> Instances;
std::unique_ptr<llvm::lto::InputFile> Obj;
@@ -218,7 +218,7 @@ public:
private:
void parse() override;
- std::vector<SymbolBody *> SymbolBodies;
+ std::vector<Symbol *> SymbolBodies;
};
} // namespace coff
Modified: lld/trunk/COFF/LTO.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/LTO.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/LTO.cpp (original)
+++ lld/trunk/COFF/LTO.cpp Fri Nov 3 14:21:47 2017
@@ -88,17 +88,17 @@ BitcodeCompiler::BitcodeCompiler() : LTO
BitcodeCompiler::~BitcodeCompiler() = default;
-static void undefine(SymbolBody *S) { replaceBody<Undefined>(S, S->getName()); }
+static void undefine(Symbol *S) { replaceBody<Undefined>(S, S->getName()); }
void BitcodeCompiler::add(BitcodeFile &F) {
lto::InputFile &Obj = *F.Obj;
unsigned SymNum = 0;
- std::vector<SymbolBody *> SymBodies = F.getSymbols();
+ std::vector<Symbol *> SymBodies = F.getSymbols();
std::vector<lto::SymbolResolution> Resols(SymBodies.size());
// Provide a resolution to the LTO API for each symbol.
for (const lto::InputFile::Symbol &ObjSym : Obj.symbols()) {
- SymbolBody *Sym = SymBodies[SymNum];
+ Symbol *Sym = SymBodies[SymNum];
lto::SymbolResolution &R = Resols[SymNum];
++SymNum;
Modified: lld/trunk/COFF/MapFile.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/MapFile.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/MapFile.cpp (original)
+++ lld/trunk/COFF/MapFile.cpp Fri Nov 3 14:21:47 2017
@@ -49,7 +49,7 @@ static std::string indent(int Depth) { r
static std::vector<DefinedRegular *> getSymbols() {
std::vector<DefinedRegular *> V;
for (ObjFile *File : ObjFile::Instances)
- for (SymbolBody *B : File->getSymbols())
+ for (Symbol *B : File->getSymbols())
if (auto *Sym = dyn_cast<DefinedRegular>(B))
if (Sym && !Sym->getCOFFSymbol().isSectionDefinition())
V.push_back(Sym);
Modified: lld/trunk/COFF/MarkLive.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/MarkLive.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/MarkLive.cpp (original)
+++ lld/trunk/COFF/MarkLive.cpp Fri Nov 3 14:21:47 2017
@@ -37,7 +37,7 @@ void markLive(const std::vector<Chunk *>
Worklist.push_back(C);
};
- auto AddSym = [&](SymbolBody *B) {
+ auto AddSym = [&](Symbol *B) {
if (auto *Sym = dyn_cast<DefinedRegular>(B))
Enqueue(Sym->getChunk());
else if (auto *Sym = dyn_cast<DefinedImportData>(B))
@@ -47,7 +47,7 @@ void markLive(const std::vector<Chunk *>
};
// Add GC root chunks.
- for (SymbolBody *B : Config->GCRoot)
+ for (Symbol *B : Config->GCRoot)
AddSym(B);
while (!Worklist.empty()) {
@@ -62,7 +62,7 @@ void markLive(const std::vector<Chunk *>
assert(SC->isLive() && "We mark as live when pushing onto the worklist!");
// Mark all symbols listed in the relocation table for this section.
- for (SymbolBody *B : SC->symbols())
+ for (Symbol *B : SC->symbols())
AddSym(B);
// Mark associative sections if any.
Modified: lld/trunk/COFF/PDB.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/PDB.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/PDB.cpp (original)
+++ lld/trunk/COFF/PDB.cpp Fri Nov 3 14:21:47 2017
@@ -727,7 +727,7 @@ void PDBLinker::addObjectsToPDB() {
// Compute the public and global symbols.
auto &GsiBuilder = Builder.getGsiBuilder();
std::vector<PublicSym32> Publics;
- Symtab->forEachSymbol([&Publics](SymbolBody *S) {
+ Symtab->forEachSymbol([&Publics](Symbol *S) {
// Only emit defined, live symbols that have a chunk.
auto *Def = dyn_cast<Defined>(S);
if (Def && Def->isLive() && Def->getChunk())
Modified: lld/trunk/COFF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/SymbolTable.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/SymbolTable.cpp (original)
+++ lld/trunk/COFF/SymbolTable.cpp Fri Nov 3 14:21:47 2017
@@ -33,7 +33,7 @@ enum SymbolPreference {
/// Checks if an existing symbol S should be kept or replaced by a new symbol.
/// Returns SP_EXISTING when S should be kept, SP_NEW when the new symbol
/// should be kept, and SP_CONFLICT if no valid resolution exists.
-static SymbolPreference compareDefined(SymbolBody *S, bool WasInserted,
+static SymbolPreference compareDefined(Symbol *S, bool WasInserted,
bool NewIsCOMDAT) {
// If the symbol wasn't previously known, the new symbol wins by default.
if (WasInserted || !isa<Defined>(S))
@@ -92,10 +92,10 @@ static void errorOrWarn(const Twine &S)
}
void SymbolTable::reportRemainingUndefines() {
- SmallPtrSet<SymbolBody *, 8> Undefs;
+ SmallPtrSet<Symbol *, 8> Undefs;
for (auto &I : Symtab) {
- SymbolBody *Sym = I.second;
+ Symbol *Sym = I.second;
auto *Undef = dyn_cast<Undefined>(Sym);
if (!Undef)
continue;
@@ -123,7 +123,7 @@ void SymbolTable::reportRemainingUndefin
// If we can resolve a symbol by removing __imp_ prefix, do that.
// This odd rule is for compatibility with MSVC linker.
if (Name.startswith("__imp_")) {
- SymbolBody *Imp = find(Name.substr(strlen("__imp_")));
+ Symbol *Imp = find(Name.substr(strlen("__imp_")));
if (Imp && isa<Defined>(Imp)) {
auto *D = cast<Defined>(Imp);
replaceBody<DefinedLocalImport>(Sym, Name, D);
@@ -142,29 +142,29 @@ void SymbolTable::reportRemainingUndefin
if (Undefs.empty())
return;
- for (SymbolBody *B : Config->GCRoot)
+ for (Symbol *B : Config->GCRoot)
if (Undefs.count(B))
errorOrWarn("<root>: undefined symbol: " + B->getName());
for (ObjFile *File : ObjFile::Instances)
- for (SymbolBody *Sym : File->getSymbols())
+ for (Symbol *Sym : File->getSymbols())
if (Undefs.count(Sym))
errorOrWarn(toString(File) + ": undefined symbol: " + Sym->getName());
}
-std::pair<SymbolBody *, bool> SymbolTable::insert(StringRef Name) {
- SymbolBody *&Sym = Symtab[CachedHashStringRef(Name)];
+std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name) {
+ Symbol *&Sym = Symtab[CachedHashStringRef(Name)];
if (Sym)
return {Sym, false};
- Sym = (SymbolBody *)make<SymbolUnion>();
+ Sym = (Symbol *)make<SymbolUnion>();
Sym->IsUsedInRegularObj = false;
Sym->PendingArchiveLoad = false;
return {Sym, true};
}
-SymbolBody *SymbolTable::addUndefined(StringRef Name, InputFile *F,
- bool IsWeakAlias) {
- SymbolBody *S;
+Symbol *SymbolTable::addUndefined(StringRef Name, InputFile *F,
+ bool IsWeakAlias) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(Name);
if (!F || !isa<BitcodeFile>(F))
@@ -184,7 +184,7 @@ SymbolBody *SymbolTable::addUndefined(St
void SymbolTable::addLazy(ArchiveFile *F, const Archive::Symbol Sym) {
StringRef Name = Sym.getName();
- SymbolBody *S;
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(Name);
if (WasInserted) {
@@ -198,14 +198,14 @@ void SymbolTable::addLazy(ArchiveFile *F
F->addMember(&Sym);
}
-void SymbolTable::reportDuplicate(SymbolBody *Existing, InputFile *NewFile) {
+void SymbolTable::reportDuplicate(Symbol *Existing, InputFile *NewFile) {
error("duplicate symbol: " + toString(*Existing) + " in " +
toString(Existing->getFile()) + " and in " +
(NewFile ? toString(NewFile) : "(internal)"));
}
-SymbolBody *SymbolTable::addAbsolute(StringRef N, COFFSymbolRef Sym) {
- SymbolBody *S;
+Symbol *SymbolTable::addAbsolute(StringRef N, COFFSymbolRef Sym) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(N);
S->IsUsedInRegularObj = true;
@@ -216,8 +216,8 @@ SymbolBody *SymbolTable::addAbsolute(Str
return S;
}
-SymbolBody *SymbolTable::addAbsolute(StringRef N, uint64_t VA) {
- SymbolBody *S;
+Symbol *SymbolTable::addAbsolute(StringRef N, uint64_t VA) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(N);
S->IsUsedInRegularObj = true;
@@ -228,8 +228,8 @@ SymbolBody *SymbolTable::addAbsolute(Str
return S;
}
-SymbolBody *SymbolTable::addSynthetic(StringRef N, Chunk *C) {
- SymbolBody *S;
+Symbol *SymbolTable::addSynthetic(StringRef N, Chunk *C) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(N);
S->IsUsedInRegularObj = true;
@@ -240,10 +240,10 @@ SymbolBody *SymbolTable::addSynthetic(St
return S;
}
-SymbolBody *SymbolTable::addRegular(InputFile *F, StringRef N, bool IsCOMDAT,
- const coff_symbol_generic *Sym,
- SectionChunk *C) {
- SymbolBody *S;
+Symbol *SymbolTable::addRegular(InputFile *F, StringRef N, bool IsCOMDAT,
+ const coff_symbol_generic *Sym,
+ SectionChunk *C) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(N);
if (!isa<BitcodeFile>(F))
@@ -263,10 +263,9 @@ SymbolBody *SymbolTable::addRegular(Inpu
return S;
}
-SymbolBody *SymbolTable::addCommon(InputFile *F, StringRef N, uint64_t Size,
- const coff_symbol_generic *Sym,
- CommonChunk *C) {
- SymbolBody *S;
+Symbol *SymbolTable::addCommon(InputFile *F, StringRef N, uint64_t Size,
+ const coff_symbol_generic *Sym, CommonChunk *C) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(N);
if (!isa<BitcodeFile>(F))
@@ -280,7 +279,7 @@ SymbolBody *SymbolTable::addCommon(Input
}
DefinedImportData *SymbolTable::addImportData(StringRef N, ImportFile *F) {
- SymbolBody *S;
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(N);
S->IsUsedInRegularObj = true;
@@ -296,7 +295,7 @@ DefinedImportData *SymbolTable::addImpor
DefinedImportThunk *SymbolTable::addImportThunk(StringRef Name,
DefinedImportData *ID,
uint16_t Machine) {
- SymbolBody *S;
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(Name);
S->IsUsedInRegularObj = true;
@@ -318,14 +317,14 @@ std::vector<Chunk *> SymbolTable::getChu
return Res;
}
-SymbolBody *SymbolTable::find(StringRef Name) {
+Symbol *SymbolTable::find(StringRef Name) {
auto It = Symtab.find(CachedHashStringRef(Name));
if (It == Symtab.end())
return nullptr;
return It->second;
}
-SymbolBody *SymbolTable::findUnderscore(StringRef Name) {
+Symbol *SymbolTable::findUnderscore(StringRef Name) {
if (Config->Machine == I386)
return find(("_" + Name).str());
return find(Name);
@@ -341,7 +340,7 @@ StringRef SymbolTable::findByPrefix(Stri
}
StringRef SymbolTable::findMangle(StringRef Name) {
- if (SymbolBody *Sym = find(Name))
+ if (Symbol *Sym = find(Name))
if (!isa<Undefined>(Sym))
return Name;
if (Config->Machine != I386)
@@ -364,7 +363,7 @@ StringRef SymbolTable::findMangle(String
return findByPrefix(("?" + Name.substr(1) + "@@Y").str());
}
-void SymbolTable::mangleMaybe(SymbolBody *B) {
+void SymbolTable::mangleMaybe(Symbol *B) {
auto *U = dyn_cast<Undefined>(B);
if (!U || U->WeakAlias)
return;
@@ -375,7 +374,7 @@ void SymbolTable::mangleMaybe(SymbolBody
}
}
-SymbolBody *SymbolTable::addUndefined(StringRef Name) {
+Symbol *SymbolTable::addUndefined(StringRef Name) {
return addUndefined(Name, nullptr, false);
}
Modified: lld/trunk/COFF/SymbolTable.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/SymbolTable.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/SymbolTable.h (original)
+++ lld/trunk/COFF/SymbolTable.h Fri Nov 3 14:21:47 2017
@@ -31,7 +31,7 @@ class DefinedAbsolute;
class DefinedRelative;
class Lazy;
class SectionChunk;
-class SymbolBody;
+class Symbol;
// SymbolTable is a bucket of all known symbols, including defined,
// undefined, or lazy symbols (the last one is symbols in archive
@@ -58,14 +58,14 @@ public:
std::vector<Chunk *> getChunks();
// Returns a symbol for a given name. Returns a nullptr if not found.
- SymbolBody *find(StringRef Name);
- SymbolBody *findUnderscore(StringRef Name);
+ Symbol *find(StringRef Name);
+ Symbol *findUnderscore(StringRef Name);
// Occasionally we have to resolve an undefined symbol to its
// mangled symbol. This function tries to find a mangled name
// for U from the symbol table, and if found, set the symbol as
// a weak alias for U.
- void mangleMaybe(SymbolBody *B);
+ void mangleMaybe(Symbol *B);
StringRef findMangle(StringRef Name);
// Build a set of COFF objects representing the combined contents of
@@ -75,25 +75,25 @@ public:
std::vector<StringRef> compileBitcodeFiles();
// Creates an Undefined symbol for a given name.
- SymbolBody *addUndefined(StringRef Name);
+ Symbol *addUndefined(StringRef Name);
- SymbolBody *addSynthetic(StringRef N, Chunk *C);
- SymbolBody *addAbsolute(StringRef N, uint64_t VA);
+ Symbol *addSynthetic(StringRef N, Chunk *C);
+ Symbol *addAbsolute(StringRef N, uint64_t VA);
- SymbolBody *addUndefined(StringRef Name, InputFile *F, bool IsWeakAlias);
+ Symbol *addUndefined(StringRef Name, InputFile *F, bool IsWeakAlias);
void addLazy(ArchiveFile *F, const Archive::Symbol Sym);
- SymbolBody *addAbsolute(StringRef N, COFFSymbolRef S);
- SymbolBody *addRegular(InputFile *F, StringRef N, bool IsCOMDAT,
- const llvm::object::coff_symbol_generic *S = nullptr,
- SectionChunk *C = nullptr);
- SymbolBody *addCommon(InputFile *F, StringRef N, uint64_t Size,
- const llvm::object::coff_symbol_generic *S = nullptr,
- CommonChunk *C = nullptr);
+ Symbol *addAbsolute(StringRef N, COFFSymbolRef S);
+ Symbol *addRegular(InputFile *F, StringRef N, bool IsCOMDAT,
+ const llvm::object::coff_symbol_generic *S = nullptr,
+ SectionChunk *C = nullptr);
+ Symbol *addCommon(InputFile *F, StringRef N, uint64_t Size,
+ const llvm::object::coff_symbol_generic *S = nullptr,
+ CommonChunk *C = nullptr);
DefinedImportData *addImportData(StringRef N, ImportFile *F);
DefinedImportThunk *addImportThunk(StringRef Name, DefinedImportData *S,
uint16_t Machine);
- void reportDuplicate(SymbolBody *Existing, InputFile *NewFile);
+ void reportDuplicate(Symbol *Existing, InputFile *NewFile);
// A list of chunks which to be added to .rdata.
std::vector<Chunk *> LocalImportChunks;
@@ -105,10 +105,10 @@ public:
}
private:
- std::pair<SymbolBody *, bool> insert(StringRef Name);
+ std::pair<Symbol *, bool> insert(StringRef Name);
StringRef findByPrefix(StringRef Prefix);
- llvm::DenseMap<llvm::CachedHashStringRef, SymbolBody *> Symtab;
+ llvm::DenseMap<llvm::CachedHashStringRef, Symbol *> Symtab;
std::unique_ptr<BitcodeCompiler> LTO;
};
Modified: lld/trunk/COFF/Symbols.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Symbols.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/Symbols.cpp (original)
+++ lld/trunk/COFF/Symbols.cpp Fri Nov 3 14:21:47 2017
@@ -20,7 +20,7 @@ using namespace llvm;
using namespace llvm::object;
// Returns a symbol name for an error message.
-std::string lld::toString(coff::SymbolBody &B) {
+std::string lld::toString(coff::Symbol &B) {
if (Optional<std::string> S = coff::demangle(B.getName()))
return ("\"" + *S + "\" (" + B.getName() + ")").str();
return B.getName();
@@ -29,7 +29,7 @@ std::string lld::toString(coff::SymbolBo
namespace lld {
namespace coff {
-StringRef SymbolBody::getName() {
+StringRef Symbol::getName() {
// COFF symbol names are read lazily for a performance reason.
// Non-external symbol names are never used by the linker except for logging
// or debugging. Their internal references are resolved not by name but by
@@ -44,7 +44,7 @@ StringRef SymbolBody::getName() {
return Name;
}
-InputFile *SymbolBody::getFile() {
+InputFile *Symbol::getFile() {
if (auto *Sym = dyn_cast<DefinedCOFF>(this))
return Sym->File;
if (auto *Sym = dyn_cast<Lazy>(this))
@@ -52,7 +52,7 @@ InputFile *SymbolBody::getFile() {
return nullptr;
}
-bool SymbolBody::isLive() const {
+bool Symbol::isLive() const {
if (auto *R = dyn_cast<DefinedRegular>(this))
return R->getChunk()->isLive();
if (auto *Imp = dyn_cast<DefinedImportData>(this))
@@ -91,7 +91,7 @@ DefinedImportThunk::DefinedImportThunk(S
Defined *Undefined::getWeakAlias() {
// A weak alias may be a weak alias to another symbol, so check recursively.
- for (SymbolBody *A = WeakAlias; A; A = cast<Undefined>(A)->WeakAlias)
+ for (Symbol *A = WeakAlias; A; A = cast<Undefined>(A)->WeakAlias)
if (auto *D = dyn_cast<Defined>(A))
return D;
return nullptr;
Modified: lld/trunk/COFF/Symbols.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Symbols.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/Symbols.h (original)
+++ lld/trunk/COFF/Symbols.h Fri Nov 3 14:21:47 2017
@@ -35,7 +35,7 @@ class ObjFile;
class SymbolTable;
// The base class for real symbol classes.
-class SymbolBody {
+class Symbol {
public:
enum Kind {
// The order of these is significant. We start with the regular defined
@@ -75,7 +75,7 @@ public:
protected:
friend SymbolTable;
- explicit SymbolBody(Kind K, StringRef N = "")
+ explicit Symbol(Kind K, StringRef N = "")
: SymbolKind(K), IsExternal(true), IsCOMDAT(false),
WrittenToSymtab(false), Name(N) {}
@@ -104,13 +104,11 @@ protected:
// The base class for any defined symbols, including absolute symbols,
// etc.
-class Defined : public SymbolBody {
+class Defined : public Symbol {
public:
- Defined(Kind K, StringRef N) : SymbolBody(K, N) {}
+ Defined(Kind K, StringRef N) : Symbol(K, N) {}
- static bool classof(const SymbolBody *S) {
- return S->kind() <= LastDefinedKind;
- }
+ static bool classof(const Symbol *S) { return S->kind() <= LastDefinedKind; }
// Returns the RVA (relative virtual address) of this symbol. The
// writer sets and uses RVAs.
@@ -126,12 +124,13 @@ public:
// loaded through that. For bitcode files, Sym is nullptr and the name is stored
// as a StringRef.
class DefinedCOFF : public Defined {
- friend SymbolBody;
+ friend Symbol;
+
public:
DefinedCOFF(Kind K, InputFile *F, StringRef N, const coff_symbol_generic *S)
: Defined(K, N), File(F), Sym(S) {}
- static bool classof(const SymbolBody *S) {
+ static bool classof(const Symbol *S) {
return S->kind() <= LastDefinedCOFFKind;
}
@@ -157,7 +156,7 @@ public:
this->IsCOMDAT = IsCOMDAT;
}
- static bool classof(const SymbolBody *S) {
+ static bool classof(const Symbol *S) {
return S->kind() == DefinedRegularKind;
}
@@ -179,7 +178,7 @@ public:
this->IsExternal = true;
}
- static bool classof(const SymbolBody *S) {
+ static bool classof(const Symbol *S) {
return S->kind() == DefinedCommonKind;
}
@@ -204,7 +203,7 @@ public:
DefinedAbsolute(StringRef N, uint64_t V)
: Defined(DefinedAbsoluteKind, N), VA(V) {}
- static bool classof(const SymbolBody *S) {
+ static bool classof(const Symbol *S) {
return S->kind() == DefinedAbsoluteKind;
}
@@ -228,7 +227,7 @@ public:
explicit DefinedSynthetic(StringRef Name, Chunk *C)
: Defined(DefinedSyntheticKind, Name), C(C) {}
- static bool classof(const SymbolBody *S) {
+ static bool classof(const Symbol *S) {
return S->kind() == DefinedSyntheticKind;
}
@@ -246,12 +245,12 @@ private:
// object file from an archive to replace itself with a defined
// symbol. If the resolver finds both Undefined and Lazy for
// the same name, it will ask the Lazy to load a file.
-class Lazy : public SymbolBody {
+class Lazy : public Symbol {
public:
Lazy(ArchiveFile *F, const Archive::Symbol S)
- : SymbolBody(LazyKind, S.getName()), File(F), Sym(S) {}
+ : Symbol(LazyKind, S.getName()), File(F), Sym(S) {}
- static bool classof(const SymbolBody *S) { return S->kind() == LazyKind; }
+ static bool classof(const Symbol *S) { return S->kind() == LazyKind; }
ArchiveFile *File;
@@ -263,19 +262,17 @@ private:
};
// Undefined symbols.
-class Undefined : public SymbolBody {
+class Undefined : public Symbol {
public:
- explicit Undefined(StringRef N) : SymbolBody(UndefinedKind, N) {}
+ explicit Undefined(StringRef N) : Symbol(UndefinedKind, N) {}
- static bool classof(const SymbolBody *S) {
- return S->kind() == UndefinedKind;
- }
+ static bool classof(const Symbol *S) { return S->kind() == UndefinedKind; }
// An undefined symbol can have a fallback symbol which gives an
// undefined symbol a second chance if it would remain undefined.
// If it remains undefined, it'll be replaced with whatever the
// Alias pointer points to.
- SymbolBody *WeakAlias = nullptr;
+ Symbol *WeakAlias = nullptr;
// If this symbol is external weak, try to resolve it to a defined
// symbol by searching the chain of fallback symbols. Returns the symbol if
@@ -295,7 +292,7 @@ public:
: Defined(DefinedImportDataKind, N), File(F) {
}
- static bool classof(const SymbolBody *S) {
+ static bool classof(const Symbol *S) {
return S->kind() == DefinedImportDataKind;
}
@@ -319,7 +316,7 @@ class DefinedImportThunk : public Define
public:
DefinedImportThunk(StringRef Name, DefinedImportData *S, uint16_t Machine);
- static bool classof(const SymbolBody *S) {
+ static bool classof(const Symbol *S) {
return S->kind() == DefinedImportThunkKind;
}
@@ -342,7 +339,7 @@ public:
DefinedLocalImport(StringRef N, Defined *S)
: Defined(DefinedLocalImportKind, N), Data(make<LocalImportChunk>(S)) {}
- static bool classof(const SymbolBody *S) {
+ static bool classof(const Symbol *S) {
return S->kind() == DefinedLocalImportKind;
}
@@ -399,7 +396,7 @@ inline Chunk *Defined::getChunk() {
llvm_unreachable("unknown symbol kind");
}
-// A buffer class that is large enough to hold any SymbolBody-derived
+// A buffer class that is large enough to hold any Symbol-derived
// object. We allocate memory using this class and instantiate a symbol
// using the placement new.
union SymbolUnion {
@@ -415,17 +412,17 @@ union SymbolUnion {
};
template <typename T, typename... ArgT>
-void replaceBody(SymbolBody *S, ArgT &&... Arg) {
+void replaceBody(Symbol *S, ArgT &&... Arg) {
static_assert(sizeof(T) <= sizeof(SymbolUnion), "Symbol too small");
static_assert(alignof(T) <= alignof(SymbolUnion),
"SymbolUnion not aligned enough");
- assert(static_cast<SymbolBody *>(static_cast<T *>(nullptr)) == nullptr &&
- "Not a SymbolBody");
+ assert(static_cast<Symbol *>(static_cast<T *>(nullptr)) == nullptr &&
+ "Not a Symbol");
new (S) T(std::forward<ArgT>(Arg)...);
}
} // namespace coff
-std::string toString(coff::SymbolBody &B);
+std::string toString(coff::Symbol &B);
} // namespace lld
#endif
Modified: lld/trunk/COFF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Writer.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/COFF/Writer.cpp (original)
+++ lld/trunk/COFF/Writer.cpp Fri Nov 3 14:21:47 2017
@@ -396,7 +396,7 @@ void Writer::createMiscChunks() {
for (ObjFile *File : ObjFile::Instances) {
if (!File->SEHCompat)
return;
- for (SymbolBody *B : File->SEHandlers) {
+ for (Symbol *B : File->SEHandlers) {
// Make sure the handler is still live. Assume all handlers are regular
// symbols.
auto *D = dyn_cast<DefinedRegular>(B);
@@ -532,7 +532,7 @@ Optional<coff_symbol16> Writer::createSy
Sym.NumberOfAuxSymbols = 0;
switch (Def->kind()) {
- case SymbolBody::DefinedAbsoluteKind:
+ case Symbol::DefinedAbsoluteKind:
Sym.Value = Def->getRVA();
Sym.SectionNumber = IMAGE_SYM_ABSOLUTE;
break;
@@ -566,7 +566,7 @@ void Writer::createSymbolAndStringTable(
}
for (ObjFile *File : ObjFile::Instances) {
- for (SymbolBody *B : File->getSymbols()) {
+ for (Symbol *B : File->getSymbols()) {
auto *D = dyn_cast<Defined>(B);
if (!D || D->WrittenToSymtab)
continue;
@@ -731,7 +731,7 @@ template <typename PEHeaderTy> void Writ
Dir[BASE_RELOCATION_TABLE].RelativeVirtualAddress = Sec->getRVA();
Dir[BASE_RELOCATION_TABLE].Size = Sec->getVirtualSize();
}
- if (SymbolBody *Sym = Symtab->findUnderscore("_tls_used")) {
+ if (Symbol *Sym = Symtab->findUnderscore("_tls_used")) {
if (Defined *B = dyn_cast<Defined>(Sym)) {
Dir[TLS_TABLE].RelativeVirtualAddress = B->getRVA();
Dir[TLS_TABLE].Size = Config->is64()
@@ -743,7 +743,7 @@ template <typename PEHeaderTy> void Writ
Dir[DEBUG_DIRECTORY].RelativeVirtualAddress = DebugDirectory->getRVA();
Dir[DEBUG_DIRECTORY].Size = DebugDirectory->getSize();
}
- if (SymbolBody *Sym = Symtab->findUnderscore("_load_config_used")) {
+ if (Symbol *Sym = Symtab->findUnderscore("_load_config_used")) {
if (auto *B = dyn_cast<DefinedRegular>(Sym)) {
SectionChunk *SC = B->getChunk();
assert(B->getRVA() >= SC->getRVA());
@@ -804,8 +804,8 @@ void Writer::fixSafeSEHSymbols() {
// Replace the absolute table symbol with a synthetic symbol pointing to the
// SEHTable chunk so that we can emit base relocations for it and resolve
// section relative relocations.
- SymbolBody *T = Symtab->find("___safe_se_handler_table");
- SymbolBody *C = Symtab->find("___safe_se_handler_count");
+ Symbol *T = Symtab->find("___safe_se_handler_table");
+ Symbol *C = Symtab->find("___safe_se_handler_count");
replaceBody<DefinedSynthetic>(T, T->getName(), SEHTable);
cast<DefinedAbsolute>(C)->setVA(SEHTable->getSize() / 4);
}
Modified: lld/trunk/ELF/Arch/AArch64.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/AArch64.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/AArch64.cpp (original)
+++ lld/trunk/ELF/Arch/AArch64.cpp Fri Nov 3 14:21:47 2017
@@ -32,10 +32,10 @@ namespace {
class AArch64 final : public TargetInfo {
public:
AArch64();
- RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override;
bool isPicRel(RelType Type) const override;
- void writeGotPlt(uint8_t *Buf, const SymbolBody &S) const override;
+ void writeGotPlt(uint8_t *Buf, const Symbol &S) const override;
void writePltHeader(uint8_t *Buf) const override;
void writePlt(uint8_t *Buf, uint64_t GotPltEntryAddr, uint64_t PltEntryAddr,
int32_t Index, unsigned RelOff) const override;
@@ -68,7 +68,7 @@ AArch64::AArch64() {
TcbSize = 16;
}
-RelExpr AArch64::getRelExpr(RelType Type, const SymbolBody &S,
+RelExpr AArch64::getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const {
switch (Type) {
case R_AARCH64_TLSDESC_ADR_PAGE21:
@@ -139,7 +139,7 @@ bool AArch64::isPicRel(RelType Type) con
return Type == R_AARCH64_ABS32 || Type == R_AARCH64_ABS64;
}
-void AArch64::writeGotPlt(uint8_t *Buf, const SymbolBody &) const {
+void AArch64::writeGotPlt(uint8_t *Buf, const Symbol &) const {
write64le(Buf, InX::Plt->getVA());
}
Modified: lld/trunk/ELF/Arch/AMDGPU.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/AMDGPU.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/AMDGPU.cpp (original)
+++ lld/trunk/ELF/Arch/AMDGPU.cpp Fri Nov 3 14:21:47 2017
@@ -27,7 +27,7 @@ public:
AMDGPU();
uint32_t calcEFlags() const override;
void relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const override;
- RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override;
};
} // namespace
@@ -77,7 +77,7 @@ void AMDGPU::relocateOne(uint8_t *Loc, R
}
}
-RelExpr AMDGPU::getRelExpr(RelType Type, const SymbolBody &S,
+RelExpr AMDGPU::getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const {
switch (Type) {
case R_AMDGPU_ABS32:
Modified: lld/trunk/ELF/Arch/ARM.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/ARM.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/ARM.cpp (original)
+++ lld/trunk/ELF/Arch/ARM.cpp Fri Nov 3 14:21:47 2017
@@ -27,20 +27,20 @@ class ARM final : public TargetInfo {
public:
ARM();
uint32_t calcEFlags() const override;
- RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override;
bool isPicRel(RelType Type) const override;
RelType getDynRel(RelType Type) const override;
int64_t getImplicitAddend(const uint8_t *Buf, RelType Type) const override;
- void writeGotPlt(uint8_t *Buf, const SymbolBody &S) const override;
- void writeIgotPlt(uint8_t *Buf, const SymbolBody &S) const override;
+ void writeGotPlt(uint8_t *Buf, const Symbol &S) const override;
+ void writeIgotPlt(uint8_t *Buf, const Symbol &S) const override;
void writePltHeader(uint8_t *Buf) const override;
void writePlt(uint8_t *Buf, uint64_t GotPltEntryAddr, uint64_t PltEntryAddr,
int32_t Index, unsigned RelOff) const override;
void addPltSymbols(InputSectionBase *IS, uint64_t Off) const override;
void addPltHeaderSymbols(InputSectionBase *ISD) const override;
bool needsThunk(RelExpr Expr, RelType Type, const InputFile *File,
- uint64_t BranchAddr, const SymbolBody &S) const override;
+ uint64_t BranchAddr, const Symbol &S) const override;
bool inBranchRange(RelType Type, uint64_t Src, uint64_t Dst) const override;
void relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const override;
};
@@ -103,7 +103,7 @@ uint32_t ARM::calcEFlags() const {
return EF_ARM_EABI_VER5;
}
-RelExpr ARM::getRelExpr(RelType Type, const SymbolBody &S,
+RelExpr ARM::getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const {
switch (Type) {
case R_ARM_THM_JUMP11:
@@ -175,11 +175,11 @@ RelType ARM::getDynRel(RelType Type) con
return R_ARM_ABS32;
}
-void ARM::writeGotPlt(uint8_t *Buf, const SymbolBody &) const {
+void ARM::writeGotPlt(uint8_t *Buf, const Symbol &) const {
write32le(Buf, InX::Plt->getVA());
}
-void ARM::writeIgotPlt(uint8_t *Buf, const SymbolBody &S) const {
+void ARM::writeIgotPlt(uint8_t *Buf, const Symbol &S) const {
// An ARM entry is the address of the ifunc resolver function.
write32le(Buf, S.getVA());
}
@@ -228,7 +228,7 @@ void ARM::addPltSymbols(InputSectionBase
}
bool ARM::needsThunk(RelExpr Expr, RelType Type, const InputFile *File,
- uint64_t BranchAddr, const SymbolBody &S) const {
+ uint64_t BranchAddr, const Symbol &S) const {
// If S is an undefined weak symbol in an executable we don't need a Thunk.
// In a DSO calls to undefined symbols, including weak ones get PLT entries
// which may need a thunk.
Modified: lld/trunk/ELF/Arch/AVR.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/AVR.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/AVR.cpp (original)
+++ lld/trunk/ELF/Arch/AVR.cpp Fri Nov 3 14:21:47 2017
@@ -43,13 +43,13 @@ using namespace lld::elf;
namespace {
class AVR final : public TargetInfo {
public:
- RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override;
void relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const override;
};
} // namespace
-RelExpr AVR::getRelExpr(RelType Type, const SymbolBody &S,
+RelExpr AVR::getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const {
return R_ABS;
}
Modified: lld/trunk/ELF/Arch/Mips.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/Mips.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/Mips.cpp (original)
+++ lld/trunk/ELF/Arch/Mips.cpp Fri Nov 3 14:21:47 2017
@@ -29,17 +29,17 @@ template <class ELFT> class MIPS final :
public:
MIPS();
uint32_t calcEFlags() const override;
- RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override;
int64_t getImplicitAddend(const uint8_t *Buf, RelType Type) const override;
bool isPicRel(RelType Type) const override;
RelType getDynRel(RelType Type) const override;
- void writeGotPlt(uint8_t *Buf, const SymbolBody &S) const override;
+ void writeGotPlt(uint8_t *Buf, const Symbol &S) const override;
void writePltHeader(uint8_t *Buf) const override;
void writePlt(uint8_t *Buf, uint64_t GotPltEntryAddr, uint64_t PltEntryAddr,
int32_t Index, unsigned RelOff) const override;
bool needsThunk(RelExpr Expr, RelType Type, const InputFile *File,
- uint64_t BranchAddr, const SymbolBody &S) const override;
+ uint64_t BranchAddr, const Symbol &S) const override;
void relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const override;
bool usesOnlyLowPageBits(RelType Type) const override;
};
@@ -75,7 +75,7 @@ template <class ELFT> uint32_t MIPS<ELFT
}
template <class ELFT>
-RelExpr MIPS<ELFT>::getRelExpr(RelType Type, const SymbolBody &S,
+RelExpr MIPS<ELFT>::getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const {
// See comment in the calculateMipsRelChain.
if (ELFT::Is64Bits || Config->MipsN32Abi)
@@ -192,7 +192,7 @@ template <class ELFT> RelType MIPS<ELFT>
}
template <class ELFT>
-void MIPS<ELFT>::writeGotPlt(uint8_t *Buf, const SymbolBody &) const {
+void MIPS<ELFT>::writeGotPlt(uint8_t *Buf, const Symbol &) const {
write32<ELFT::TargetEndianness>(Buf, InX::Plt->getVA());
}
@@ -331,7 +331,7 @@ void MIPS<ELFT>::writePlt(uint8_t *Buf,
template <class ELFT>
bool MIPS<ELFT>::needsThunk(RelExpr Expr, RelType Type, const InputFile *File,
- uint64_t BranchAddr, const SymbolBody &S) const {
+ uint64_t BranchAddr, const Symbol &S) const {
// Any MIPS PIC code function is invoked with its address in register $t9.
// So if we have a branch instruction from non-PIC code to the PIC one
// we cannot make the jump directly and need to create a small stubs
Modified: lld/trunk/ELF/Arch/PPC.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/PPC.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/PPC.cpp (original)
+++ lld/trunk/ELF/Arch/PPC.cpp Fri Nov 3 14:21:47 2017
@@ -23,12 +23,12 @@ class PPC final : public TargetInfo {
public:
PPC() { GotBaseSymOff = 0x8000; }
void relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const override;
- RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override;
};
} // namespace
-RelExpr PPC::getRelExpr(RelType Type, const SymbolBody &S,
+RelExpr PPC::getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const {
switch (Type) {
case R_PPC_REL24:
Modified: lld/trunk/ELF/Arch/PPC64.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/PPC64.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/PPC64.cpp (original)
+++ lld/trunk/ELF/Arch/PPC64.cpp Fri Nov 3 14:21:47 2017
@@ -39,7 +39,7 @@ namespace {
class PPC64 final : public TargetInfo {
public:
PPC64();
- RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override;
void writePlt(uint8_t *Buf, uint64_t GotPltEntryAddr, uint64_t PltEntryAddr,
int32_t Index, unsigned RelOff) const override;
@@ -82,7 +82,7 @@ PPC64::PPC64() {
DefaultImageBase = 0x10000000;
}
-RelExpr PPC64::getRelExpr(RelType Type, const SymbolBody &S,
+RelExpr PPC64::getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const {
switch (Type) {
case R_PPC64_TOC16:
Modified: lld/trunk/ELF/Arch/SPARCV9.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/SPARCV9.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/SPARCV9.cpp (original)
+++ lld/trunk/ELF/Arch/SPARCV9.cpp Fri Nov 3 14:21:47 2017
@@ -24,7 +24,7 @@ namespace {
class SPARCV9 final : public TargetInfo {
public:
SPARCV9();
- RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override;
void writePlt(uint8_t *Buf, uint64_t GotEntryAddr, uint64_t PltEntryAddr,
int32_t Index, unsigned RelOff) const override;
@@ -46,7 +46,7 @@ SPARCV9::SPARCV9() {
DefaultImageBase = 0x100000;
}
-RelExpr SPARCV9::getRelExpr(RelType Type, const SymbolBody &S,
+RelExpr SPARCV9::getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const {
switch (Type) {
case R_SPARC_32:
Modified: lld/trunk/ELF/Arch/X86.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/X86.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/X86.cpp (original)
+++ lld/trunk/ELF/Arch/X86.cpp Fri Nov 3 14:21:47 2017
@@ -24,13 +24,13 @@ namespace {
class X86 final : public TargetInfo {
public:
X86();
- RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override;
int64_t getImplicitAddend(const uint8_t *Buf, RelType Type) const override;
void writeGotPltHeader(uint8_t *Buf) const override;
RelType getDynRel(RelType Type) const override;
- void writeGotPlt(uint8_t *Buf, const SymbolBody &S) const override;
- void writeIgotPlt(uint8_t *Buf, const SymbolBody &S) const override;
+ void writeGotPlt(uint8_t *Buf, const Symbol &S) const override;
+ void writeIgotPlt(uint8_t *Buf, const Symbol &S) const override;
void writePltHeader(uint8_t *Buf) const override;
void writePlt(uint8_t *Buf, uint64_t GotPltEntryAddr, uint64_t PltEntryAddr,
int32_t Index, unsigned RelOff) const override;
@@ -65,7 +65,7 @@ X86::X86() {
static bool hasBaseReg(uint8_t ModRM) { return (ModRM & 0xc7) != 0x5; }
-RelExpr X86::getRelExpr(RelType Type, const SymbolBody &S,
+RelExpr X86::getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const {
switch (Type) {
case R_386_8:
@@ -156,13 +156,13 @@ void X86::writeGotPltHeader(uint8_t *Buf
write32le(Buf, InX::Dynamic->getVA());
}
-void X86::writeGotPlt(uint8_t *Buf, const SymbolBody &S) const {
+void X86::writeGotPlt(uint8_t *Buf, const Symbol &S) const {
// Entries in .got.plt initially points back to the corresponding
// PLT entries with a fixed offset to skip the first instruction.
write32le(Buf, S.getPltVA() + 6);
}
-void X86::writeIgotPlt(uint8_t *Buf, const SymbolBody &S) const {
+void X86::writeIgotPlt(uint8_t *Buf, const Symbol &S) const {
// An x86 entry is the address of the ifunc resolver function.
write32le(Buf, S.getVA());
}
Modified: lld/trunk/ELF/Arch/X86_64.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Arch/X86_64.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Arch/X86_64.cpp (original)
+++ lld/trunk/ELF/Arch/X86_64.cpp Fri Nov 3 14:21:47 2017
@@ -26,11 +26,11 @@ namespace {
template <class ELFT> class X86_64 final : public TargetInfo {
public:
X86_64();
- RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const override;
bool isPicRel(RelType Type) const override;
void writeGotPltHeader(uint8_t *Buf) const override;
- void writeGotPlt(uint8_t *Buf, const SymbolBody &S) const override;
+ void writeGotPlt(uint8_t *Buf, const Symbol &S) const override;
void writePltHeader(uint8_t *Buf) const override;
void writePlt(uint8_t *Buf, uint64_t GotPltEntryAddr, uint64_t PltEntryAddr,
int32_t Index, unsigned RelOff) const override;
@@ -73,7 +73,7 @@ template <class ELFT> X86_64<ELFT>::X86_
}
template <class ELFT>
-RelExpr X86_64<ELFT>::getRelExpr(RelType Type, const SymbolBody &S,
+RelExpr X86_64<ELFT>::getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const {
switch (Type) {
case R_X86_64_8:
@@ -122,7 +122,7 @@ template <class ELFT> void X86_64<ELFT>:
}
template <class ELFT>
-void X86_64<ELFT>::writeGotPlt(uint8_t *Buf, const SymbolBody &S) const {
+void X86_64<ELFT>::writeGotPlt(uint8_t *Buf, const Symbol &S) const {
// See comments in X86::writeGotPlt.
write32le(Buf, S.getPltVA() + 6);
}
Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Fri Nov 3 14:21:47 2017
@@ -1001,7 +1001,7 @@ static void excludeLibs(opt::InputArgLis
for (InputFile *File : Files)
if (Optional<StringRef> Archive = getArchiveName(File))
if (All || Libs.count(path::filename(*Archive)))
- for (SymbolBody *Sym : File->getSymbols())
+ for (Symbol *Sym : File->getSymbols())
if (!Sym->isLocal())
Sym->VersionId = VER_NDX_LOCAL;
}
Modified: lld/trunk/ELF/GdbIndex.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/GdbIndex.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/GdbIndex.cpp (original)
+++ lld/trunk/ELF/GdbIndex.cpp Fri Nov 3 14:21:47 2017
@@ -68,7 +68,7 @@ LLDDwarfObj<ELFT>::findAux(const InputSe
uint32_t SymIndex = Rel.getSymbol(Config->IsMips64EL);
const typename ELFT::Sym &Sym = File->getELFSyms()[SymIndex];
uint32_t SecIndex = File->getSectionIndex(Sym);
- SymbolBody &B = File->getRelocTargetSym(Rel);
+ Symbol &B = File->getRelocTargetSym(Rel);
auto &DR = cast<DefinedRegular>(B);
uint64_t Val = DR.Value + getAddend<ELFT>(Rel);
Modified: lld/trunk/ELF/ICF.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/ICF.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/ICF.cpp (original)
+++ lld/trunk/ELF/ICF.cpp Fri Nov 3 14:21:47 2017
@@ -220,8 +220,8 @@ bool ICF<ELFT>::constantEq(const InputSe
uint64_t AddA = getAddend<ELFT>(RA[I]);
uint64_t AddB = getAddend<ELFT>(RB[I]);
- SymbolBody &SA = SecA->template getFile<ELFT>()->getRelocTargetSym(RA[I]);
- SymbolBody &SB = SecB->template getFile<ELFT>()->getRelocTargetSym(RB[I]);
+ Symbol &SA = SecA->template getFile<ELFT>()->getRelocTargetSym(RA[I]);
+ Symbol &SB = SecB->template getFile<ELFT>()->getRelocTargetSym(RB[I]);
if (&SA == &SB) {
if (AddA == AddB)
continue;
@@ -295,8 +295,8 @@ bool ICF<ELFT>::variableEq(const InputSe
for (size_t I = 0; I < RA.size(); ++I) {
// The two sections must be identical.
- SymbolBody &SA = SecA->template getFile<ELFT>()->getRelocTargetSym(RA[I]);
- SymbolBody &SB = SecB->template getFile<ELFT>()->getRelocTargetSym(RB[I]);
+ Symbol &SA = SecA->template getFile<ELFT>()->getRelocTargetSym(RA[I]);
+ Symbol &SB = SecB->template getFile<ELFT>()->getRelocTargetSym(RB[I]);
if (&SA == &SB)
continue;
Modified: lld/trunk/ELF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.cpp (original)
+++ lld/trunk/ELF/InputFiles.cpp Fri Nov 3 14:21:47 2017
@@ -227,7 +227,7 @@ ObjFile<ELFT>::ObjFile(MemoryBufferRef M
this->ArchiveName = ArchiveName;
}
-template <class ELFT> ArrayRef<SymbolBody *> ObjFile<ELFT>::getLocalSymbols() {
+template <class ELFT> ArrayRef<Symbol *> ObjFile<ELFT>::getLocalSymbols() {
if (this->Symbols.empty())
return {};
return makeArrayRef(this->Symbols).slice(1, this->FirstNonLocal - 1);
@@ -569,7 +569,7 @@ StringRef ObjFile<ELFT>::getSectionName(
template <class ELFT> void ObjFile<ELFT>::initializeSymbols() {
this->Symbols.reserve(this->ELFSyms.size());
for (const Elf_Sym &Sym : this->ELFSyms)
- this->Symbols.push_back(createSymbolBody(&Sym));
+ this->Symbols.push_back(createSymbol(&Sym));
}
template <class ELFT>
@@ -584,8 +584,7 @@ InputSectionBase *ObjFile<ELFT>::getSect
return nullptr;
}
-template <class ELFT>
-SymbolBody *ObjFile<ELFT>::createSymbolBody(const Elf_Sym *Sym) {
+template <class ELFT> Symbol *ObjFile<ELFT>::createSymbol(const Elf_Sym *Sym) {
int Binding = Sym->getBinding();
InputSectionBase *Sec = getSection(this->getSectionIndex(*Sym));
@@ -905,9 +904,9 @@ static uint8_t mapVisibility(GlobalValue
}
template <class ELFT>
-static SymbolBody *createBitcodeSymbol(const std::vector<bool> &KeptComdats,
- const lto::InputFile::Symbol &ObjSym,
- BitcodeFile *F) {
+static Symbol *createBitcodeSymbol(const std::vector<bool> &KeptComdats,
+ const lto::InputFile::Symbol &ObjSym,
+ BitcodeFile *F) {
StringRef NameRef = Saver.save(ObjSym.getName());
uint32_t Binding = ObjSym.isWeak() ? STB_WEAK : STB_GLOBAL;
Modified: lld/trunk/ELF/InputFiles.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.h (original)
+++ lld/trunk/ELF/InputFiles.h Fri Nov 3 14:21:47 2017
@@ -50,7 +50,7 @@ namespace elf {
using llvm::object::Archive;
class Lazy;
-class SymbolBody;
+class Symbol;
// If -reproduce option is given, all input files are written
// to this tar archive.
@@ -85,7 +85,7 @@ public:
// Returns object file symbols. It is a runtime error to call this
// function on files of other types.
- ArrayRef<SymbolBody *> getSymbols() {
+ ArrayRef<Symbol *> getSymbols() {
assert(FileKind == ObjKind || FileKind == BitcodeKind ||
FileKind == ArchiveKind);
return Symbols;
@@ -108,7 +108,7 @@ public:
protected:
InputFile(Kind K, MemoryBufferRef M);
std::vector<InputSectionBase *> Sections;
- std::vector<SymbolBody *> Symbols;
+ std::vector<Symbol *> Symbols;
private:
const Kind FileKind;
@@ -162,23 +162,22 @@ template <class ELFT> class ObjFile : pu
public:
static bool classof(const InputFile *F) { return F->kind() == Base::ObjKind; }
- ArrayRef<SymbolBody *> getLocalSymbols();
+ ArrayRef<Symbol *> getLocalSymbols();
ObjFile(MemoryBufferRef M, StringRef ArchiveName);
void parse(llvm::DenseSet<llvm::CachedHashStringRef> &ComdatGroups);
InputSectionBase *getSection(uint32_t Index) const;
- SymbolBody &getSymbolBody(uint32_t SymbolIndex) const {
+ Symbol &getSymbol(uint32_t SymbolIndex) const {
if (SymbolIndex >= this->Symbols.size())
fatal(toString(this) + ": invalid symbol index");
return *this->Symbols[SymbolIndex];
}
- template <typename RelT>
- SymbolBody &getRelocTargetSym(const RelT &Rel) const {
+ template <typename RelT> Symbol &getRelocTargetSym(const RelT &Rel) const {
uint32_t SymIndex = Rel.getSymbol(Config->IsMips64EL);
- return getSymbolBody(SymIndex);
+ return getSymbol(SymIndex);
}
// Returns source line information for a given offset.
@@ -207,7 +206,7 @@ private:
StringRef getSectionName(const Elf_Shdr &Sec);
bool shouldMerge(const Elf_Shdr &Sec);
- SymbolBody *createSymbolBody(const Elf_Sym *Sym);
+ Symbol *createSymbol(const Elf_Sym *Sym);
// .shstrtab contents.
StringRef SectionStringTable;
Modified: lld/trunk/ELF/InputSection.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/InputSection.cpp (original)
+++ lld/trunk/ELF/InputSection.cpp Fri Nov 3 14:21:47 2017
@@ -60,7 +60,7 @@ DenseMap<SectionBase *, int> elf::buildS
// Build a map from sections to their priorities.
for (InputFile *File : ObjectFiles) {
- for (SymbolBody *Body : File->getSymbols()) {
+ for (Symbol *Body : File->getSymbols()) {
auto *D = dyn_cast<DefinedRegular>(Body);
if (!D || !D->Section)
continue;
@@ -250,7 +250,7 @@ std::string InputSectionBase::getLocatio
SrcFile = toString(File);
// Find a function symbol that encloses a given location.
- for (SymbolBody *B : File->getSymbols())
+ for (Symbol *B : File->getSymbols())
if (auto *D = dyn_cast<DefinedRegular>(B))
if (D->Section == this && D->Type == STT_FUNC)
if (D->Value <= Offset && Offset < D->Value + D->Size)
@@ -276,8 +276,7 @@ static std::string createFileLineMsg(Str
//
// Returns an empty string if there's no way to get line info.
template <class ELFT>
-std::string InputSectionBase::getSrcMsg(const SymbolBody &Sym,
- uint64_t Offset) {
+std::string InputSectionBase::getSrcMsg(const Symbol &Sym, uint64_t Offset) {
// Synthetic sections don't have input files.
ObjFile<ELFT> *File = getFile<ELFT>();
if (!File)
@@ -317,7 +316,7 @@ std::string InputSectionBase::getObjMsg(
Archive = (" in archive " + File->ArchiveName).str();
// Find a symbol that encloses a given location.
- for (SymbolBody *B : File->getSymbols())
+ for (Symbol *B : File->getSymbols())
if (auto *D = dyn_cast<DefinedRegular>(B))
if (D->Section == this && D->Value <= Off && Off < D->Value + D->Size)
return Filename + ":(" + toString(*D) + ")" + Archive;
@@ -381,7 +380,7 @@ void InputSection::copyRelocations(uint8
for (const RelTy &Rel : Rels) {
RelType Type = Rel.getType(Config->IsMips64EL);
- SymbolBody &Body = this->getFile<ELFT>()->getRelocTargetSym(Rel);
+ Symbol &Body = this->getFile<ELFT>()->getRelocTargetSym(Rel);
auto *P = reinterpret_cast<typename ELFT::Rela *>(Buf);
Buf += sizeof(RelTy);
@@ -489,7 +488,7 @@ static uint64_t getAArch64UndefinedRelat
// The procedure call standard only defines a Read Write Position Independent
// RWPI variant so in practice we should expect the static base to be the base
// of the RW segment.
-static uint64_t getARMStaticBase(const SymbolBody &Body) {
+static uint64_t getARMStaticBase(const Symbol &Body) {
OutputSection *OS = Body.getOutputSection();
if (!OS || !OS->PtLoad || !OS->PtLoad->FirstSec)
fatal("SBREL relocation to " + Body.getName() + " without static base");
@@ -497,7 +496,7 @@ static uint64_t getARMStaticBase(const S
}
static uint64_t getRelocTargetVA(RelType Type, int64_t A, uint64_t P,
- const SymbolBody &Body, RelExpr Expr) {
+ const Symbol &Body, RelExpr Expr) {
switch (Expr) {
case R_INVALID:
return 0;
@@ -672,7 +671,7 @@ void InputSection::relocateNonAlloc(uint
if (!RelTy::IsRela)
Addend += Target->getImplicitAddend(BufLoc, Type);
- SymbolBody &Sym = this->getFile<ELFT>()->getRelocTargetSym(Rel);
+ Symbol &Sym = this->getFile<ELFT>()->getRelocTargetSym(Rel);
RelExpr Expr = Target->getRelExpr(Type, Sym, BufLoc);
if (Expr == R_NONE)
continue;
@@ -1013,13 +1012,13 @@ template std::string InputSectionBase::g
template std::string InputSectionBase::getLocation<ELF64LE>(uint64_t);
template std::string InputSectionBase::getLocation<ELF64BE>(uint64_t);
-template std::string InputSectionBase::getSrcMsg<ELF32LE>(const SymbolBody &,
+template std::string InputSectionBase::getSrcMsg<ELF32LE>(const Symbol &,
uint64_t);
-template std::string InputSectionBase::getSrcMsg<ELF32BE>(const SymbolBody &,
+template std::string InputSectionBase::getSrcMsg<ELF32BE>(const Symbol &,
uint64_t);
-template std::string InputSectionBase::getSrcMsg<ELF64LE>(const SymbolBody &,
+template std::string InputSectionBase::getSrcMsg<ELF64LE>(const Symbol &,
uint64_t);
-template std::string InputSectionBase::getSrcMsg<ELF64BE>(const SymbolBody &,
+template std::string InputSectionBase::getSrcMsg<ELF64BE>(const Symbol &,
uint64_t);
template void InputSection::writeTo<ELF32LE>(uint8_t *);
Modified: lld/trunk/ELF/InputSection.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/InputSection.h (original)
+++ lld/trunk/ELF/InputSection.h Fri Nov 3 14:21:47 2017
@@ -25,7 +25,7 @@ namespace lld {
namespace elf {
class DefinedCommon;
-class SymbolBody;
+class Symbol;
struct SectionPiece;
class DefinedRegular;
@@ -177,7 +177,8 @@ public:
// Returns a source location string. Used to construct an error message.
template <class ELFT> std::string getLocation(uint64_t Offset);
- template <class ELFT> std::string getSrcMsg(const SymbolBody &Sym, uint64_t Offset);
+ template <class ELFT>
+ std::string getSrcMsg(const Symbol &Sym, uint64_t Offset);
std::string getObjMsg(uint64_t Offset);
// Each section knows how to relocate itself. These functions apply
Modified: lld/trunk/ELF/LTO.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LTO.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/LTO.cpp (original)
+++ lld/trunk/ELF/LTO.cpp Fri Nov 3 14:21:47 2017
@@ -108,7 +108,7 @@ static std::unique_ptr<lto::LTO> createL
}
BitcodeCompiler::BitcodeCompiler() : LTOObj(createLTO()) {
- for (SymbolBody *Sym : Symtab->getSymbols()) {
+ for (Symbol *Sym : Symtab->getSymbols()) {
StringRef Name = Sym->getName();
for (StringRef Prefix : {"__start_", "__stop_"})
if (Name.startswith(Prefix))
@@ -118,7 +118,7 @@ BitcodeCompiler::BitcodeCompiler() : LTO
BitcodeCompiler::~BitcodeCompiler() = default;
-static void undefine(SymbolBody *S) {
+static void undefine(Symbol *S) {
replaceBody<Undefined>(S, nullptr, S->getName(), /*IsLocal=*/false,
STV_DEFAULT, S->Type);
}
@@ -126,7 +126,7 @@ static void undefine(SymbolBody *S) {
void BitcodeCompiler::add(BitcodeFile &F) {
lto::InputFile &Obj = *F.Obj;
unsigned SymNum = 0;
- std::vector<SymbolBody *> Syms = F.getSymbols();
+ std::vector<Symbol *> Syms = F.getSymbols();
std::vector<lto::SymbolResolution> Resols(Syms.size());
DenseSet<StringRef> ScriptSymbols;
@@ -136,7 +136,7 @@ void BitcodeCompiler::add(BitcodeFile &F
// Provide a resolution to the LTO API for each symbol.
for (const lto::InputFile::Symbol &ObjSym : Obj.symbols()) {
- SymbolBody *Sym = Syms[SymNum];
+ Symbol *Sym = Syms[SymNum];
lto::SymbolResolution &R = Resols[SymNum];
++SymNum;
Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Fri Nov 3 14:21:47 2017
@@ -122,12 +122,12 @@ void LinkerScript::addSymbol(SymbolAssig
// If a symbol was in PROVIDE(), we need to define it only when
// it is a referenced undefined symbol.
- SymbolBody *B = Symtab->find(Cmd->Name);
+ Symbol *B = Symtab->find(Cmd->Name);
if (Cmd->Provide && (!B || B->isDefined()))
return;
// Define a symbol.
- SymbolBody *Sym;
+ Symbol *Sym;
uint8_t Visibility = Cmd->Hidden ? STV_HIDDEN : STV_DEFAULT;
std::tie(Sym, std::ignore) = Symtab->insert(Cmd->Name, /*Type*/ 0, Visibility,
/*CanOmitFromDynSym*/ false,
Modified: lld/trunk/ELF/LinkerScript.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.h (original)
+++ lld/trunk/ELF/LinkerScript.h Fri Nov 3 14:21:47 2017
@@ -30,7 +30,7 @@ namespace lld {
namespace elf {
class DefinedRegular;
-class SymbolBody;
+class Symbol;
class InputSectionBase;
class InputSection;
class OutputSection;
Modified: lld/trunk/ELF/MapFile.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/MapFile.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/MapFile.cpp (original)
+++ lld/trunk/ELF/MapFile.cpp Fri Nov 3 14:21:47 2017
@@ -50,7 +50,7 @@ static std::string indent(int Depth) { r
static std::vector<Defined *> getSymbols() {
std::vector<Defined *> V;
for (InputFile *File : ObjectFiles)
- for (SymbolBody *B : File->getSymbols())
+ for (Symbol *B : File->getSymbols())
if (auto *DR = dyn_cast<DefinedRegular>(B))
if (DR->getFile() == File && !DR->isSection() && DR->Section &&
DR->Section->Live)
Modified: lld/trunk/ELF/MarkLive.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/MarkLive.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/MarkLive.cpp (original)
+++ lld/trunk/ELF/MarkLive.cpp Fri Nov 3 14:21:47 2017
@@ -62,7 +62,7 @@ static DenseMap<StringRef, std::vector<I
template <class ELFT, class RelT>
static void resolveReloc(InputSectionBase &Sec, RelT &Rel,
std::function<void(InputSectionBase *, uint64_t)> Fn) {
- SymbolBody &B = Sec.getFile<ELFT>()->getRelocTargetSym(Rel);
+ Symbol &B = Sec.getFile<ELFT>()->getRelocTargetSym(Rel);
if (auto *D = dyn_cast<DefinedRegular>(&B)) {
if (!D->Section)
@@ -211,7 +211,7 @@ template <class ELFT> static void doGcSe
Q.push_back(S);
};
- auto MarkSymbol = [&](SymbolBody *Sym) {
+ auto MarkSymbol = [&](Symbol *Sym) {
if (auto *D = dyn_cast_or_null<DefinedRegular>(Sym))
if (auto *IS = cast_or_null<InputSectionBase>(D->Section))
Enqueue(IS, D->Value);
@@ -228,7 +228,7 @@ template <class ELFT> static void doGcSe
// Preserve externally-visible symbols if the symbols defined by this
// file can interrupt other ELF file's symbols at runtime.
- for (SymbolBody *S : Symtab->getSymbols())
+ for (Symbol *S : Symtab->getSymbols())
if (S->includeInDynsym())
MarkSymbol(S);
Modified: lld/trunk/ELF/OutputSections.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/OutputSections.cpp (original)
+++ lld/trunk/ELF/OutputSections.cpp Fri Nov 3 14:21:47 2017
@@ -425,7 +425,7 @@ static void finalizeShtGroup(OutputSecti
// sh_info then contain index of an entry in symbol table section which
// provides signature of the section group.
ObjFile<ELFT> *Obj = Sections[0]->getFile<ELFT>();
- ArrayRef<SymbolBody *> Symbols = Obj->getSymbols();
+ ArrayRef<Symbol *> Symbols = Obj->getSymbols();
OS->Info = InX::SymTab->getSymbolIndex(Symbols[Sections[0]->Info]);
}
Modified: lld/trunk/ELF/OutputSections.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/OutputSections.h (original)
+++ lld/trunk/ELF/OutputSections.h Fri Nov 3 14:21:47 2017
@@ -23,7 +23,7 @@ namespace lld {
namespace elf {
struct PhdrEntry;
-class SymbolBody;
+class Symbol;
struct EhSectionPiece;
class EhInputSection;
class InputSection;
Modified: lld/trunk/ELF/Relocations.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Relocations.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Relocations.cpp (original)
+++ lld/trunk/ELF/Relocations.cpp Fri Nov 3 14:21:47 2017
@@ -70,7 +70,7 @@ using namespace lld::elf;
// >>> referenced by bar.c:12 (/home/alice/src/bar.c:12)
// >>> /home/alice/src/bar.o:(.text+0x1)
template <class ELFT>
-static std::string getLocation(InputSectionBase &S, const SymbolBody &Sym,
+static std::string getLocation(InputSectionBase &S, const Symbol &Sym,
uint64_t Off) {
std::string Msg =
"\n>>> defined in " + toString(Sym.getFile()) + "\n>>> referenced by ";
@@ -108,7 +108,7 @@ static bool isMipsGprel(RelType Type) {
// Mips has a custom MipsGotSection that handles the writing of GOT entries
// without dynamic relocations.
template <class ELFT>
-static unsigned handleMipsTlsRelocation(RelType Type, SymbolBody &Body,
+static unsigned handleMipsTlsRelocation(RelType Type, Symbol &Body,
InputSectionBase &C, uint64_t Offset,
int64_t Addend, RelExpr Expr) {
if (Expr == R_MIPS_TLSLD) {
@@ -150,7 +150,7 @@ static unsigned handleMipsTlsRelocation(
// GOT[e0] Module Index (Used to find pointer to TLS block at run-time)
// GOT[e1] Offset of symbol in TLS block
template <class ELFT>
-static unsigned handleARMTlsRelocation(RelType Type, SymbolBody &Body,
+static unsigned handleARMTlsRelocation(RelType Type, Symbol &Body,
InputSectionBase &C, uint64_t Offset,
int64_t Addend, RelExpr Expr) {
// The Dynamic TLS Module Index Relocation for a symbol defined in an
@@ -159,8 +159,7 @@ static unsigned handleARMTlsRelocation(R
bool NeedDynId = Body.IsPreemptible || Config->Shared;
bool NeedDynOff = Body.IsPreemptible;
- auto AddTlsReloc = [&](uint64_t Off, RelType Type, SymbolBody *Dest,
- bool Dyn) {
+ auto AddTlsReloc = [&](uint64_t Off, RelType Type, Symbol *Dest, bool Dyn) {
if (Dyn)
In<ELFT>::RelaDyn->addReloc({Type, InX::Got, Off, false, Dest, 0});
else
@@ -197,7 +196,7 @@ static unsigned handleARMTlsRelocation(R
// Returns the number of relocations processed.
template <class ELFT>
static unsigned
-handleTlsRelocation(RelType Type, SymbolBody &Body, InputSectionBase &C,
+handleTlsRelocation(RelType Type, Symbol &Body, InputSectionBase &C,
typename ELFT::uint Offset, int64_t Addend, RelExpr Expr) {
if (!(C.Flags & SHF_ALLOC))
return 0;
@@ -326,7 +325,7 @@ static RelType getMipsPairType(RelType T
// True if non-preemptable symbol always has the same value regardless of where
// the DSO is loaded.
-static bool isAbsolute(const SymbolBody &Body) {
+static bool isAbsolute(const Symbol &Body) {
if (Body.isUndefWeak())
return true;
if (const auto *DR = dyn_cast<DefinedRegular>(&Body))
@@ -334,7 +333,7 @@ static bool isAbsolute(const SymbolBody
return false;
}
-static bool isAbsoluteValue(const SymbolBody &Body) {
+static bool isAbsoluteValue(const Symbol &Body) {
return isAbsolute(Body) || Body.isTls();
}
@@ -370,8 +369,8 @@ static bool isRelExpr(RelExpr Expr) {
// dynamic relocation so that the relocation will be fixed at load-time.
template <class ELFT>
static bool isStaticLinkTimeConstant(RelExpr E, RelType Type,
- const SymbolBody &Body,
- InputSectionBase &S, uint64_t RelOff) {
+ const Symbol &Body, InputSectionBase &S,
+ uint64_t RelOff) {
// These expressions always compute a constant
if (isRelExprOneOf<R_SIZE, R_GOT_FROM_END, R_GOT_OFF, R_MIPS_GOT_LOCAL_PAGE,
R_MIPS_GOT_OFF, R_MIPS_GOT_OFF32, R_MIPS_GOT_GP_PC,
@@ -473,7 +472,7 @@ static std::vector<SharedSymbol *> getSy
S.st_value != SS->Value)
continue;
StringRef Name = check(S.getName(File->getStringTable()));
- SymbolBody *Sym = Symtab->find(Name);
+ Symbol *Sym = Symtab->find(Name);
if (auto *Alias = dyn_cast_or_null<SharedSymbol>(Sym))
Ret.push_back(Alias);
}
@@ -558,7 +557,7 @@ static void errorOrWarn(const Twine &Msg
}
template <class ELFT>
-static RelExpr adjustExpr(SymbolBody &Body, RelExpr Expr, RelType Type,
+static RelExpr adjustExpr(Symbol &Body, RelExpr Expr, RelType Type,
InputSectionBase &S, uint64_t RelOff) {
// We can create any dynamic relocation if a section is simply writable.
if (S.Flags & SHF_WRITE)
@@ -712,7 +711,7 @@ static int64_t computeAddend(const RelTy
// Report an undefined symbol if necessary.
// Returns true if this function printed out an error message.
template <class ELFT>
-static bool maybeReportUndefined(SymbolBody &Sym, InputSectionBase &Sec,
+static bool maybeReportUndefined(Symbol &Sym, InputSectionBase &Sec,
uint64_t Offset) {
if (Config->UnresolvedSymbols == UnresolvedPolicy::IgnoreAll)
return false;
@@ -806,15 +805,14 @@ private:
template <class ELFT, class GotPltSection>
static void addPltEntry(PltSection *Plt, GotPltSection *GotPlt,
- RelocationSection<ELFT> *Rel, RelType Type,
- SymbolBody &Sym, bool UseSymVA) {
+ RelocationSection<ELFT> *Rel, RelType Type, Symbol &Sym,
+ bool UseSymVA) {
Plt->addEntry<ELFT>(Sym);
GotPlt->addEntry(Sym);
Rel->addReloc({Type, GotPlt, Sym.getGotPltOffset(), UseSymVA, &Sym, 0});
}
-template <class ELFT>
-static void addGotEntry(SymbolBody &Sym, bool Preemptible) {
+template <class ELFT> static void addGotEntry(Symbol &Sym, bool Preemptible) {
InX::Got->addEntry(Sym);
RelExpr Expr = Sym.isTls() ? R_TLS : R_ABS;
@@ -873,7 +871,7 @@ static void scanRelocs(InputSectionBase
for (auto I = Rels.begin(), End = Rels.end(); I != End; ++I) {
const RelTy &Rel = *I;
- SymbolBody &Body = Sec.getFile<ELFT>()->getRelocTargetSym(Rel);
+ Symbol &Body = Sec.getFile<ELFT>()->getRelocTargetSym(Rel);
RelType Type = Rel.getType(Config->IsMips64EL);
// Deal with MIPS oddity.
@@ -1281,7 +1279,7 @@ ThunkSection *ThunkCreator::addThunkSect
return TS;
}
-std::pair<Thunk *, bool> ThunkCreator::getThunk(SymbolBody &Body, RelType Type,
+std::pair<Thunk *, bool> ThunkCreator::getThunk(Symbol &Body, RelType Type,
uint64_t Src) {
auto Res = ThunkedSymbols.insert({&Body, std::vector<Thunk *>()});
if (!Res.second) {
Modified: lld/trunk/ELF/Relocations.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Relocations.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Relocations.h (original)
+++ lld/trunk/ELF/Relocations.h Fri Nov 3 14:21:47 2017
@@ -17,7 +17,7 @@
namespace lld {
namespace elf {
-class SymbolBody;
+class Symbol;
class InputSection;
class InputSectionBase;
class OutputSection;
@@ -118,7 +118,7 @@ struct Relocation {
RelType Type;
uint64_t Offset;
int64_t Addend;
- SymbolBody *Sym;
+ Symbol *Sym;
};
template <class ELFT> void scanRelocations(InputSectionBase &);
@@ -152,8 +152,7 @@ private:
ArrayRef<OutputSection *> OutputSections,
std::function<void(OutputSection *, InputSectionDescription *)> Fn);
- std::pair<Thunk *, bool> getThunk(SymbolBody &Body, RelType Type,
- uint64_t Src);
+ std::pair<Thunk *, bool> getThunk(Symbol &Body, RelType Type, uint64_t Src);
ThunkSection *addThunkSection(OutputSection *OS, InputSectionDescription *,
uint64_t Off);
@@ -161,11 +160,11 @@ private:
bool normalizeExistingThunk(Relocation &Rel, uint64_t Src);
// Record all the available Thunks for a Symbol
- llvm::DenseMap<SymbolBody *, std::vector<Thunk *>> ThunkedSymbols;
+ llvm::DenseMap<Symbol *, std::vector<Thunk *>> ThunkedSymbols;
// Find a Thunk from the Thunks symbol definition, we can use this to find
// the Thunk from a relocation to the Thunks symbol definition.
- llvm::DenseMap<SymbolBody *, Thunk *> Thunks;
+ llvm::DenseMap<Symbol *, Thunk *> Thunks;
// Track InputSections that have an inline ThunkSection placed in front
// an inline ThunkSection may have control fall through to the section below
Modified: lld/trunk/ELF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.cpp (original)
+++ lld/trunk/ELF/SymbolTable.cpp Fri Nov 3 14:21:47 2017
@@ -136,8 +136,8 @@ template <class ELFT> void SymbolTable::
template <class ELFT>
DefinedRegular *SymbolTable::addAbsolute(StringRef Name, uint8_t Visibility,
uint8_t Binding) {
- SymbolBody *Sym = addRegular<ELFT>(Name, Visibility, STT_NOTYPE, 0, 0,
- Binding, nullptr, nullptr);
+ Symbol *Sym = addRegular<ELFT>(Name, Visibility, STT_NOTYPE, 0, 0, Binding,
+ nullptr, nullptr);
return cast<DefinedRegular>(Sym);
}
@@ -150,11 +150,11 @@ void SymbolTable::trace(StringRef Name)
// Rename SYM as __wrap_SYM. The original symbol is preserved as __real_SYM.
// Used to implement --wrap.
template <class ELFT> void SymbolTable::addSymbolWrap(StringRef Name) {
- SymbolBody *Sym = find(Name);
+ Symbol *Sym = find(Name);
if (!Sym)
return;
- SymbolBody *Real = addUndefined<ELFT>(Saver.save("__real_" + Name));
- SymbolBody *Wrap = addUndefined<ELFT>(Saver.save("__wrap_" + Name));
+ Symbol *Real = addUndefined<ELFT>(Saver.save("__real_" + Name));
+ Symbol *Wrap = addUndefined<ELFT>(Saver.save("__wrap_" + Name));
defsym(Real, Sym);
defsym(Sym, Wrap);
@@ -165,7 +165,7 @@ template <class ELFT> void SymbolTable::
// Creates alias for symbol. Used to implement --defsym=ALIAS=SYM.
template <class ELFT>
void SymbolTable::addSymbolAlias(StringRef Alias, StringRef Name) {
- SymbolBody *B = find(Name);
+ Symbol *B = find(Name);
if (!B) {
error("-defsym: undefined symbol: " + Name);
return;
@@ -204,15 +204,15 @@ void SymbolTable::applySymbolRenames() {
// __real_foo into it.
for (unsigned I = 0, N = WrapSymbols.size(); I < N; ++I) {
// We now have two copies of __wrap_foo. Drop one.
- SymbolBody *Wrap = WrapSymbols[I].first;
+ Symbol *Wrap = WrapSymbols[I].first;
Wrap->IsUsedInRegularObj = false;
- auto *Real = (SymbolBody *)&Origs[I];
+ auto *Real = (Symbol *)&Origs[I];
// If __real_foo was undefined, we don't want it in the symbol table.
if (!Real->isInCurrentOutput())
continue;
- auto *NewSym = (SymbolBody *)make<SymbolUnion>();
+ auto *NewSym = (Symbol *)make<SymbolUnion>();
memcpy(NewSym, Real, sizeof(SymbolUnion));
SymVector.push_back(NewSym);
}
@@ -227,7 +227,7 @@ static uint8_t getMinVisibility(uint8_t
}
// Find an existing symbol or create and insert a new one.
-std::pair<SymbolBody *, bool> SymbolTable::insert(StringRef Name) {
+std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name) {
// <name>@@<version> means the symbol is the default version. In that
// case <name>@@<version> will be used to resolve references to <name>.
//
@@ -248,9 +248,9 @@ std::pair<SymbolBody *, bool> SymbolTabl
V = SymIndex((int)SymVector.size(), true);
}
- SymbolBody *Sym;
+ Symbol *Sym;
if (IsNew) {
- Sym = (SymbolBody *)make<SymbolUnion>();
+ Sym = (Symbol *)make<SymbolUnion>();
Sym->InVersionScript = false;
Sym->Binding = STB_WEAK;
Sym->Visibility = STV_DEFAULT;
@@ -268,11 +268,11 @@ std::pair<SymbolBody *, bool> SymbolTabl
// Find an existing symbol or create and insert a new one, then apply the given
// attributes.
-std::pair<SymbolBody *, bool> SymbolTable::insert(StringRef Name, uint8_t Type,
- uint8_t Visibility,
- bool CanOmitFromDynSym,
- InputFile *File) {
- SymbolBody *S;
+std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name, uint8_t Type,
+ uint8_t Visibility,
+ bool CanOmitFromDynSym,
+ InputFile *File) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(Name);
@@ -285,7 +285,7 @@ std::pair<SymbolBody *, bool> SymbolTabl
if (!File || File->kind() == InputFile::ObjKind)
S->IsUsedInRegularObj = true;
- if (!WasInserted && S->Type != SymbolBody::UnknownType &&
+ if (!WasInserted && S->Type != Symbol::UnknownType &&
((Type == STT_TLS) != S->isTls())) {
error("TLS attribute mismatch: " + toString(*S) + "\n>>> defined in " +
toString(S->File) + "\n>>> defined in " + toString(File));
@@ -294,7 +294,7 @@ std::pair<SymbolBody *, bool> SymbolTabl
return {S, WasInserted};
}
-template <class ELFT> SymbolBody *SymbolTable::addUndefined(StringRef Name) {
+template <class ELFT> Symbol *SymbolTable::addUndefined(StringRef Name) {
return addUndefined<ELFT>(Name, /*IsLocal=*/false, STB_GLOBAL, STV_DEFAULT,
/*Type*/ 0,
/*CanOmitFromDynSym*/ false, /*File*/ nullptr);
@@ -303,11 +303,10 @@ template <class ELFT> SymbolBody *Symbol
static uint8_t getVisibility(uint8_t StOther) { return StOther & 3; }
template <class ELFT>
-SymbolBody *SymbolTable::addUndefined(StringRef Name, bool IsLocal,
- uint8_t Binding, uint8_t StOther,
- uint8_t Type, bool CanOmitFromDynSym,
- InputFile *File) {
- SymbolBody *S;
+Symbol *SymbolTable::addUndefined(StringRef Name, bool IsLocal, uint8_t Binding,
+ uint8_t StOther, uint8_t Type,
+ bool CanOmitFromDynSym, InputFile *File) {
+ Symbol *S;
bool WasInserted;
uint8_t Visibility = getVisibility(StOther);
std::tie(S, WasInserted) =
@@ -342,7 +341,7 @@ SymbolBody *SymbolTable::addUndefined(St
// FIXME: If users can transition to using
// .symver foo,foo@@@VER
// we can delete this hack.
-static int compareVersion(SymbolBody *S, StringRef Name) {
+static int compareVersion(Symbol *S, StringRef Name) {
bool A = Name.contains("@@");
bool B = S->getName().contains("@@");
if (A && !B)
@@ -355,7 +354,7 @@ static int compareVersion(SymbolBody *S,
// We have a new defined symbol with the specified binding. Return 1 if the new
// symbol should win, -1 if the new symbol should lose, or 0 if both symbols are
// strong defined symbols.
-static int compareDefined(SymbolBody *S, bool WasInserted, uint8_t Binding,
+static int compareDefined(Symbol *S, bool WasInserted, uint8_t Binding,
StringRef Name) {
if (WasInserted)
return 1;
@@ -373,9 +372,9 @@ static int compareDefined(SymbolBody *S,
// We have a new non-common defined symbol with the specified binding. Return 1
// if the new symbol should win, -1 if the new symbol should lose, or 0 if there
// is a conflict. If the new symbol wins, also update the binding.
-static int compareDefinedNonCommon(SymbolBody *S, bool WasInserted,
- uint8_t Binding, bool IsAbsolute,
- uint64_t Value, StringRef Name) {
+static int compareDefinedNonCommon(Symbol *S, bool WasInserted, uint8_t Binding,
+ bool IsAbsolute, uint64_t Value,
+ StringRef Name) {
if (int Cmp = compareDefined(S, WasInserted, Binding, Name)) {
if (Cmp > 0)
S->Binding = Binding;
@@ -395,11 +394,10 @@ static int compareDefinedNonCommon(Symbo
return 0;
}
-SymbolBody *SymbolTable::addCommon(StringRef N, uint64_t Size,
- uint32_t Alignment, uint8_t Binding,
- uint8_t StOther, uint8_t Type,
- InputFile *File) {
- SymbolBody *S;
+Symbol *SymbolTable::addCommon(StringRef N, uint64_t Size, uint32_t Alignment,
+ uint8_t Binding, uint8_t StOther, uint8_t Type,
+ InputFile *File) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(N, Type, getVisibility(StOther),
/*CanOmitFromDynSym*/ false, File);
@@ -433,14 +431,14 @@ static void warnOrError(const Twine &Msg
error(Msg);
}
-static void reportDuplicate(SymbolBody *Sym, InputFile *NewFile) {
+static void reportDuplicate(Symbol *Sym, InputFile *NewFile) {
warnOrError("duplicate symbol: " + toString(*Sym) + "\n>>> defined in " +
toString(Sym->getFile()) + "\n>>> defined in " +
toString(NewFile));
}
template <class ELFT>
-static void reportDuplicate(SymbolBody *Sym, InputSectionBase *ErrSec,
+static void reportDuplicate(Symbol *Sym, InputSectionBase *ErrSec,
typename ELFT::uint ErrOffset) {
DefinedRegular *D = dyn_cast<DefinedRegular>(Sym);
if (!D || !D->Section || !ErrSec) {
@@ -472,11 +470,10 @@ static void reportDuplicate(SymbolBody *
}
template <typename ELFT>
-SymbolBody *SymbolTable::addRegular(StringRef Name, uint8_t StOther,
- uint8_t Type, uint64_t Value, uint64_t Size,
- uint8_t Binding, SectionBase *Section,
- InputFile *File) {
- SymbolBody *S;
+Symbol *SymbolTable::addRegular(StringRef Name, uint8_t StOther, uint8_t Type,
+ uint64_t Value, uint64_t Size, uint8_t Binding,
+ SectionBase *Section, InputFile *File) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(Name, Type, getVisibility(StOther),
/*CanOmitFromDynSym*/ false, File);
@@ -498,7 +495,7 @@ void SymbolTable::addShared(StringRef Na
// DSO symbols do not affect visibility in the output, so we pass STV_DEFAULT
// as the visibility, which will leave the visibility in the symbol table
// unchanged.
- SymbolBody *S;
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(Name, Sym.getType(), STV_DEFAULT,
/*CanOmitFromDynSym*/ true, File);
@@ -517,10 +514,10 @@ void SymbolTable::addShared(StringRef Na
}
}
-SymbolBody *SymbolTable::addBitcode(StringRef Name, uint8_t Binding,
- uint8_t StOther, uint8_t Type,
- bool CanOmitFromDynSym, BitcodeFile *F) {
- SymbolBody *S;
+Symbol *SymbolTable::addBitcode(StringRef Name, uint8_t Binding,
+ uint8_t StOther, uint8_t Type,
+ bool CanOmitFromDynSym, BitcodeFile *F) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) =
insert(Name, Type, getVisibility(StOther), CanOmitFromDynSym, F);
@@ -534,7 +531,7 @@ SymbolBody *SymbolTable::addBitcode(Stri
return S;
}
-SymbolBody *SymbolTable::find(StringRef Name) {
+Symbol *SymbolTable::find(StringRef Name) {
auto It = Symtab.find(CachedHashStringRef(Name));
if (It == Symtab.end())
return nullptr;
@@ -544,7 +541,7 @@ SymbolBody *SymbolTable::find(StringRef
return SymVector[V.Idx];
}
-void SymbolTable::defsym(SymbolBody *Dst, SymbolBody *Src) {
+void SymbolTable::defsym(Symbol *Dst, Symbol *Src) {
// We want to tell LTO not to inline Dst symbol because LTO doesn't
// know the final symbol contents after renaming.
Dst->CanInline = false;
@@ -556,13 +553,13 @@ void SymbolTable::defsym(SymbolBody *Dst
}
template <class ELFT>
-SymbolBody *SymbolTable::addLazyArchive(StringRef Name, ArchiveFile *F,
- const object::Archive::Symbol Sym) {
- SymbolBody *S;
+Symbol *SymbolTable::addLazyArchive(StringRef Name, ArchiveFile *F,
+ const object::Archive::Symbol Sym) {
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(Name);
if (WasInserted) {
- replaceBody<LazyArchive>(S, F, Sym, SymbolBody::UnknownType);
+ replaceBody<LazyArchive>(S, F, Sym, Symbol::UnknownType);
return S;
}
if (!S->isUndefined())
@@ -582,11 +579,11 @@ SymbolBody *SymbolTable::addLazyArchive(
template <class ELFT>
void SymbolTable::addLazyObject(StringRef Name, LazyObjFile &Obj) {
- SymbolBody *S;
+ Symbol *S;
bool WasInserted;
std::tie(S, WasInserted) = insert(Name);
if (WasInserted) {
- replaceBody<LazyObject>(S, &Obj, Name, SymbolBody::UnknownType);
+ replaceBody<LazyObject>(S, &Obj, Name, Symbol::UnknownType);
return;
}
if (!S->isUndefined())
@@ -601,7 +598,7 @@ void SymbolTable::addLazyObject(StringRe
// If we already saw this symbol, force loading its file.
template <class ELFT> void SymbolTable::fetchIfLazy(StringRef Name) {
- if (SymbolBody *B = find(Name)) {
+ if (Symbol *B = find(Name)) {
// Mark the symbol not to be eliminated by LTO
// even if it is a bitcode symbol.
B->IsUsedInRegularObj = true;
@@ -621,7 +618,7 @@ template <class ELFT> void SymbolTable::
template <class ELFT> void SymbolTable::scanShlibUndefined() {
for (InputFile *F : SharedFiles) {
for (StringRef U : cast<SharedFile<ELFT>>(F)->getUndefinedSymbols()) {
- SymbolBody *Sym = find(U);
+ Symbol *Sym = find(U);
if (!Sym || !Sym->isDefined())
continue;
Sym->ExportDynamic = true;
@@ -648,10 +645,10 @@ template <class ELFT> void SymbolTable::
// other than trying to match a pattern against all demangled symbols.
// So, if "extern C++" feature is used, we need to demangle all known
// symbols.
-StringMap<std::vector<SymbolBody *>> &SymbolTable::getDemangledSyms() {
+StringMap<std::vector<Symbol *>> &SymbolTable::getDemangledSyms() {
if (!DemangledSyms) {
DemangledSyms.emplace();
- for (SymbolBody *Sym : SymVector) {
+ for (Symbol *Sym : SymVector) {
if (!Sym->isInCurrentOutput())
continue;
if (Optional<std::string> S = demangle(Sym->getName()))
@@ -663,17 +660,17 @@ StringMap<std::vector<SymbolBody *>> &Sy
return *DemangledSyms;
}
-std::vector<SymbolBody *> SymbolTable::findByVersion(SymbolVersion Ver) {
+std::vector<Symbol *> SymbolTable::findByVersion(SymbolVersion Ver) {
if (Ver.IsExternCpp)
return getDemangledSyms().lookup(Ver.Name);
- if (SymbolBody *B = find(Ver.Name))
+ if (Symbol *B = find(Ver.Name))
if (B->isInCurrentOutput())
return {B};
return {};
}
-std::vector<SymbolBody *> SymbolTable::findAllByVersion(SymbolVersion Ver) {
- std::vector<SymbolBody *> Res;
+std::vector<Symbol *> SymbolTable::findAllByVersion(SymbolVersion Ver) {
+ std::vector<Symbol *> Res;
StringMatcher M(Ver.Name);
if (Ver.IsExternCpp) {
@@ -683,7 +680,7 @@ std::vector<SymbolBody *> SymbolTable::f
return Res;
}
- for (SymbolBody *Sym : SymVector)
+ for (Symbol *Sym : SymVector)
if (Sym->isInCurrentOutput() && M.match(Sym->getName()))
Res.push_back(Sym);
return Res;
@@ -706,13 +703,13 @@ void SymbolTable::handleAnonymousVersion
// Handles -dynamic-list.
void SymbolTable::handleDynamicList() {
for (SymbolVersion &Ver : Config->DynamicList) {
- std::vector<SymbolBody *> Syms;
+ std::vector<Symbol *> Syms;
if (Ver.HasWildcard)
Syms = findByVersion(Ver);
else
Syms = findAllByVersion(Ver);
- for (SymbolBody *B : Syms) {
+ for (Symbol *B : Syms) {
if (!Config->Shared)
B->ExportDynamic = true;
else if (B->includeInDynsym())
@@ -729,7 +726,7 @@ void SymbolTable::assignExactVersion(Sym
return;
// Get a list of symbols which we need to assign the version to.
- std::vector<SymbolBody *> Syms = findByVersion(Ver);
+ std::vector<Symbol *> Syms = findByVersion(Ver);
if (Syms.empty()) {
if (Config->NoUndefinedVersion)
error("version script assignment of '" + VersionName + "' to symbol '" +
@@ -738,7 +735,7 @@ void SymbolTable::assignExactVersion(Sym
}
// Assign the version.
- for (SymbolBody *Sym : Syms) {
+ for (Symbol *Sym : Syms) {
// Skip symbols containing version info because symbol versions
// specified by symbol names take precedence over version scripts.
// See parseSymbolVersion().
@@ -759,7 +756,7 @@ void SymbolTable::assignWildcardVersion(
// Exact matching takes precendence over fuzzy matching,
// so we set a version to a symbol only if no version has been assigned
// to the symbol. This behavior is compatible with GNU.
- for (SymbolBody *B : findAllByVersion(Ver))
+ for (Symbol *B : findAllByVersion(Ver))
if (B->VersionId == Config->DefaultSymbolVersion)
B->VersionId = VersionId;
}
@@ -792,7 +789,7 @@ void SymbolTable::scanVersionScript() {
// Symbol themselves might know their versions because symbols
// can contain versions in the form of <name>@<version>.
// Let them parse and update their names to exclude version suffix.
- for (SymbolBody *Sym : SymVector)
+ for (Symbol *Sym : SymVector)
Sym->parseSymbolVersion();
}
@@ -801,27 +798,23 @@ template void SymbolTable::addSymbolWrap
template void SymbolTable::addSymbolWrap<ELF64LE>(StringRef);
template void SymbolTable::addSymbolWrap<ELF64BE>(StringRef);
-template SymbolBody *SymbolTable::addUndefined<ELF32LE>(StringRef);
-template SymbolBody *SymbolTable::addUndefined<ELF32BE>(StringRef);
-template SymbolBody *SymbolTable::addUndefined<ELF64LE>(StringRef);
-template SymbolBody *SymbolTable::addUndefined<ELF64BE>(StringRef);
-
-template SymbolBody *SymbolTable::addUndefined<ELF32LE>(StringRef, bool,
- uint8_t, uint8_t,
- uint8_t, bool,
- InputFile *);
-template SymbolBody *SymbolTable::addUndefined<ELF32BE>(StringRef, bool,
- uint8_t, uint8_t,
- uint8_t, bool,
- InputFile *);
-template SymbolBody *SymbolTable::addUndefined<ELF64LE>(StringRef, bool,
- uint8_t, uint8_t,
- uint8_t, bool,
- InputFile *);
-template SymbolBody *SymbolTable::addUndefined<ELF64BE>(StringRef, bool,
- uint8_t, uint8_t,
- uint8_t, bool,
- InputFile *);
+template Symbol *SymbolTable::addUndefined<ELF32LE>(StringRef);
+template Symbol *SymbolTable::addUndefined<ELF32BE>(StringRef);
+template Symbol *SymbolTable::addUndefined<ELF64LE>(StringRef);
+template Symbol *SymbolTable::addUndefined<ELF64BE>(StringRef);
+
+template Symbol *SymbolTable::addUndefined<ELF32LE>(StringRef, bool, uint8_t,
+ uint8_t, uint8_t, bool,
+ InputFile *);
+template Symbol *SymbolTable::addUndefined<ELF32BE>(StringRef, bool, uint8_t,
+ uint8_t, uint8_t, bool,
+ InputFile *);
+template Symbol *SymbolTable::addUndefined<ELF64LE>(StringRef, bool, uint8_t,
+ uint8_t, uint8_t, bool,
+ InputFile *);
+template Symbol *SymbolTable::addUndefined<ELF64BE>(StringRef, bool, uint8_t,
+ uint8_t, uint8_t, bool,
+ InputFile *);
template void SymbolTable::addSymbolAlias<ELF32LE>(StringRef, StringRef);
template void SymbolTable::addSymbolAlias<ELF32BE>(StringRef, StringRef);
@@ -833,18 +826,18 @@ template void SymbolTable::addCombinedLT
template void SymbolTable::addCombinedLTOObject<ELF64LE>();
template void SymbolTable::addCombinedLTOObject<ELF64BE>();
-template SymbolBody *
-SymbolTable::addRegular<ELF32LE>(StringRef, uint8_t, uint8_t, uint64_t,
- uint64_t, uint8_t, SectionBase *, InputFile *);
-template SymbolBody *
-SymbolTable::addRegular<ELF32BE>(StringRef, uint8_t, uint8_t, uint64_t,
- uint64_t, uint8_t, SectionBase *, InputFile *);
-template SymbolBody *
-SymbolTable::addRegular<ELF64LE>(StringRef, uint8_t, uint8_t, uint64_t,
- uint64_t, uint8_t, SectionBase *, InputFile *);
-template SymbolBody *
-SymbolTable::addRegular<ELF64BE>(StringRef, uint8_t, uint8_t, uint64_t,
- uint64_t, uint8_t, SectionBase *, InputFile *);
+template Symbol *SymbolTable::addRegular<ELF32LE>(StringRef, uint8_t, uint8_t,
+ uint64_t, uint64_t, uint8_t,
+ SectionBase *, InputFile *);
+template Symbol *SymbolTable::addRegular<ELF32BE>(StringRef, uint8_t, uint8_t,
+ uint64_t, uint64_t, uint8_t,
+ SectionBase *, InputFile *);
+template Symbol *SymbolTable::addRegular<ELF64LE>(StringRef, uint8_t, uint8_t,
+ uint64_t, uint64_t, uint8_t,
+ SectionBase *, InputFile *);
+template Symbol *SymbolTable::addRegular<ELF64BE>(StringRef, uint8_t, uint8_t,
+ uint64_t, uint64_t, uint8_t,
+ SectionBase *, InputFile *);
template DefinedRegular *SymbolTable::addAbsolute<ELF32LE>(StringRef, uint8_t,
uint8_t);
@@ -855,16 +848,16 @@ template DefinedRegular *SymbolTable::ad
template DefinedRegular *SymbolTable::addAbsolute<ELF64BE>(StringRef, uint8_t,
uint8_t);
-template SymbolBody *
+template Symbol *
SymbolTable::addLazyArchive<ELF32LE>(StringRef, ArchiveFile *,
const object::Archive::Symbol);
-template SymbolBody *
+template Symbol *
SymbolTable::addLazyArchive<ELF32BE>(StringRef, ArchiveFile *,
const object::Archive::Symbol);
-template SymbolBody *
+template Symbol *
SymbolTable::addLazyArchive<ELF64LE>(StringRef, ArchiveFile *,
const object::Archive::Symbol);
-template SymbolBody *
+template Symbol *
SymbolTable::addLazyArchive<ELF64BE>(StringRef, ArchiveFile *,
const object::Archive::Symbol);
Modified: lld/trunk/ELF/SymbolTable.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.h (original)
+++ lld/trunk/ELF/SymbolTable.h Fri Nov 3 14:21:47 2017
@@ -39,22 +39,22 @@ public:
template <class ELFT> void addSymbolWrap(StringRef Name);
void applySymbolRenames();
- ArrayRef<SymbolBody *> getSymbols() const { return SymVector; }
+ ArrayRef<Symbol *> getSymbols() const { return SymVector; }
template <class ELFT>
DefinedRegular *addAbsolute(StringRef Name,
uint8_t Visibility = llvm::ELF::STV_HIDDEN,
uint8_t Binding = llvm::ELF::STB_GLOBAL);
- template <class ELFT> SymbolBody *addUndefined(StringRef Name);
+ template <class ELFT> Symbol *addUndefined(StringRef Name);
template <class ELFT>
- SymbolBody *addUndefined(StringRef Name, bool IsLocal, uint8_t Binding,
- uint8_t StOther, uint8_t Type,
- bool CanOmitFromDynSym, InputFile *File);
+ Symbol *addUndefined(StringRef Name, bool IsLocal, uint8_t Binding,
+ uint8_t StOther, uint8_t Type, bool CanOmitFromDynSym,
+ InputFile *File);
template <class ELFT>
- SymbolBody *addRegular(StringRef Name, uint8_t StOther, uint8_t Type,
- uint64_t Value, uint64_t Size, uint8_t Binding,
- SectionBase *Section, InputFile *File);
+ Symbol *addRegular(StringRef Name, uint8_t StOther, uint8_t Type,
+ uint64_t Value, uint64_t Size, uint8_t Binding,
+ SectionBase *Section, InputFile *File);
template <class ELFT>
void addShared(StringRef Name, SharedFile<ELFT> *F,
@@ -62,40 +62,39 @@ public:
const typename ELFT::Verdef *Verdef);
template <class ELFT>
- SymbolBody *addLazyArchive(StringRef Name, ArchiveFile *F,
- const llvm::object::Archive::Symbol S);
+ Symbol *addLazyArchive(StringRef Name, ArchiveFile *F,
+ const llvm::object::Archive::Symbol S);
template <class ELFT> void addLazyObject(StringRef Name, LazyObjFile &Obj);
- SymbolBody *addBitcode(StringRef Name, uint8_t Binding, uint8_t StOther,
- uint8_t Type, bool CanOmitFromDynSym,
- BitcodeFile *File);
-
- SymbolBody *addCommon(StringRef Name, uint64_t Size, uint32_t Alignment,
- uint8_t Binding, uint8_t StOther, uint8_t Type,
- InputFile *File);
-
- std::pair<SymbolBody *, bool> insert(StringRef Name);
- std::pair<SymbolBody *, bool> insert(StringRef Name, uint8_t Type,
- uint8_t Visibility,
- bool CanOmitFromDynSym, InputFile *File);
+ Symbol *addBitcode(StringRef Name, uint8_t Binding, uint8_t StOther,
+ uint8_t Type, bool CanOmitFromDynSym, BitcodeFile *File);
+
+ Symbol *addCommon(StringRef Name, uint64_t Size, uint32_t Alignment,
+ uint8_t Binding, uint8_t StOther, uint8_t Type,
+ InputFile *File);
+
+ std::pair<Symbol *, bool> insert(StringRef Name);
+ std::pair<Symbol *, bool> insert(StringRef Name, uint8_t Type,
+ uint8_t Visibility, bool CanOmitFromDynSym,
+ InputFile *File);
template <class ELFT> void fetchIfLazy(StringRef Name);
template <class ELFT> void scanShlibUndefined();
void scanVersionScript();
- SymbolBody *find(StringRef Name);
+ Symbol *find(StringRef Name);
void trace(StringRef Name);
void handleDynamicList();
private:
- std::vector<SymbolBody *> findByVersion(SymbolVersion Ver);
- std::vector<SymbolBody *> findAllByVersion(SymbolVersion Ver);
- void defsym(SymbolBody *Dst, SymbolBody *Src);
+ std::vector<Symbol *> findByVersion(SymbolVersion Ver);
+ std::vector<Symbol *> findAllByVersion(SymbolVersion Ver);
+ void defsym(Symbol *Dst, Symbol *Src);
- llvm::StringMap<std::vector<SymbolBody *>> &getDemangledSyms();
+ llvm::StringMap<std::vector<Symbol *>> &getDemangledSyms();
void handleAnonymousVersion();
void assignExactVersion(SymbolVersion Ver, uint16_t VersionId,
StringRef VersionName);
@@ -115,7 +114,7 @@ private:
// FIXME: Experiment with passing in a custom hashing or sorting the symbols
// once symbol resolution is finished.
llvm::DenseMap<llvm::CachedHashStringRef, SymIndex> Symtab;
- std::vector<SymbolBody *> SymVector;
+ std::vector<Symbol *> SymVector;
// Comdat groups define "link once" sections. If two comdat groups have the
// same name, only one of them is linked, and the other is ignored. This set
@@ -129,11 +128,11 @@ private:
// This mapping is 1:N because two symbols with different versions
// can have the same name. We use this map to handle "extern C++ {}"
// directive in version scripts.
- llvm::Optional<llvm::StringMap<std::vector<SymbolBody *>>> DemangledSyms;
+ llvm::Optional<llvm::StringMap<std::vector<Symbol *>>> DemangledSyms;
struct SymbolRenaming {
- SymbolBody *Dst;
- SymbolBody *Src;
+ Symbol *Dst;
+ Symbol *Src;
uint8_t Binding;
};
@@ -141,7 +140,7 @@ private:
std::vector<SymbolRenaming> Defsyms;
// For -wrap.
- std::vector<std::pair<SymbolBody *, SymbolBody *>> WrapSymbols;
+ std::vector<std::pair<Symbol *, Symbol *>> WrapSymbols;
// For LTO.
std::unique_ptr<BitcodeCompiler> LTO;
Modified: lld/trunk/ELF/Symbols.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Symbols.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Symbols.cpp (original)
+++ lld/trunk/ELF/Symbols.cpp Fri Nov 3 14:21:47 2017
@@ -40,9 +40,9 @@ DefinedRegular *ElfSym::MipsGp;
DefinedRegular *ElfSym::MipsGpDisp;
DefinedRegular *ElfSym::MipsLocalGp;
-static uint64_t getSymVA(const SymbolBody &Body, int64_t &Addend) {
+static uint64_t getSymVA(const Symbol &Body, int64_t &Addend) {
switch (Body.kind()) {
- case SymbolBody::DefinedRegularKind: {
+ case Symbol::DefinedRegularKind: {
auto &D = cast<DefinedRegular>(Body);
SectionBase *IS = D.Section;
if (auto *ISB = dyn_cast_or_null<InputSectionBase>(IS))
@@ -99,9 +99,9 @@ static uint64_t getSymVA(const SymbolBod
}
return VA;
}
- case SymbolBody::DefinedCommonKind:
+ case Symbol::DefinedCommonKind:
llvm_unreachable("common are converted to bss");
- case SymbolBody::SharedKind: {
+ case Symbol::SharedKind: {
auto &SS = cast<SharedSymbol>(Body);
if (SS.CopyRelSec)
return SS.CopyRelSec->getParent()->Addr + SS.CopyRelSec->OutSecOff;
@@ -109,10 +109,10 @@ static uint64_t getSymVA(const SymbolBod
return Body.getPltVA();
return 0;
}
- case SymbolBody::UndefinedKind:
+ case Symbol::UndefinedKind:
return 0;
- case SymbolBody::LazyArchiveKind:
- case SymbolBody::LazyObjectKind:
+ case Symbol::LazyArchiveKind:
+ case Symbol::LazyObjectKind:
assert(Body.IsUsedInRegularObj && "lazy symbol reached writer");
return 0;
}
@@ -120,17 +120,17 @@ static uint64_t getSymVA(const SymbolBod
}
// Returns true if this is a weak undefined symbol.
-bool SymbolBody::isUndefWeak() const {
+bool Symbol::isUndefWeak() const {
// See comment on Lazy in Symbols.h for the details.
return !isLocal() && isWeak() && (isUndefined() || isLazy());
}
-InputFile *SymbolBody::getFile() const {
+InputFile *Symbol::getFile() const {
if (isLocal()) {
const SectionBase *Sec = cast<DefinedRegular>(this)->Section;
// Local absolute symbols actually have a file, but that is not currently
// used. We could support that by having a mostly redundant InputFile in
- // SymbolBody, or having a special absolute section if needed.
+ // Symbol, or having a special absolute section if needed.
return Sec ? cast<InputSectionBase>(Sec)->File : nullptr;
}
return File;
@@ -139,8 +139,8 @@ InputFile *SymbolBody::getFile() const {
// Overwrites all attributes with Other's so that this symbol becomes
// an alias to Other. This is useful for handling some options such as
// --wrap.
-void SymbolBody::copyFrom(SymbolBody *Other) {
- SymbolBody Sym = *this;
+void Symbol::copyFrom(Symbol *Other) {
+ Symbol Sym = *this;
memcpy(this, Other, sizeof(SymbolUnion));
Binding = Sym.Binding;
@@ -153,37 +153,35 @@ void SymbolBody::copyFrom(SymbolBody *Ot
InVersionScript = Sym.InVersionScript;
}
-uint64_t SymbolBody::getVA(int64_t Addend) const {
+uint64_t Symbol::getVA(int64_t Addend) const {
uint64_t OutVA = getSymVA(*this, Addend);
return OutVA + Addend;
}
-uint64_t SymbolBody::getGotVA() const {
- return InX::Got->getVA() + getGotOffset();
-}
+uint64_t Symbol::getGotVA() const { return InX::Got->getVA() + getGotOffset(); }
-uint64_t SymbolBody::getGotOffset() const {
+uint64_t Symbol::getGotOffset() const {
return GotIndex * Target->GotEntrySize;
}
-uint64_t SymbolBody::getGotPltVA() const {
+uint64_t Symbol::getGotPltVA() const {
if (this->IsInIgot)
return InX::IgotPlt->getVA() + getGotPltOffset();
return InX::GotPlt->getVA() + getGotPltOffset();
}
-uint64_t SymbolBody::getGotPltOffset() const {
+uint64_t Symbol::getGotPltOffset() const {
return GotPltIndex * Target->GotPltEntrySize;
}
-uint64_t SymbolBody::getPltVA() const {
+uint64_t Symbol::getPltVA() const {
if (this->IsInIplt)
return InX::Iplt->getVA() + PltIndex * Target->PltEntrySize;
return InX::Plt->getVA() + Target->PltHeaderSize +
PltIndex * Target->PltEntrySize;
}
-uint64_t SymbolBody::getSize() const {
+uint64_t Symbol::getSize() const {
if (const auto *C = dyn_cast<DefinedCommon>(this))
return C->Size;
if (const auto *DR = dyn_cast<DefinedRegular>(this))
@@ -193,7 +191,7 @@ uint64_t SymbolBody::getSize() const {
return 0;
}
-OutputSection *SymbolBody::getOutputSection() const {
+OutputSection *Symbol::getOutputSection() const {
if (auto *S = dyn_cast<DefinedRegular>(this)) {
if (S->Section)
return S->Section->getOutputSection();
@@ -217,7 +215,7 @@ OutputSection *SymbolBody::getOutputSect
// If a symbol name contains '@', the characters after that is
// a symbol version name. This function parses that.
-void SymbolBody::parseSymbolVersion() {
+void Symbol::parseSymbolVersion() {
StringRef S = getName();
size_t Pos = S.find('@');
if (Pos == 0 || Pos == StringRef::npos)
@@ -277,7 +275,7 @@ InputFile *Lazy::fetch() {
}
ArchiveFile *LazyArchive::getFile() {
- return cast<ArchiveFile>(SymbolBody::getFile());
+ return cast<ArchiveFile>(Symbol::getFile());
}
InputFile *LazyArchive::fetch() {
@@ -291,12 +289,12 @@ InputFile *LazyArchive::fetch() {
}
LazyObjFile *LazyObject::getFile() {
- return cast<LazyObjFile>(SymbolBody::getFile());
+ return cast<LazyObjFile>(Symbol::getFile());
}
InputFile *LazyObject::fetch() { return getFile()->fetch(); }
-uint8_t SymbolBody::computeBinding() const {
+uint8_t Symbol::computeBinding() const {
if (Config->Relocatable)
return Binding;
if (Visibility != STV_DEFAULT && Visibility != STV_PROTECTED)
@@ -308,7 +306,7 @@ uint8_t SymbolBody::computeBinding() con
return Binding;
}
-bool SymbolBody::includeInDynsym() const {
+bool Symbol::includeInDynsym() const {
if (!Config->HasDynSymTab)
return false;
if (computeBinding() == STB_LOCAL)
@@ -319,7 +317,7 @@ bool SymbolBody::includeInDynsym() const
}
// Print out a log message for --trace-symbol.
-void elf::printTraceSymbol(SymbolBody *Sym) {
+void elf::printTraceSymbol(Symbol *Sym) {
std::string S;
if (Sym->isUndefined())
S = ": reference to ";
@@ -336,7 +334,7 @@ void elf::printTraceSymbol(SymbolBody *S
}
// Returns a symbol for an error message.
-std::string lld::toString(const SymbolBody &B) {
+std::string lld::toString(const Symbol &B) {
if (Config->Demangle)
if (Optional<std::string> S = demangle(B.getName()))
return *S;
Modified: lld/trunk/ELF/Symbols.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Symbols.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Symbols.h (original)
+++ lld/trunk/ELF/Symbols.h Fri Nov 3 14:21:47 2017
@@ -35,7 +35,7 @@ class OutputSection;
template <class ELFT> class SharedFile;
// The base class for real symbol classes.
-class SymbolBody {
+class Symbol {
public:
enum Kind {
DefinedFirst,
@@ -48,7 +48,7 @@ public:
LazyObjectKind,
};
- SymbolBody(Kind K) : SymbolKind(K) {}
+ Symbol(Kind K) : SymbolKind(K) {}
Kind kind() const { return static_cast<Kind>(SymbolKind); }
// Symbol binding. This is not overwritten by replaceSymbol to track
@@ -117,7 +117,7 @@ public:
StringRef getName() const { return Name; }
uint8_t getVisibility() const { return StOther & 0x3; }
void parseSymbolVersion();
- void copyFrom(SymbolBody *Other);
+ void copyFrom(Symbol *Other);
bool isInGot() const { return GotIndex != -1U; }
bool isInPlt() const { return PltIndex != -1U; }
@@ -139,8 +139,7 @@ public:
uint32_t GlobalDynIndex = -1;
protected:
- SymbolBody(Kind K, StringRefZ Name, bool IsLocal, uint8_t StOther,
- uint8_t Type)
+ Symbol(Kind K, StringRefZ Name, bool IsLocal, uint8_t StOther, uint8_t Type)
: SymbolKind(K), IsLocal(IsLocal), NeedsPltAddr(false),
IsInGlobalMipsGot(false), Is32BitMipsGot(false), IsInIplt(false),
IsInIgot(false), IsPreemptible(false), Type(Type), StOther(StOther),
@@ -192,12 +191,12 @@ protected:
};
// The base class for any defined symbols.
-class Defined : public SymbolBody {
+class Defined : public Symbol {
public:
Defined(Kind K, StringRefZ Name, bool IsLocal, uint8_t StOther, uint8_t Type)
- : SymbolBody(K, Name, IsLocal, StOther, Type) {}
+ : Symbol(K, Name, IsLocal, StOther, Type) {}
- static bool classof(const SymbolBody *S) { return S->isDefined(); }
+ static bool classof(const Symbol *S) { return S->isDefined(); }
};
class DefinedCommon : public Defined {
@@ -207,7 +206,7 @@ public:
: Defined(DefinedCommonKind, Name, /*IsLocal=*/false, StOther, Type),
Alignment(Alignment), Size(Size) {}
- static bool classof(const SymbolBody *S) {
+ static bool classof(const Symbol *S) {
return S->kind() == DefinedCommonKind;
}
@@ -231,7 +230,7 @@ public:
// Return true if the symbol is a PIC function.
template <class ELFT> bool isMipsPIC() const;
- static bool classof(const SymbolBody *S) {
+ static bool classof(const Symbol *S) {
return S->kind() == DefinedRegularKind;
}
@@ -240,19 +239,17 @@ public:
SectionBase *Section;
};
-class Undefined : public SymbolBody {
+class Undefined : public Symbol {
public:
Undefined(StringRefZ Name, bool IsLocal, uint8_t StOther, uint8_t Type)
- : SymbolBody(UndefinedKind, Name, IsLocal, StOther, Type) {}
+ : Symbol(UndefinedKind, Name, IsLocal, StOther, Type) {}
- static bool classof(const SymbolBody *S) {
- return S->kind() == UndefinedKind;
- }
+ static bool classof(const Symbol *S) { return S->kind() == UndefinedKind; }
};
class SharedSymbol : public Defined {
public:
- static bool classof(const SymbolBody *S) { return S->kind() == SharedKind; }
+ static bool classof(const Symbol *S) { return S->kind() == SharedKind; }
SharedSymbol(StringRef Name, uint8_t StOther, uint8_t Type, uint64_t Value,
uint64_t Size, uint32_t Alignment, const void *Verdef)
@@ -279,7 +276,7 @@ public:
}
template <class ELFT> SharedFile<ELFT> *getFile() const {
- return cast<SharedFile<ELFT>>(SymbolBody::getFile());
+ return cast<SharedFile<ELFT>>(Symbol::getFile());
}
template <class ELFT> uint32_t getAlignment() const;
@@ -304,9 +301,9 @@ public:
// and the lazy. We represent that with a lazy symbol with a weak binding. This
// means that code looking for undefined symbols normally also has to take lazy
// symbols into consideration.
-class Lazy : public SymbolBody {
+class Lazy : public Symbol {
public:
- static bool classof(const SymbolBody *S) { return S->isLazy(); }
+ static bool classof(const Symbol *S) { return S->isLazy(); }
// Returns an object file for this symbol, or a nullptr if the file
// was already returned.
@@ -314,7 +311,7 @@ public:
protected:
Lazy(Kind K, StringRef Name, uint8_t Type)
- : SymbolBody(K, Name, /*IsLocal=*/false, llvm::ELF::STV_DEFAULT, Type) {}
+ : Symbol(K, Name, /*IsLocal=*/false, llvm::ELF::STV_DEFAULT, Type) {}
};
// This class represents a symbol defined in an archive file. It is
@@ -326,9 +323,7 @@ public:
LazyArchive(const llvm::object::Archive::Symbol S, uint8_t Type)
: Lazy(LazyArchiveKind, S.getName(), Type), Sym(S) {}
- static bool classof(const SymbolBody *S) {
- return S->kind() == LazyArchiveKind;
- }
+ static bool classof(const Symbol *S) { return S->kind() == LazyArchiveKind; }
ArchiveFile *getFile();
InputFile *fetch();
@@ -343,9 +338,7 @@ class LazyObject : public Lazy {
public:
LazyObject(StringRef Name, uint8_t Type) : Lazy(LazyObjectKind, Name, Type) {}
- static bool classof(const SymbolBody *S) {
- return S->kind() == LazyObjectKind;
- }
+ static bool classof(const Symbol *S) { return S->kind() == LazyObjectKind; }
LazyObjFile *getFile();
InputFile *fetch();
@@ -380,7 +373,7 @@ struct ElfSym {
static DefinedRegular *MipsLocalGp;
};
-// A buffer class that is large enough to hold any SymbolBody-derived
+// A buffer class that is large enough to hold any Symbol-derived
// object. We allocate memory using this class and instantiate a symbol
// using the placement new.
union SymbolUnion {
@@ -392,17 +385,17 @@ union SymbolUnion {
alignas(LazyObject) char F[sizeof(LazyObject)];
};
-void printTraceSymbol(SymbolBody *Sym);
+void printTraceSymbol(Symbol *Sym);
template <typename T, typename... ArgT>
-void replaceBody(SymbolBody *S, InputFile *File, ArgT &&... Arg) {
+void replaceBody(Symbol *S, InputFile *File, ArgT &&... Arg) {
static_assert(sizeof(T) <= sizeof(SymbolUnion), "SymbolUnion too small");
static_assert(alignof(T) <= alignof(SymbolUnion),
"SymbolUnion not aligned enough");
- assert(static_cast<SymbolBody *>(static_cast<T *>(nullptr)) == nullptr &&
- "Not a SymbolBody");
+ assert(static_cast<Symbol *>(static_cast<T *>(nullptr)) == nullptr &&
+ "Not a Symbol");
- SymbolBody Sym = *S;
+ Symbol Sym = *S;
new (S) T(std::forward<ArgT>(Arg)...);
S->File = File;
@@ -423,7 +416,7 @@ void replaceBody(SymbolBody *S, InputFil
}
} // namespace elf
-std::string toString(const elf::SymbolBody &B);
+std::string toString(const elf::Symbol &B);
} // namespace lld
#endif
Modified: lld/trunk/ELF/SyntheticSections.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/SyntheticSections.cpp (original)
+++ lld/trunk/ELF/SyntheticSections.cpp Fri Nov 3 14:21:47 2017
@@ -66,7 +66,7 @@ uint64_t SyntheticSection::getVA() const
// Create a .bss section for each common symbol and replace the common symbol
// with a DefinedRegular symbol.
template <class ELFT> void elf::createCommonSections() {
- for (SymbolBody *S : Symtab->getSymbols()) {
+ for (Symbol *S : Symtab->getSymbols()) {
auto *Sym = dyn_cast<DefinedCommon>(S);
if (!Sym)
@@ -296,8 +296,8 @@ InputSection *elf::createInterpSection()
return Sec;
}
-SymbolBody *elf::addSyntheticLocal(StringRef Name, uint8_t Type, uint64_t Value,
- uint64_t Size, InputSectionBase *Section) {
+Symbol *elf::addSyntheticLocal(StringRef Name, uint8_t Type, uint64_t Value,
+ uint64_t Size, InputSectionBase *Section) {
auto *S = make<DefinedRegular>(Name, /*IsLocal*/ true, STV_DEFAULT, Type,
Value, Size, Section);
if (InX::SymTab)
@@ -413,7 +413,7 @@ CieRecord *EhFrameSection::addCie(EhSect
if (read32(Cie.data().data() + 4, Config->Endianness) != 0)
fatal(toString(Sec) + ": CIE expected at beginning of .eh_frame");
- SymbolBody *Personality = nullptr;
+ Symbol *Personality = nullptr;
unsigned FirstRelI = Cie.FirstRelocation;
if (FirstRelI != (unsigned)-1)
Personality =
@@ -447,7 +447,7 @@ bool EhFrameSection::isFdeLive(EhSection
return false;
const RelTy &Rel = Rels[FirstRelI];
- SymbolBody &B = Sec->template getFile<ELFT>()->getRelocTargetSym(Rel);
+ Symbol &B = Sec->template getFile<ELFT>()->getRelocTargetSym(Rel);
// FDEs for garbage-collected or merged-by-ICF sections are dead.
if (auto *D = dyn_cast<DefinedRegular>(&B))
@@ -620,12 +620,12 @@ GotSection::GotSection()
: SyntheticSection(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
Target->GotEntrySize, ".got") {}
-void GotSection::addEntry(SymbolBody &Sym) {
+void GotSection::addEntry(Symbol &Sym) {
Sym.GotIndex = NumEntries;
++NumEntries;
}
-bool GotSection::addDynTlsEntry(SymbolBody &Sym) {
+bool GotSection::addDynTlsEntry(Symbol &Sym) {
if (Sym.GlobalDynIndex != -1U)
return false;
Sym.GlobalDynIndex = NumEntries;
@@ -644,11 +644,11 @@ bool GotSection::addTlsIndex() {
return true;
}
-uint64_t GotSection::getGlobalDynAddr(const SymbolBody &B) const {
+uint64_t GotSection::getGlobalDynAddr(const Symbol &B) const {
return this->getVA() + B.GlobalDynIndex * Config->Wordsize;
}
-uint64_t GotSection::getGlobalDynOffset(const SymbolBody &B) const {
+uint64_t GotSection::getGlobalDynOffset(const Symbol &B) const {
return B.GlobalDynIndex * Config->Wordsize;
}
@@ -672,7 +672,7 @@ MipsGotSection::MipsGotSection()
: SyntheticSection(SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL, SHT_PROGBITS, 16,
".got") {}
-void MipsGotSection::addEntry(SymbolBody &Sym, int64_t Addend, RelExpr Expr) {
+void MipsGotSection::addEntry(Symbol &Sym, int64_t Addend, RelExpr Expr) {
// For "true" local symbols which can be referenced from the same module
// only compiler creates two instructions for address loading:
//
@@ -714,7 +714,7 @@ void MipsGotSection::addEntry(SymbolBody
TlsEntries.push_back(&Sym);
return;
}
- auto AddEntry = [&](SymbolBody &S, uint64_t A, GotEntries &Items) {
+ auto AddEntry = [&](Symbol &S, uint64_t A, GotEntries &Items) {
if (S.isInGot() && !A)
return;
size_t NewIndex = Items.size();
@@ -739,7 +739,7 @@ void MipsGotSection::addEntry(SymbolBody
}
}
-bool MipsGotSection::addDynTlsEntry(SymbolBody &Sym) {
+bool MipsGotSection::addDynTlsEntry(Symbol &Sym) {
if (Sym.GlobalDynIndex != -1U)
return false;
Sym.GlobalDynIndex = TlsEntries.size();
@@ -768,7 +768,7 @@ static uint64_t getMipsPageCount(uint64_
return (Size + 0xfffe) / 0xffff + 1;
}
-uint64_t MipsGotSection::getPageEntryOffset(const SymbolBody &B,
+uint64_t MipsGotSection::getPageEntryOffset(const Symbol &B,
int64_t Addend) const {
const OutputSection *OutSec = B.getOutputSection();
uint64_t SecAddr = getMipsPageAddr(OutSec->Addr);
@@ -778,7 +778,7 @@ uint64_t MipsGotSection::getPageEntryOff
return (HeaderEntriesNum + Index) * Config->Wordsize;
}
-uint64_t MipsGotSection::getBodyEntryOffset(const SymbolBody &B,
+uint64_t MipsGotSection::getBodyEntryOffset(const Symbol &B,
int64_t Addend) const {
// Calculate offset of the GOT entries block: TLS, global, local.
uint64_t Index = HeaderEntriesNum + PageEntriesNum;
@@ -803,11 +803,11 @@ uint64_t MipsGotSection::getTlsOffset()
return (getLocalEntriesNum() + GlobalEntries.size()) * Config->Wordsize;
}
-uint64_t MipsGotSection::getGlobalDynOffset(const SymbolBody &B) const {
+uint64_t MipsGotSection::getGlobalDynOffset(const Symbol &B) const {
return B.GlobalDynIndex * Config->Wordsize;
}
-const SymbolBody *MipsGotSection::getFirstGlobalEntry() const {
+const Symbol *MipsGotSection::getFirstGlobalEntry() const {
return GlobalEntries.empty() ? nullptr : GlobalEntries.front().first;
}
@@ -873,7 +873,7 @@ void MipsGotSection::writeTo(uint8_t *Bu
auto AddEntry = [&](const GotEntry &SA) {
uint8_t *Entry = Buf;
Buf += Config->Wordsize;
- const SymbolBody *Body = SA.first;
+ const Symbol *Body = SA.first;
uint64_t VA = Body->getVA(SA.second);
writeUint(Entry, VA);
};
@@ -887,7 +887,7 @@ void MipsGotSection::writeTo(uint8_t *Bu
// https://www.linux-mips.org/wiki/NPTL
if (TlsIndexOff != -1U && !Config->Pic)
writeUint(Buf + TlsIndexOff, 1);
- for (const SymbolBody *B : TlsEntries) {
+ for (const Symbol *B : TlsEntries) {
if (!B || B->IsPreemptible)
continue;
uint64_t VA = B->getVA();
@@ -908,7 +908,7 @@ GotPltSection::GotPltSection()
: SyntheticSection(SHF_ALLOC | SHF_WRITE, SHT_PROGBITS,
Target->GotPltEntrySize, ".got.plt") {}
-void GotPltSection::addEntry(SymbolBody &Sym) {
+void GotPltSection::addEntry(Symbol &Sym) {
Sym.GotPltIndex = Target->GotPltHeaderEntriesNum + Entries.size();
Entries.push_back(&Sym);
}
@@ -921,7 +921,7 @@ size_t GotPltSection::getSize() const {
void GotPltSection::writeTo(uint8_t *Buf) {
Target->writeGotPltHeader(Buf);
Buf += Target->GotPltHeaderEntriesNum * Target->GotPltEntrySize;
- for (const SymbolBody *B : Entries) {
+ for (const Symbol *B : Entries) {
Target->writeGotPlt(Buf, *B);
Buf += Config->Wordsize;
}
@@ -934,7 +934,7 @@ IgotPltSection::IgotPltSection()
Target->GotPltEntrySize,
Config->EMachine == EM_ARM ? ".got" : ".got.plt") {}
-void IgotPltSection::addEntry(SymbolBody &Sym) {
+void IgotPltSection::addEntry(Symbol &Sym) {
Sym.IsInIgot = true;
Sym.GotPltIndex = Entries.size();
Entries.push_back(&Sym);
@@ -945,7 +945,7 @@ size_t IgotPltSection::getSize() const {
}
void IgotPltSection::writeTo(uint8_t *Buf) {
- for (const SymbolBody *B : Entries) {
+ for (const Symbol *B : Entries) {
Target->writeIgotPlt(Buf, *B);
Buf += Config->Wordsize;
}
@@ -1123,10 +1123,10 @@ template <class ELFT> void DynamicSectio
add({DT_FINI_ARRAYSZ, Out::FiniArray, Entry::SecSize});
}
- if (SymbolBody *B = Symtab->find(Config->Init))
+ if (Symbol *B = Symtab->find(Config->Init))
if (B->isInCurrentOutput())
add({DT_INIT, B});
- if (SymbolBody *B = Symtab->find(Config->Fini))
+ if (Symbol *B = Symtab->find(Config->Fini))
if (B->isInCurrentOutput())
add({DT_FINI, B});
@@ -1148,7 +1148,7 @@ template <class ELFT> void DynamicSectio
add({DT_MIPS_BASE_ADDRESS, Target->getImageBase()});
add({DT_MIPS_SYMTABNO, InX::DynSymTab->getNumSymbols()});
add({DT_MIPS_LOCAL_GOTNO, InX::MipsGot->getLocalEntriesNum()});
- if (const SymbolBody *B = InX::MipsGot->getFirstGlobalEntry())
+ if (const Symbol *B = InX::MipsGot->getFirstGlobalEntry())
add({DT_MIPS_GOTSYM, B->DynsymIndex});
else
add({DT_MIPS_GOTSYM, InX::DynSymTab->getNumSymbols()});
@@ -1539,7 +1539,7 @@ void SymbolTableBaseSection::postThunkCo
getParent()->Info = NumLocals + 1;
}
-void SymbolTableBaseSection::addSymbol(SymbolBody *B) {
+void SymbolTableBaseSection::addSymbol(Symbol *B) {
// Adding a local symbol to a .dynsym is a bug.
assert(this->Type != SHT_DYNSYM || !B->isLocal());
@@ -1547,7 +1547,7 @@ void SymbolTableBaseSection::addSymbol(S
Symbols.push_back({B, StrTabSec.addString(B->getName(), HashIt)});
}
-size_t SymbolTableBaseSection::getSymbolIndex(SymbolBody *Body) {
+size_t SymbolTableBaseSection::getSymbolIndex(Symbol *Body) {
// Initializes symbol lookup tables lazily. This is used only
// for -r or -emit-relocs.
llvm::call_once(OnceFlag, [&] {
@@ -1583,7 +1583,7 @@ template <class ELFT> void SymbolTableSe
auto *ESym = reinterpret_cast<Elf_Sym *>(Buf);
for (SymbolTableEntry &Ent : Symbols) {
- SymbolBody *Body = Ent.Symbol;
+ Symbol *Body = Ent.Symbol;
// Set st_info and st_other.
ESym->st_other = 0;
@@ -1635,7 +1635,7 @@ template <class ELFT> void SymbolTableSe
auto *ESym = reinterpret_cast<Elf_Sym *>(Buf);
for (SymbolTableEntry &Ent : Symbols) {
- SymbolBody *Body = Ent.Symbol;
+ Symbol *Body = Ent.Symbol;
if (Body->isInPlt() && Body->NeedsPltAddr)
ESym->st_other |= STO_MIPS_PLT;
@@ -1799,7 +1799,7 @@ void GnuHashTableSection::addSymbols(std
return;
for (SymbolTableEntry &Ent : llvm::make_range(Mid, V.end())) {
- SymbolBody *B = Ent.Symbol;
+ Symbol *B = Ent.Symbol;
Symbols.push_back({B, Ent.StrTabOffset, hashGnu(B->getName())});
}
@@ -1841,7 +1841,7 @@ void HashTableSection::writeTo(uint8_t *
uint32_t *Chains = P + NumSymbols;
for (const SymbolTableEntry &S : InX::DynSymTab->getSymbols()) {
- SymbolBody *Body = S.Symbol;
+ Symbol *Body = S.Symbol;
StringRef Name = Body->getName();
unsigned I = Body->DynsymIndex;
uint32_t Hash = hashSysV(Name) % NumSymbols;
@@ -1869,7 +1869,7 @@ void PltSection::writeTo(uint8_t *Buf) {
unsigned PltOff = getPltRelocOff();
for (auto &I : Entries) {
- const SymbolBody *B = I.first;
+ const Symbol *B = I.first;
unsigned RelOff = I.second + PltOff;
uint64_t Got = B->getGotPltVA();
uint64_t Plt = this->getVA() + Off;
@@ -1878,7 +1878,7 @@ void PltSection::writeTo(uint8_t *Buf) {
}
}
-template <class ELFT> void PltSection::addEntry(SymbolBody &Sym) {
+template <class ELFT> void PltSection::addEntry(Symbol &Sym) {
Sym.PltIndex = Entries.size();
RelocationSection<ELFT> *PltRelocSection = In<ELFT>::RelaPlt;
if (HeaderSize == 0) {
@@ -2638,10 +2638,10 @@ template void EhFrameSection::addSection
template void EhFrameSection::addSection<ELF64LE>(InputSectionBase *);
template void EhFrameSection::addSection<ELF64BE>(InputSectionBase *);
-template void PltSection::addEntry<ELF32LE>(SymbolBody &Sym);
-template void PltSection::addEntry<ELF32BE>(SymbolBody &Sym);
-template void PltSection::addEntry<ELF64LE>(SymbolBody &Sym);
-template void PltSection::addEntry<ELF64BE>(SymbolBody &Sym);
+template void PltSection::addEntry<ELF32LE>(Symbol &Sym);
+template void PltSection::addEntry<ELF32BE>(Symbol &Sym);
+template void PltSection::addEntry<ELF64LE>(Symbol &Sym);
+template void PltSection::addEntry<ELF64BE>(Symbol &Sym);
template void elf::createCommonSections<ELF32LE>();
template void elf::createCommonSections<ELF32BE>();
Modified: lld/trunk/ELF/SyntheticSections.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/SyntheticSections.h (original)
+++ lld/trunk/ELF/SyntheticSections.h Fri Nov 3 14:21:47 2017
@@ -99,8 +99,7 @@ private:
std::vector<CieRecord *> CieRecords;
// CIE records are uniquified by their contents and personality functions.
- llvm::DenseMap<std::pair<ArrayRef<uint8_t>, SymbolBody *>, CieRecord *>
- CieMap;
+ llvm::DenseMap<std::pair<ArrayRef<uint8_t>, Symbol *>, CieRecord *> CieMap;
};
class GotSection : public SyntheticSection {
@@ -111,11 +110,11 @@ public:
bool empty() const override;
void writeTo(uint8_t *Buf) override;
- void addEntry(SymbolBody &Sym);
- bool addDynTlsEntry(SymbolBody &Sym);
+ void addEntry(Symbol &Sym);
+ bool addDynTlsEntry(Symbol &Sym);
bool addTlsIndex();
- uint64_t getGlobalDynAddr(const SymbolBody &B) const;
- uint64_t getGlobalDynOffset(const SymbolBody &B) const;
+ uint64_t getGlobalDynAddr(const Symbol &B) const;
+ uint64_t getGlobalDynOffset(const Symbol &B) const;
uint64_t getTlsIndexVA() { return this->getVA() + TlsIndexOff; }
uint32_t getTlsIndexOff() const { return TlsIndexOff; }
@@ -172,18 +171,18 @@ public:
bool updateAllocSize() override;
void finalizeContents() override;
bool empty() const override;
- void addEntry(SymbolBody &Sym, int64_t Addend, RelExpr Expr);
- bool addDynTlsEntry(SymbolBody &Sym);
+ void addEntry(Symbol &Sym, int64_t Addend, RelExpr Expr);
+ bool addDynTlsEntry(Symbol &Sym);
bool addTlsIndex();
- uint64_t getPageEntryOffset(const SymbolBody &B, int64_t Addend) const;
- uint64_t getBodyEntryOffset(const SymbolBody &B, int64_t Addend) const;
- uint64_t getGlobalDynOffset(const SymbolBody &B) const;
+ uint64_t getPageEntryOffset(const Symbol &B, int64_t Addend) const;
+ uint64_t getBodyEntryOffset(const Symbol &B, int64_t Addend) const;
+ uint64_t getGlobalDynOffset(const Symbol &B) const;
// Returns the symbol which corresponds to the first entry of the global part
// of GOT on MIPS platform. It is required to fill up MIPS-specific dynamic
// table properties.
// Returns nullptr if the global part is empty.
- const SymbolBody *getFirstGlobalEntry() const;
+ const Symbol *getFirstGlobalEntry() const;
// Returns the number of entries in the local part of GOT including
// the number of reserved entries.
@@ -243,7 +242,7 @@ private:
// to the first index of "Page" entries allocated for this section.
llvm::SmallMapVector<const OutputSection *, size_t, 16> PageIndexMap;
- typedef std::pair<const SymbolBody *, uint64_t> GotEntry;
+ typedef std::pair<const Symbol *, uint64_t> GotEntry;
typedef std::vector<GotEntry> GotEntries;
// Map from Symbol-Addend pair to the GOT index.
llvm::DenseMap<GotEntry, size_t> EntryIndexMap;
@@ -256,7 +255,7 @@ private:
GotEntries GlobalEntries;
// TLS entries.
- std::vector<const SymbolBody *> TlsEntries;
+ std::vector<const Symbol *> TlsEntries;
uint32_t TlsIndexOff = -1;
uint64_t Size = 0;
@@ -265,13 +264,13 @@ private:
class GotPltSection final : public SyntheticSection {
public:
GotPltSection();
- void addEntry(SymbolBody &Sym);
+ void addEntry(Symbol &Sym);
size_t getSize() const override;
void writeTo(uint8_t *Buf) override;
bool empty() const override { return Entries.empty(); }
private:
- std::vector<const SymbolBody *> Entries;
+ std::vector<const Symbol *> Entries;
};
// The IgotPltSection is a Got associated with the PltSection for GNU Ifunc
@@ -281,13 +280,13 @@ private:
class IgotPltSection final : public SyntheticSection {
public:
IgotPltSection();
- void addEntry(SymbolBody &Sym);
+ void addEntry(Symbol &Sym);
size_t getSize() const override;
void writeTo(uint8_t *Buf) override;
bool empty() const override { return Entries.empty(); }
private:
- std::vector<const SymbolBody *> Entries;
+ std::vector<const Symbol *> Entries;
};
class StringTableSection final : public SyntheticSection {
@@ -310,8 +309,7 @@ private:
class DynamicReloc {
public:
DynamicReloc(uint32_t Type, const InputSectionBase *InputSec,
- uint64_t OffsetInSec, bool UseSymVA, SymbolBody *Sym,
- int64_t Addend)
+ uint64_t OffsetInSec, bool UseSymVA, Symbol *Sym, int64_t Addend)
: Type(Type), Sym(Sym), InputSec(InputSec), OffsetInSec(OffsetInSec),
UseSymVA(UseSymVA), Addend(Addend) {}
@@ -323,7 +321,7 @@ public:
uint32_t Type;
private:
- SymbolBody *Sym;
+ Symbol *Sym;
const InputSectionBase *InputSec = nullptr;
uint64_t OffsetInSec;
bool UseSymVA;
@@ -347,7 +345,7 @@ template <class ELFT> class DynamicSecti
OutputSection *OutSec;
InputSection *InSec;
uint64_t Val;
- const SymbolBody *Sym;
+ const Symbol *Sym;
};
enum KindT { SecAddr, SecSize, SymAddr, PlainInt, InSecAddr } Kind;
Entry(int32_t Tag, OutputSection *OutSec, KindT Kind = SecAddr)
@@ -355,8 +353,7 @@ template <class ELFT> class DynamicSecti
Entry(int32_t Tag, InputSection *Sec)
: Tag(Tag), InSec(Sec), Kind(InSecAddr) {}
Entry(int32_t Tag, uint64_t Val) : Tag(Tag), Val(Val), Kind(PlainInt) {}
- Entry(int32_t Tag, const SymbolBody *Sym)
- : Tag(Tag), Sym(Sym), Kind(SymAddr) {}
+ Entry(int32_t Tag, const Symbol *Sym) : Tag(Tag), Sym(Sym), Kind(SymAddr) {}
};
// finalizeContents() fills this vector with the section contents.
@@ -423,7 +420,7 @@ private:
};
struct SymbolTableEntry {
- SymbolBody *Symbol;
+ Symbol *Symbol;
size_t StrTabOffset;
};
@@ -433,9 +430,9 @@ public:
void finalizeContents() override;
void postThunkContents() override;
size_t getSize() const override { return getNumSymbols() * Entsize; }
- void addSymbol(SymbolBody *Body);
+ void addSymbol(Symbol *Body);
unsigned getNumSymbols() const { return Symbols.size() + 1; }
- size_t getSymbolIndex(SymbolBody *Body);
+ size_t getSymbolIndex(Symbol *Body);
ArrayRef<SymbolTableEntry> getSymbols() const { return Symbols; }
protected:
@@ -445,7 +442,7 @@ protected:
StringTableSection &StrTabSec;
llvm::once_flag OnceFlag;
- llvm::DenseMap<SymbolBody *, size_t> SymbolIndexMap;
+ llvm::DenseMap<Symbol *, size_t> SymbolIndexMap;
llvm::DenseMap<OutputSection *, size_t> SectionIndexMap;
};
@@ -478,7 +475,7 @@ private:
void writeHashTable(uint8_t *Buf);
struct Entry {
- SymbolBody *Body;
+ Symbol *Body;
size_t StrTabOffset;
uint32_t Hash;
};
@@ -512,11 +509,11 @@ public:
bool empty() const override { return Entries.empty(); }
void addSymbols();
- template <class ELFT> void addEntry(SymbolBody &Sym);
+ template <class ELFT> void addEntry(Symbol &Sym);
private:
unsigned getPltRelocOff() const;
- std::vector<std::pair<const SymbolBody *, unsigned>> Entries;
+ std::vector<std::pair<const Symbol *, unsigned>> Entries;
// Iplt always has HeaderSize of 0, the Plt HeaderSize is always non-zero
size_t HeaderSize;
};
@@ -830,8 +827,8 @@ template <class ELFT> MergeInputSection
void decompressSections();
void mergeSections();
-SymbolBody *addSyntheticLocal(StringRef Name, uint8_t Type, uint64_t Value,
- uint64_t Size, InputSectionBase *Section);
+Symbol *addSyntheticLocal(StringRef Name, uint8_t Type, uint64_t Value,
+ uint64_t Size, InputSectionBase *Section);
// Linker generated sections which can be used as inputs.
struct InX {
Modified: lld/trunk/ELF/Target.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Target.cpp (original)
+++ lld/trunk/ELF/Target.cpp Fri Nov 3 14:21:47 2017
@@ -124,7 +124,7 @@ int64_t TargetInfo::getImplicitAddend(co
bool TargetInfo::usesOnlyLowPageBits(RelType Type) const { return false; }
bool TargetInfo::needsThunk(RelExpr Expr, RelType Type, const InputFile *File,
- uint64_t BranchAddr, const SymbolBody &S) const {
+ uint64_t BranchAddr, const Symbol &S) const {
return false;
}
@@ -132,7 +132,7 @@ bool TargetInfo::inBranchRange(RelType T
return true;
}
-void TargetInfo::writeIgotPlt(uint8_t *Buf, const SymbolBody &S) const {
+void TargetInfo::writeIgotPlt(uint8_t *Buf, const Symbol &S) const {
writeGotPlt(Buf, S);
}
Modified: lld/trunk/ELF/Target.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Target.h (original)
+++ lld/trunk/ELF/Target.h Fri Nov 3 14:21:47 2017
@@ -19,7 +19,7 @@ std::string toString(elf::RelType Type);
namespace elf {
class InputFile;
-class SymbolBody;
+class Symbol;
class TargetInfo {
public:
@@ -27,8 +27,8 @@ public:
virtual bool isPicRel(RelType Type) const { return true; }
virtual RelType getDynRel(RelType Type) const { return Type; }
virtual void writeGotPltHeader(uint8_t *Buf) const {}
- virtual void writeGotPlt(uint8_t *Buf, const SymbolBody &S) const {};
- virtual void writeIgotPlt(uint8_t *Buf, const SymbolBody &S) const;
+ virtual void writeGotPlt(uint8_t *Buf, const Symbol &S) const {};
+ virtual void writeIgotPlt(uint8_t *Buf, const Symbol &S) const;
virtual int64_t getImplicitAddend(const uint8_t *Buf, RelType Type) const;
// If lazy binding is supported, the first entry of the PLT has code
@@ -53,11 +53,11 @@ public:
// targeting S.
virtual bool needsThunk(RelExpr Expr, RelType RelocType,
const InputFile *File, uint64_t BranchAddr,
- const SymbolBody &S) const;
+ const Symbol &S) const;
// Return true if we can reach Dst from Src with Relocation RelocType
virtual bool inBranchRange(RelType Type, uint64_t Src,
uint64_t Dst) const;
- virtual RelExpr getRelExpr(RelType Type, const SymbolBody &S,
+ virtual RelExpr getRelExpr(RelType Type, const Symbol &S,
const uint8_t *Loc) const = 0;
virtual void relocateOne(uint8_t *Loc, RelType Type, uint64_t Val) const = 0;
Modified: lld/trunk/ELF/Thunks.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Thunks.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Thunks.cpp (original)
+++ lld/trunk/ELF/Thunks.cpp Fri Nov 3 14:21:47 2017
@@ -52,7 +52,7 @@ namespace {
// Source State, TargetState, Target Requirement, ABS or PI, Range
class ARMV7ABSLongThunk final : public Thunk {
public:
- ARMV7ABSLongThunk(SymbolBody &Dest) : Thunk(Dest) {}
+ ARMV7ABSLongThunk(Symbol &Dest) : Thunk(Dest) {}
uint32_t size() const override { return 12; }
void writeTo(uint8_t *Buf, ThunkSection &IS) const override;
@@ -62,7 +62,7 @@ public:
class ARMV7PILongThunk final : public Thunk {
public:
- ARMV7PILongThunk(SymbolBody &Dest) : Thunk(Dest) {}
+ ARMV7PILongThunk(Symbol &Dest) : Thunk(Dest) {}
uint32_t size() const override { return 16; }
void writeTo(uint8_t *Buf, ThunkSection &IS) const override;
@@ -72,7 +72,7 @@ public:
class ThumbV7ABSLongThunk final : public Thunk {
public:
- ThumbV7ABSLongThunk(SymbolBody &Dest) : Thunk(Dest) { Alignment = 2; }
+ ThumbV7ABSLongThunk(Symbol &Dest) : Thunk(Dest) { Alignment = 2; }
uint32_t size() const override { return 10; }
void writeTo(uint8_t *Buf, ThunkSection &IS) const override;
@@ -82,7 +82,7 @@ public:
class ThumbV7PILongThunk final : public Thunk {
public:
- ThumbV7PILongThunk(SymbolBody &Dest) : Thunk(Dest) { Alignment = 2; }
+ ThumbV7PILongThunk(Symbol &Dest) : Thunk(Dest) { Alignment = 2; }
uint32_t size() const override { return 12; }
void writeTo(uint8_t *Buf, ThunkSection &IS) const override;
@@ -93,7 +93,7 @@ public:
// MIPS LA25 thunk
class MipsThunk final : public Thunk {
public:
- MipsThunk(SymbolBody &Dest) : Thunk(Dest) {}
+ MipsThunk(Symbol &Dest) : Thunk(Dest) {}
uint32_t size() const override { return 16; }
void writeTo(uint8_t *Buf, ThunkSection &IS) const override;
@@ -104,7 +104,7 @@ public:
// microMIPS R2-R5 LA25 thunk
class MicroMipsThunk final : public Thunk {
public:
- MicroMipsThunk(SymbolBody &Dest) : Thunk(Dest) {}
+ MicroMipsThunk(Symbol &Dest) : Thunk(Dest) {}
uint32_t size() const override { return 14; }
void writeTo(uint8_t *Buf, ThunkSection &IS) const override;
@@ -115,7 +115,7 @@ public:
// microMIPS R6 LA25 thunk
class MicroMipsR6Thunk final : public Thunk {
public:
- MicroMipsR6Thunk(SymbolBody &Dest) : Thunk(Dest) {}
+ MicroMipsR6Thunk(Symbol &Dest) : Thunk(Dest) {}
uint32_t size() const override { return 12; }
void writeTo(uint8_t *Buf, ThunkSection &IS) const override;
@@ -126,7 +126,7 @@ public:
} // end anonymous namespace
// ARM Target Thunks
-static uint64_t getARMThunkDestVA(const SymbolBody &S) {
+static uint64_t getARMThunkDestVA(const Symbol &S) {
uint64_t V = S.isInPlt() ? S.getPltVA() : S.getVA();
return SignExtend64<32>(V);
}
@@ -305,12 +305,12 @@ InputSection *MicroMipsR6Thunk::getTarge
return dyn_cast<InputSection>(DR->Section);
}
-Thunk::Thunk(SymbolBody &D) : Destination(D), Offset(0) {}
+Thunk::Thunk(Symbol &D) : Destination(D), Offset(0) {}
Thunk::~Thunk() = default;
// Creates a thunk for Thumb-ARM interworking.
-static Thunk *addThunkArm(RelType Reloc, SymbolBody &S) {
+static Thunk *addThunkArm(RelType Reloc, Symbol &S) {
// ARM relocations need ARM to Thumb interworking Thunks.
// Thumb relocations need Thumb to ARM relocations.
// Use position independent Thunks if we require position independent code.
@@ -332,7 +332,7 @@ static Thunk *addThunkArm(RelType Reloc,
fatal("unrecognized relocation type");
}
-static Thunk *addThunkMips(RelType Type, SymbolBody &S) {
+static Thunk *addThunkMips(RelType Type, Symbol &S) {
if ((S.StOther & STO_MIPS_MICROMIPS) && isMipsR6())
return make<MicroMipsR6Thunk>(S);
if (S.StOther & STO_MIPS_MICROMIPS)
@@ -340,7 +340,7 @@ static Thunk *addThunkMips(RelType Type,
return make<MipsThunk>(S);
}
-Thunk *addThunk(RelType Type, SymbolBody &S) {
+Thunk *addThunk(RelType Type, Symbol &S) {
if (Config->EMachine == EM_ARM)
return addThunkArm(Type, S);
else if (Config->EMachine == EM_MIPS)
Modified: lld/trunk/ELF/Thunks.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Thunks.h?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Thunks.h (original)
+++ lld/trunk/ELF/Thunks.h Fri Nov 3 14:21:47 2017
@@ -14,7 +14,7 @@
namespace lld {
namespace elf {
-class SymbolBody;
+class Symbol;
class ThunkSection;
// Class to describe an instance of a Thunk.
// A Thunk is a code-sequence inserted by the linker in between a caller and
@@ -27,7 +27,7 @@ class ThunkSection;
// Thunks are assigned to synthetic ThunkSections
class Thunk {
public:
- Thunk(SymbolBody &Destination);
+ Thunk(Symbol &Destination);
virtual ~Thunk();
virtual uint32_t size() const { return 0; }
@@ -47,15 +47,15 @@ public:
// The alignment requirement for this Thunk, defaults to the size of the
// typical code section alignment.
- SymbolBody &Destination;
- SymbolBody *ThunkSym;
+ Symbol &Destination;
+ Symbol *ThunkSym;
uint64_t Offset = 0;
uint32_t Alignment = 4;
};
// For a Relocation to symbol S create a Thunk to be added to a synthetic
// ThunkSection. At present there are implementations for ARM and Mips Thunks.
-Thunk *addThunk(RelType Type, SymbolBody &S);
+Thunk *addThunk(RelType Type, Symbol &S);
} // namespace elf
} // namespace lld
Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=317370&r1=317369&r2=317370&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Fri Nov 3 14:21:47 2017
@@ -399,7 +399,7 @@ template <class ELFT> void Writer<ELFT>:
}
static bool shouldKeepInSymtab(SectionBase *Sec, StringRef SymName,
- const SymbolBody &B) {
+ const Symbol &B) {
if (B.isFile() || B.isSection())
return false;
@@ -424,7 +424,7 @@ static bool shouldKeepInSymtab(SectionBa
return !Sec || !(Sec->Flags & SHF_MERGE);
}
-static bool includeInSymtab(const SymbolBody &B) {
+static bool includeInSymtab(const Symbol &B) {
if (!B.isLocal() && !B.IsUsedInRegularObj)
return false;
@@ -454,7 +454,7 @@ template <class ELFT> void Writer<ELFT>:
return;
for (InputFile *File : ObjectFiles) {
ObjFile<ELFT> *F = cast<ObjFile<ELFT>>(File);
- for (SymbolBody *B : F->getLocalSymbols()) {
+ for (Symbol *B : F->getLocalSymbols()) {
if (!B->isLocal())
fatal(toString(F) +
": broken object: getLocalSymbols returns a non-local symbol");
@@ -740,12 +740,12 @@ template <class ELFT>
static DefinedRegular *
addOptionalRegular(StringRef Name, SectionBase *Sec, uint64_t Val,
uint8_t StOther = STV_HIDDEN, uint8_t Binding = STB_GLOBAL) {
- SymbolBody *S = Symtab->find(Name);
+ Symbol *S = Symtab->find(Name);
if (!S || S->isInCurrentOutput())
return nullptr;
- SymbolBody *Sym = Symtab->addRegular<ELFT>(Name, StOther, STT_NOTYPE, Val,
- /*Size=*/0, Binding, Sec,
- /*File=*/nullptr);
+ Symbol *Sym = Symtab->addRegular<ELFT>(Name, StOther, STT_NOTYPE, Val,
+ /*Size=*/0, Binding, Sec,
+ /*File=*/nullptr);
return cast<DefinedRegular>(Sym);
}
@@ -1182,7 +1182,7 @@ static void removeUnusedSyntheticSection
// Returns true if a symbol can be replaced at load-time by a symbol
// with the same name defined in other ELF executable or DSO.
-static bool computeIsPreemptible(const SymbolBody &B) {
+static bool computeIsPreemptible(const Symbol &B) {
assert(!B.isLocal());
// Only symbols that appear in dynsym can be preempted.
if (!B.includeInDynsym())
@@ -1245,7 +1245,7 @@ template <class ELFT> void Writer<ELFT>:
applySynthetic({InX::EhFrame},
[](SyntheticSection *SS) { SS->finalizeContents(); });
- for (SymbolBody *S : Symtab->getSymbols())
+ for (Symbol *S : Symtab->getSymbols())
S->IsPreemptible |= computeIsPreemptible(*S);
// Scan relocations. This must be done after every symbol is declared so that
@@ -1260,7 +1260,7 @@ template <class ELFT> void Writer<ELFT>:
// Now that we have defined all possible global symbols including linker-
// synthesized ones. Visit all symbols to give the finishing touches.
- for (SymbolBody *Sym : Symtab->getSymbols()) {
+ for (Symbol *Sym : Symtab->getSymbols()) {
if (!includeInSymtab(*Sym))
continue;
if (InX::SymTab)
@@ -1715,7 +1715,7 @@ template <class ELFT> void Writer<ELFT>:
// 6. the address 0.
template <class ELFT> uint64_t Writer<ELFT>::getEntryAddr() {
// Case 1, 2 or 3
- if (SymbolBody *B = Symtab->find(Config->Entry))
+ if (Symbol *B = Symtab->find(Config->Entry))
return B->getVA();
// Case 4
More information about the llvm-commits
mailing list