//===- PdbYAML.h ---------------------------------------------- *- C++ --*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H #define LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H #include "OutputStyle.h" #include "llvm/ADT/Optional.h" #include "llvm/DebugInfo/PDB/PDBTypes.h" #include "llvm/DebugInfo/PDB/Raw/PDBFile.h" #include "llvm/DebugInfo/PDB/Raw/RawConstants.h" #include "llvm/Support/Endian.h" #include "llvm/Support/YAMLTraits.h" #include <vector> namespace llvm { namespace pdb { namespace yaml { struct MsfHeaders { PDBFile::SuperBlock SuperBlock; uint32_t NumDirectoryBlocks; uint32_t BlockMapOffset; std::vector<support::ulittle32_t> DirectoryBlocks; uint32_t NumStreams; uint32_t FileSize; }; struct StreamBlockList { std::vector<support::ulittle32_t> Blocks; }; struct PdbInfoStream { PdbRaw_ImplVer Version; uint32_t Signature; uint32_t Age; PDB_UniqueId Guid; }; struct PdbDbiStream { PdbRaw_DbiVer VerHeader; uint32_t Age; uint16_t BuildNumber; uint32_t PdbDllVersion; uint16_t PdbDllRbld; uint16_t Flags; PDB_Machine MachineType; }; struct PdbObject { Optional<MsfHeaders> Headers; Optional<std::vector<support::ulittle32_t>> StreamSizes; Optional<std::vector<StreamBlockList>> StreamMap; Optional<PdbInfoStream> PdbStream; Optional<PdbDbiStream> DbiStream; }; } } } namespace llvm { namespace yaml { template <> struct MappingTraits<pdb::yaml::PdbObject> { static void mapping(IO &IO, pdb::yaml::PdbObject &Obj); }; template <> struct MappingTraits<pdb::yaml::MsfHeaders> { static void mapping(IO &IO, pdb::yaml::MsfHeaders &Obj); }; template <> struct MappingTraits<pdb::PDBFile::SuperBlock> { static void mapping(IO &IO, pdb::PDBFile::SuperBlock &SB); }; template <> struct MappingTraits<pdb::yaml::StreamBlockList> { static void mapping(IO &IO, pdb::yaml::StreamBlockList &SB); }; template <> struct MappingTraits<pdb::yaml::PdbInfoStream> { static void mapping(IO &IO, pdb::yaml::PdbInfoStream &Obj); }; template <> struct MappingTraits<pdb::yaml::PdbDbiStream> { static void mapping(IO &IO, pdb::yaml::PdbDbiStream &Obj); }; } } LLVM_YAML_IS_SEQUENCE_VECTOR(support::ulittle32_t) LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::pdb::yaml::StreamBlockList) #endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H