summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2015-10-12 15:31:09 +0000
committerRui Ueyama <ruiu@google.com>2015-10-12 15:31:09 +0000
commitc4b6506521783ab26753507f91744adbd8c672f5 (patch)
tree7fe1dd11ead9f23b697098df851e0507c7ec1f07
parent2ee8e113ba0d7a52a55646aebfdc86f65a0046c6 (diff)
downloadbcm5719-llvm-c4b6506521783ab26753507f91744adbd8c672f5.tar.gz
bcm5719-llvm-c4b6506521783ab26753507f91744adbd8c672f5.zip
ELF2: Move createELFFile() from .h to .cpp.
llvm-svn: 250051
-rw-r--r--lld/ELF/InputFiles.cpp40
-rw-r--r--lld/ELF/InputFiles.h36
2 files changed, 41 insertions, 35 deletions
diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp
index f5cab485955..e7d1d42c24f 100644
--- a/lld/ELF/InputFiles.cpp
+++ b/lld/ELF/InputFiles.cpp
@@ -314,6 +314,43 @@ template <class ELFT> void SharedFile<ELFT>::parse() {
}
}
+template <typename T>
+static std::unique_ptr<InputFile> createELFFileAux(MemoryBufferRef MB) {
+ std::unique_ptr<T> Ret = llvm::make_unique<T>(MB);
+
+ if (!Config->FirstElf)
+ Config->FirstElf = Ret.get();
+
+ if (Config->ElfKind == ELFNoneKind) {
+ Config->ElfKind = Ret->getELFKind();
+ Config->EMachine = Ret->getEMachine();
+ }
+
+ return std::move(Ret);
+}
+
+template <template <class> class T>
+std::unique_ptr<InputFile> lld::elf2::createELFFile(MemoryBufferRef MB) {
+ using namespace llvm;
+
+ std::pair<unsigned char, unsigned char> Type =
+ object::getElfArchType(MB.getBuffer());
+ if (Type.second != ELF::ELFDATA2LSB && Type.second != ELF::ELFDATA2MSB)
+ error("Invalid data encoding: " + MB.getBufferIdentifier());
+
+ if (Type.first == ELF::ELFCLASS32) {
+ if (Type.second == ELF::ELFDATA2LSB)
+ return createELFFileAux<T<object::ELF32LE>>(MB);
+ return createELFFileAux<T<object::ELF32BE>>(MB);
+ }
+ if (Type.first == ELF::ELFCLASS64) {
+ if (Type.second == ELF::ELFDATA2LSB)
+ return createELFFileAux<T<object::ELF64LE>>(MB);
+ return createELFFileAux<T<object::ELF64BE>>(MB);
+ }
+ error("Invalid file class: " + MB.getBufferIdentifier());
+}
+
namespace lld {
namespace elf2 {
template class ELFFileBase<llvm::object::ELF32LE>;
@@ -330,5 +367,8 @@ template class SharedFile<llvm::object::ELF32LE>;
template class SharedFile<llvm::object::ELF32BE>;
template class SharedFile<llvm::object::ELF64LE>;
template class SharedFile<llvm::object::ELF64BE>;
+
+template std::unique_ptr<InputFile> createELFFile<ObjectFile>(MemoryBufferRef);
+template std::unique_ptr<InputFile> createELFFile<SharedFile>(MemoryBufferRef);
}
}
diff --git a/lld/ELF/InputFiles.h b/lld/ELF/InputFiles.h
index ae95f679041..2fee75fb6de 100644
--- a/lld/ELF/InputFiles.h
+++ b/lld/ELF/InputFiles.h
@@ -197,42 +197,8 @@ public:
bool isNeeded() const { return !AsNeeded || IsUsed; }
};
-template <typename T>
-std::unique_ptr<InputFile> createELFFileAux(MemoryBufferRef MB) {
- std::unique_ptr<T> Ret = llvm::make_unique<T>(MB);
-
- if (!Config->FirstElf)
- Config->FirstElf = Ret.get();
-
- if (Config->ElfKind == ELFNoneKind) {
- Config->ElfKind = Ret->getELFKind();
- Config->EMachine = Ret->getEMachine();
- }
-
- return std::move(Ret);
-}
-
template <template <class> class T>
-std::unique_ptr<InputFile> createELFFile(MemoryBufferRef MB) {
- using namespace llvm;
-
- std::pair<unsigned char, unsigned char> Type =
- object::getElfArchType(MB.getBuffer());
- if (Type.second != ELF::ELFDATA2LSB && Type.second != ELF::ELFDATA2MSB)
- error("Invalid data encoding: " + MB.getBufferIdentifier());
-
- if (Type.first == ELF::ELFCLASS32) {
- if (Type.second == ELF::ELFDATA2LSB)
- return createELFFileAux<T<object::ELF32LE>>(MB);
- return createELFFileAux<T<object::ELF32BE>>(MB);
- }
- if (Type.first == ELF::ELFCLASS64) {
- if (Type.second == ELF::ELFDATA2LSB)
- return createELFFileAux<T<object::ELF64LE>>(MB);
- return createELFFileAux<T<object::ELF64BE>>(MB);
- }
- error("Invalid file class: " + MB.getBufferIdentifier());
-}
+std::unique_ptr<InputFile> createELFFile(MemoryBufferRef MB);
} // namespace elf2
} // namespace lld
OpenPOWER on IntegriCloud