[elf2] Add basic archive file support.

llvm-svn: 246886
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index 7da02a0..d177d04 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -45,35 +45,17 @@
   return MBRef;
 }
 
-template <class ELFT>
-static std::unique_ptr<InputFile> createFile(MemoryBufferRef MB,
-                                             bool IsShared) {
-  if (IsShared)
-    return make_unique<SharedFile<ELFT>>(MB);
-  return make_unique<ObjectFile<ELFT>>(MB);
-}
-
 static std::unique_ptr<InputFile> createFile(MemoryBufferRef MB) {
   using namespace llvm::sys::fs;
   file_magic Magic = identify_magic(MB.getBuffer());
 
-  std::pair<unsigned char, unsigned char> Type =
-      object::getElfArchType(MB.getBuffer());
-  if (Type.second != ELF::ELFDATA2LSB && Type.second != ELF::ELFDATA2MSB)
-    error("Invalid data encoding");
+  if (Magic == file_magic::archive)
+    return make_unique<ArchiveFile>(MB);
 
-  bool IsShared = Magic == file_magic::elf_shared_object;
-  if (Type.first == ELF::ELFCLASS32) {
-    if (Type.second == ELF::ELFDATA2LSB)
-      return createFile<object::ELF32LE>(MB, IsShared);
-    return createFile<object::ELF32BE>(MB, IsShared);
-  }
-  if (Type.first == ELF::ELFCLASS64) {
-    if (Type.second == ELF::ELFDATA2LSB)
-      return createFile<object::ELF64LE>(MB, IsShared);
-    return createFile<object::ELF64BE>(MB, IsShared);
-  }
-  error("Invalid file class");
+  if (Magic == file_magic::elf_shared_object)
+    return createELFFile<SharedFile>(MB);
+
+  return createELFFile<ObjectFile>(MB);
 }
 
 void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {