[lld] r250051 - ELF2: Move createELFFile() from .h to .cpp.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 12 08:31:09 PDT 2015


Author: ruiu
Date: Mon Oct 12 10:31:09 2015
New Revision: 250051

URL: http://llvm.org/viewvc/llvm-project?rev=250051&view=rev
Log:
ELF2: Move createELFFile() from .h to .cpp.

Modified:
    lld/trunk/ELF/InputFiles.cpp
    lld/trunk/ELF/InputFiles.h

Modified: lld/trunk/ELF/InputFiles.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.cpp?rev=250051&r1=250050&r2=250051&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.cpp (original)
+++ lld/trunk/ELF/InputFiles.cpp Mon Oct 12 10:31:09 2015
@@ -314,6 +314,43 @@ template <class ELFT> void SharedFile<EL
   }
 }
 
+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::
 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);
 }
 }

Modified: lld/trunk/ELF/InputFiles.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputFiles.h?rev=250051&r1=250050&r2=250051&view=diff
==============================================================================
--- lld/trunk/ELF/InputFiles.h (original)
+++ lld/trunk/ELF/InputFiles.h Mon Oct 12 10:31:09 2015
@@ -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




More information about the llvm-commits mailing list