//===- 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/CodeView/SymbolRecord.h" #include "llvm/DebugInfo/CodeView/TypeRecord.h" #include "llvm/DebugInfo/MSF/MSFCommon.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 namespace llvm { namespace pdb { namespace yaml { struct SerializationContext; struct MSFHeaders { msf::SuperBlock SuperBlock; uint32_t NumDirectoryBlocks; std::vector DirectoryBlocks; uint32_t NumStreams; uint32_t FileSize; }; struct StreamBlockList { std::vector Blocks; }; struct NamedStreamMapping { StringRef StreamName; uint32_t StreamNumber; }; struct PdbInfoStream { PdbRaw_ImplVer Version; uint32_t Signature; uint32_t Age; PDB_UniqueId Guid; std::vector NamedStreams; }; struct PdbSymbolRecord { codeview::CVSymbol Record; }; struct PdbModiStream { uint32_t Signature; std::vector Symbols; }; struct PdbDbiModuleInfo { StringRef Obj; StringRef Mod; std::vector SourceFiles; Optional Modi; }; struct PdbDbiStream { PdbRaw_DbiVer VerHeader; uint32_t Age; uint16_t BuildNumber; uint32_t PdbDllVersion; uint16_t PdbDllRbld; uint16_t Flags; PDB_Machine MachineType; std::vector ModInfos; }; struct PdbTpiRecord { codeview::CVType Record; }; struct PdbTpiFieldListRecord { codeview::CVMemberRecord Record; }; struct PdbTpiStream { PdbRaw_TpiVer Version; std::vector Records; }; struct PdbObject { explicit PdbObject(BumpPtrAllocator &Allocator) : Allocator(Allocator) {} Optional Headers; Optional> StreamSizes; Optional> StreamMap; Optional PdbStream; Optional DbiStream; Optional TpiStream; Optional IpiStream; BumpPtrAllocator &Allocator; }; } } } namespace llvm { namespace yaml { template <> struct MappingTraits { static void mapping(IO &IO, pdb::yaml::PdbObject &Obj); }; template <> struct MappingTraits { static void mapping(IO &IO, pdb::yaml::MSFHeaders &Obj); }; template <> struct MappingTraits { static void mapping(IO &IO, msf::SuperBlock &SB); }; template <> struct MappingTraits { static void mapping(IO &IO, pdb::yaml::StreamBlockList &SB); }; template <> struct MappingTraits { static void mapping(IO &IO, pdb::yaml::PdbInfoStream &Obj); }; template <> struct MappingTraits { static void mapping(IO &IO, pdb::yaml::PdbDbiStream &Obj); }; template <> struct MappingContextTraits { static void mapping(IO &IO, pdb::yaml::PdbTpiStream &Obj, llvm::BumpPtrAllocator &Allocator); }; template <> struct MappingTraits { static void mapping(IO &IO, pdb::yaml::NamedStreamMapping &Obj); }; template <> struct MappingTraits { static void mapping(IO &IO, pdb::yaml::PdbSymbolRecord &Obj); }; template <> struct MappingTraits { static void mapping(IO &IO, pdb::yaml::PdbModiStream &Obj); }; template <> struct MappingTraits { static void mapping(IO &IO, pdb::yaml::PdbDbiModuleInfo &Obj); }; template <> struct MappingContextTraits { static void mapping(IO &IO, pdb::yaml::PdbTpiRecord &Obj, pdb::yaml::SerializationContext &Context); }; } } #endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H