summaryrefslogtreecommitdiffstats
path: root/lld/ELF/SymbolTable.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2019-05-14 12:03:13 +0000
committerRui Ueyama <ruiu@google.com>2019-05-14 12:03:13 +0000
commit2dd5283d2a3ad0d6566af13bd1c79d314bdea5bc (patch)
treedbbb92d6d32936d2b134de4f71f3138fb8d4c5db /lld/ELF/SymbolTable.cpp
parent7b4ecdd3c2c64b0656f4a45a74fd2decf7606d0c (diff)
downloadbcm5719-llvm-2dd5283d2a3ad0d6566af13bd1c79d314bdea5bc.tar.gz
bcm5719-llvm-2dd5283d2a3ad0d6566af13bd1c79d314bdea5bc.zip
Move SymbolTable::addFile to InputFiles.cpp.
The symbol table used to be a container of vectors of input files, but that's no longer the case because the vectors are moved out of SymbolTable and are now global variables. Therefore, addFile doesn't have to belong to any class. This patch moves the function out of the class. This patch is a preparation for my RFC [1]. [1] http://lists.llvm.org/pipermail/llvm-dev/2019-April/131902.html Differential Revision: https://reviews.llvm.org/D61854 llvm-svn: 360666
Diffstat (limited to 'lld/ELF/SymbolTable.cpp')
-rw-r--r--lld/ELF/SymbolTable.cpp88
1 files changed, 4 insertions, 84 deletions
diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp
index 6e69b25c61e..95c2d43494a 100644
--- a/lld/ELF/SymbolTable.cpp
+++ b/lld/ELF/SymbolTable.cpp
@@ -32,81 +32,6 @@ using namespace lld::elf;
SymbolTable *elf::Symtab;
-static InputFile *getFirstElf() {
- if (!ObjectFiles.empty())
- return ObjectFiles[0];
- if (!SharedFiles.empty())
- return SharedFiles[0];
- return BitcodeFiles[0];
-}
-
-// All input object files must be for the same architecture
-// (e.g. it does not make sense to link x86 object files with
-// MIPS object files.) This function checks for that error.
-static bool isCompatible(InputFile *F) {
- if (!F->isElf() && !isa<BitcodeFile>(F))
- return true;
-
- if (F->EKind == Config->EKind && F->EMachine == Config->EMachine) {
- if (Config->EMachine != EM_MIPS)
- return true;
- if (isMipsN32Abi(F) == Config->MipsN32Abi)
- return true;
- }
-
- if (!Config->Emulation.empty())
- error(toString(F) + " is incompatible with " + Config->Emulation);
- else
- error(toString(F) + " is incompatible with " + toString(getFirstElf()));
- return false;
-}
-
-// Add symbols in File to the symbol table.
-template <class ELFT> void SymbolTable::addFile(InputFile *File) {
- if (!isCompatible(File))
- return;
-
- // Binary file
- if (auto *F = dyn_cast<BinaryFile>(File)) {
- BinaryFiles.push_back(F);
- F->parse();
- return;
- }
-
- // .a file
- if (auto *F = dyn_cast<ArchiveFile>(File)) {
- F->parse<ELFT>();
- return;
- }
-
- // Lazy object file
- if (auto *F = dyn_cast<LazyObjFile>(File)) {
- LazyObjFiles.push_back(F);
- F->parse<ELFT>();
- return;
- }
-
- if (Config->Trace)
- message(toString(File));
-
- // .so file
- if (auto *F = dyn_cast<SharedFile>(File)) {
- F->parse<ELFT>();
- return;
- }
-
- // LLVM bitcode file
- if (auto *F = dyn_cast<BitcodeFile>(File)) {
- BitcodeFiles.push_back(F);
- F->parse<ELFT>(ComdatGroups);
- return;
- }
-
- // Regular object file
- ObjectFiles.push_back(File);
- cast<ObjFile<ELFT>>(File)->parse(ComdatGroups);
-}
-
// This function is where all the optimizations of link-time
// optimization happens. When LTO is in use, some input files are
// not in native object file format but in the LLVM bitcode format.
@@ -539,7 +464,7 @@ void SymbolTable::addLazyArchive(StringRef Name, ArchiveFile &File,
}
if (InputFile *F = File.fetch(Sym))
- addFile<ELFT>(F);
+ parseFile<ELFT>(F);
}
template <class ELFT>
@@ -563,19 +488,19 @@ void SymbolTable::addLazyObject(StringRef Name, LazyObjFile &File) {
}
if (InputFile *F = File.fetch())
- addFile<ELFT>(F);
+ parseFile<ELFT>(F);
}
template <class ELFT> void SymbolTable::fetchLazy(Symbol *Sym) {
if (auto *S = dyn_cast<LazyArchive>(Sym)) {
if (InputFile *File = S->fetch())
- addFile<ELFT>(File);
+ parseFile<ELFT>(File);
return;
}
auto *S = cast<LazyObject>(Sym);
if (InputFile *File = cast<LazyObjFile>(S->File)->fetch())
- addFile<ELFT>(File);
+ parseFile<ELFT>(File);
}
// Initialize DemangledSyms with a map from demangled symbols to symbol
@@ -739,11 +664,6 @@ void SymbolTable::scanVersionScript() {
Sym->parseSymbolVersion();
}
-template void SymbolTable::addFile<ELF32LE>(InputFile *);
-template void SymbolTable::addFile<ELF32BE>(InputFile *);
-template void SymbolTable::addFile<ELF64LE>(InputFile *);
-template void SymbolTable::addFile<ELF64BE>(InputFile *);
-
template Symbol *SymbolTable::addUndefined<ELF32LE>(StringRef, uint8_t, uint8_t,
uint8_t, bool, InputFile *);
template Symbol *SymbolTable::addUndefined<ELF32BE>(StringRef, uint8_t, uint8_t,
OpenPOWER on IntegriCloud