Index: llvm/include/llvm/BinaryFormat/Magic.h =================================================================== --- llvm/include/llvm/BinaryFormat/Magic.h +++ llvm/include/llvm/BinaryFormat/Magic.h @@ -45,7 +45,8 @@ coff_import_library, ///< COFF import library pecoff_executable, ///< PECOFF executable file windows_resource, ///< Windows compiled resource file (.res) - wasm_object ///< WebAssembly Object file + wasm_object, ///< WebAssembly Object file + tapi_file, ///< Text-based Dynamic Library Stub file }; bool is_object() const { return V != unknown; } Index: llvm/lib/BinaryFormat/Magic.cpp =================================================================== --- llvm/lib/BinaryFormat/Magic.cpp +++ llvm/lib/BinaryFormat/Magic.cpp @@ -196,6 +196,10 @@ return file_magic::coff_object; break; + case 0x2d: // Tapi File '-' + if (startswith(Magic, "---\narchs:") || startswith(Magic, "--- !tapi")) + return file_magic::tapi_file; + default: break; } Index: llvm/lib/Object/Binary.cpp =================================================================== --- llvm/lib/Object/Binary.cpp +++ llvm/lib/Object/Binary.cpp @@ -77,6 +77,7 @@ return WindowsResource::createWindowsResource(Buffer); case file_magic::unknown: case file_magic::coff_cl_gl_object: + case file_magic::tapi_file: // Unrecognized object file format. return errorCodeToError(object_error::invalid_file_type); } Index: llvm/lib/Object/ObjectFile.cpp =================================================================== --- llvm/lib/Object/ObjectFile.cpp +++ llvm/lib/Object/ObjectFile.cpp @@ -92,6 +92,7 @@ case file_magic::archive: case file_magic::macho_universal_binary: case file_magic::windows_resource: + case file_magic::tapi_file: return errorCodeToError(object_error::invalid_file_type); case file_magic::elf: case file_magic::elf_relocatable: Index: llvm/lib/Object/SymbolicFile.cpp =================================================================== --- llvm/lib/Object/SymbolicFile.cpp +++ llvm/lib/Object/SymbolicFile.cpp @@ -52,6 +52,7 @@ case file_magic::coff_cl_gl_object: case file_magic::macho_universal_binary: case file_magic::windows_resource: + case file_magic::tapi_file: return errorCodeToError(object_error::invalid_file_type); case file_magic::elf: case file_magic::elf_executable: Index: llvm/unittests/BinaryFormat/TestFileMagic.cpp =================================================================== --- llvm/unittests/BinaryFormat/TestFileMagic.cpp +++ llvm/unittests/BinaryFormat/TestFileMagic.cpp @@ -81,6 +81,8 @@ const char macho_dynamically_linked_shared_lib_stub[] = "\xfe\xed\xfa\xce........\x00\x00\x00\x09............"; const char ms_dos_stub_broken[] = "\x4d\x5a\x20\x20"; +const char tapi_file[] = "--- !tapi-tbd-v1\n"; +const char tapi_file_tbd_v1[] = "---\narchs: ["; TEST_F(MagicTest, Magic) { struct type { @@ -112,6 +114,9 @@ DEFINE(windows_resource), {"ms_dos_stub_broken", ms_dos_stub_broken, sizeof(ms_dos_stub_broken), file_magic::unknown}, + DEFINE(tapi_file), + {"tapi_file_tbd_v1", tapi_file_tbd_v1, sizeof(tapi_file_tbd_v1), + file_magic::tapi_file}, #undef DEFINE };