mirror of
https://github.com/RPCS3/llvm.git
synced 2026-01-31 01:25:19 +01:00
Summary: Tapi files are YAML files that start with the !tapi tag. The only execption are TBD v1 files, which don't have a tag. In that case we have to scan a little further and check if the first key "archs" exists. This is the first patch in a series of patches to add libObject support for text-based dynamic library (.tbd) files. This patch is practically exactly the same as D37820, that was never pushed to master, and is needed for future commits related to reading tbd files for llvm-nm Reviewers: ributzka, steven_wu, bollu, espindola, jfb, shafik, jdoerfert Reviewed By: steven_wu Subscribers: dexonsmith, llvm-commits Tags: #llvm, #clang, #sanitizers, #lldb, #libc, #openmp Differential Revision: https://reviews.llvm.org/D66149 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@369579 91177308-0d34-0410-b5e6-96231b3b80d8
78 lines
3.2 KiB
C++
78 lines
3.2 KiB
C++
//===- llvm/BinaryFormat/Magic.h - File magic identification ----*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_BINARYFORMAT_MAGIC_H
|
|
#define LLVM_BINARYFORMAT_MAGIC_H
|
|
|
|
#include "llvm/ADT/StringRef.h"
|
|
#include "llvm/ADT/Twine.h"
|
|
|
|
#include <system_error>
|
|
|
|
namespace llvm {
|
|
/// file_magic - An "enum class" enumeration of file types based on magic (the
|
|
/// first N bytes of the file).
|
|
struct file_magic {
|
|
enum Impl {
|
|
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
|
|
elf_core, ///< ELF core image
|
|
macho_object, ///< Mach-O Object file
|
|
macho_executable, ///< Mach-O Executable
|
|
macho_fixed_virtual_memory_shared_lib, ///< Mach-O Shared Lib, FVM
|
|
macho_core, ///< Mach-O Core File
|
|
macho_preload_executable, ///< Mach-O Preloaded Executable
|
|
macho_dynamically_linked_shared_lib, ///< Mach-O dynlinked shared lib
|
|
macho_dynamic_linker, ///< The Mach-O dynamic linker
|
|
macho_bundle, ///< Mach-O Bundle file
|
|
macho_dynamically_linked_shared_lib_stub, ///< Mach-O Shared lib stub
|
|
macho_dsym_companion, ///< Mach-O dSYM companion file
|
|
macho_kext_bundle, ///< Mach-O kext bundle file
|
|
macho_universal_binary, ///< Mach-O universal binary
|
|
minidump, ///< Windows minidump file
|
|
coff_cl_gl_object, ///< Microsoft cl.exe's intermediate code file
|
|
coff_object, ///< COFF object file
|
|
coff_import_library, ///< COFF import library
|
|
pecoff_executable, ///< PECOFF executable file
|
|
windows_resource, ///< Windows compiled resource file (.res)
|
|
xcoff_object_32, ///< 32-bit XCOFF object file
|
|
xcoff_object_64, ///< 64-bit XCOFF object file
|
|
wasm_object, ///< WebAssembly Object file
|
|
pdb, ///< Windows PDB debug info file
|
|
tapi_file, ///< Text-based Dynamic Library Stub file
|
|
};
|
|
|
|
bool is_object() const { return V != unknown; }
|
|
|
|
file_magic() = default;
|
|
file_magic(Impl V) : V(V) {}
|
|
operator Impl() const { return V; }
|
|
|
|
private:
|
|
Impl V = unknown;
|
|
};
|
|
|
|
/// Identify the type of a binary file based on how magical it is.
|
|
file_magic identify_magic(StringRef magic);
|
|
|
|
/// Get and identify \a path's type based on its content.
|
|
///
|
|
/// @param path Input path.
|
|
/// @param result Set to the type of file, or file_magic::unknown.
|
|
/// @returns errc::success if result has been successfully set, otherwise a
|
|
/// platform-specific error_code.
|
|
std::error_code identify_magic(const Twine &path, file_magic &result);
|
|
} // namespace llvm
|
|
|
|
#endif
|