Support ELF files of unknown type.
authorMichael J. Spencer <bigcheesegs@gmail.com>
Tue, 18 Nov 2014 01:14:25 +0000 (01:14 +0000)
committerMichael J. Spencer <bigcheesegs@gmail.com>
Tue, 18 Nov 2014 01:14:25 +0000 (01:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222208 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/FileSystem.h
lib/Object/Binary.cpp
lib/Object/ObjectFile.cpp
lib/Object/SymbolicFile.cpp
lib/Support/Path.cpp

index f406285036042ebc538f550aab71fc2cdbd8e6d0..63c9ed5356feadaf999f0403463cc5e7c17306b6 100644 (file)
@@ -226,6 +226,7 @@ struct file_magic {
     unknown = 0,              ///< Unrecognized file
     bitcode,                  ///< Bitcode file
     archive,                  ///< ar style archive file
+    elf,                      ///< ELF Unknown type
     elf_relocatable,          ///< ELF Relocatable object file
     elf_executable,           ///< ELF Executable image
     elf_shared_object,        ///< ELF dynamically linked shared lib
index d23ee5905693fa61d3fe69153683d53b2e4055df..c56eeb1ea8b8d95968726a32f504dda6f1bb0108 100644 (file)
@@ -43,6 +43,7 @@ ErrorOr<std::unique_ptr<Binary>> object::createBinary(MemoryBufferRef Buffer,
   switch (Type) {
     case sys::fs::file_magic::archive:
       return Archive::create(Buffer);
+    case sys::fs::file_magic::elf:
     case sys::fs::file_magic::elf_relocatable:
     case sys::fs::file_magic::elf_executable:
     case sys::fs::file_magic::elf_shared_object:
index 9565d02f35a30caa2b36ac1a1df9827f202b142e..fd7827142532eaea0335814ef8ebbb287d1c2720 100644 (file)
@@ -60,6 +60,7 @@ ObjectFile::createObjectFile(MemoryBufferRef Object, sys::fs::file_magic Type) {
   case sys::fs::file_magic::macho_universal_binary:
   case sys::fs::file_magic::windows_resource:
     return object_error::invalid_file_type;
+  case sys::fs::file_magic::elf:
   case sys::fs::file_magic::elf_relocatable:
   case sys::fs::file_magic::elf_executable:
   case sys::fs::file_magic::elf_shared_object:
index 9dfb09dbeca79980402cbde4098b5835192d4e43..ffd3dbcdb0def0cebf5b3a1f53545ecc85574d0e 100644 (file)
@@ -40,6 +40,7 @@ ErrorOr<std::unique_ptr<SymbolicFile>> SymbolicFile::createSymbolicFile(
   case sys::fs::file_magic::macho_universal_binary:
   case sys::fs::file_magic::windows_resource:
     return object_error::invalid_file_type;
+  case sys::fs::file_magic::elf:
   case sys::fs::file_magic::elf_executable:
   case sys::fs::file_magic::elf_shared_object:
   case sys::fs::file_magic::elf_core:
index 9937978c748c68b3da02983b98b9d3960ab7a8f0..a7a991950bca89c0febf4598c9e6fce2d488003b 100644 (file)
@@ -958,6 +958,9 @@ file_magic identify_magic(StringRef Magic) {
             case 3: return file_magic::elf_shared_object;
             case 4: return file_magic::elf_core;
           }
+        else
+          // It's still some type of ELF file.
+          return file_magic::elf;
       }
       break;