diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/tools/llvm-pdbdump/PdbYaml.cpp | 17 | ||||
-rw-r--r-- | llvm/tools/llvm-pdbdump/PdbYaml.h | 22 | ||||
-rw-r--r-- | llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp | 16 |
3 files changed, 51 insertions, 4 deletions
diff --git a/llvm/tools/llvm-pdbdump/PdbYaml.cpp b/llvm/tools/llvm-pdbdump/PdbYaml.cpp index 23e756654af..efaa986a817 100644 --- a/llvm/tools/llvm-pdbdump/PdbYaml.cpp +++ b/llvm/tools/llvm-pdbdump/PdbYaml.cpp @@ -12,11 +12,11 @@ #include "llvm/DebugInfo/PDB/Raw/PDBFile.h" using namespace llvm; +using namespace llvm::yaml; using namespace llvm::pdb; using namespace llvm::pdb::yaml; -void llvm::yaml::MappingTraits<MsfHeaders>::mapping( - IO &IO, pdb::yaml::MsfHeaders &Obj) { +void MappingTraits<MsfHeaders>::mapping(IO &IO, MsfHeaders &Obj) { IO.mapRequired("BlockSize", Obj.BlockSize); IO.mapRequired("Unknown0", Obj.Unknown0); IO.mapRequired("NumBlocks", Obj.BlockCount); @@ -29,7 +29,16 @@ void llvm::yaml::MappingTraits<MsfHeaders>::mapping( IO.mapRequired("NumStreams", Obj.NumStreams); } -void llvm::yaml::MappingTraits<pdb::yaml::PdbObject>::mapping( - IO &IO, pdb::yaml::PdbObject &Obj) { +void MappingTraits<PdbObject>::mapping(IO &IO, PdbObject &Obj) { IO.mapOptional("MSF", Obj.Headers); + IO.mapOptional("StreamSizes", Obj.StreamSizes); + IO.mapOptional("StreamMap", Obj.StreamMap); +} + +void MappingTraits<StreamSizeEntry>::mapping(IO &IO, StreamSizeEntry &Obj) { + IO.mapRequired("Size", Obj.Size); +} + +void MappingTraits<StreamMapEntry>::mapping(IO &IO, StreamMapEntry &Obj) { + IO.mapRequired("Blocks", Obj.Blocks); } diff --git a/llvm/tools/llvm-pdbdump/PdbYaml.h b/llvm/tools/llvm-pdbdump/PdbYaml.h index a623dde2c49..a7c942a3bd8 100644 --- a/llvm/tools/llvm-pdbdump/PdbYaml.h +++ b/llvm/tools/llvm-pdbdump/PdbYaml.h @@ -36,13 +36,33 @@ struct MsfHeaders { uint32_t NumStreams; }; +struct StreamSizeEntry { + uint32_t Size; +}; + +struct StreamMapEntry { + std::vector<uint32_t> Blocks; +}; + struct PdbObject { Optional<MsfHeaders> Headers; + Optional<std::vector<StreamSizeEntry>> StreamSizes; + Optional<std::vector<StreamMapEntry>> StreamMap; }; } } +} +namespace llvm { namespace yaml { +template <> struct MappingTraits<pdb::yaml::StreamSizeEntry> { + static void mapping(IO &IO, pdb::yaml::StreamSizeEntry &Obj); +}; + +template <> struct MappingTraits<pdb::yaml::StreamMapEntry> { + static void mapping(IO &IO, pdb::yaml::StreamMapEntry &Obj); +}; + template <> struct MappingTraits<pdb::yaml::MsfHeaders> { static void mapping(IO &IO, pdb::yaml::MsfHeaders &Obj); }; @@ -53,5 +73,7 @@ template <> struct MappingTraits<pdb::yaml::PdbObject> { } LLVM_YAML_IS_SEQUENCE_VECTOR(uint32_t) +LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::pdb::yaml::StreamSizeEntry) +LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::pdb::yaml::StreamMapEntry) #endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H diff --git a/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp b/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp index a06a22d93ed..d60ccd7ebbd 100644 --- a/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp +++ b/llvm/tools/llvm-pdbdump/YAMLOutputStyle.cpp @@ -45,6 +45,13 @@ Error YAMLOutputStyle::dumpStreamSummary() { if (!opts::DumpStreamSummary) return Error::success(); + std::vector<yaml::StreamSizeEntry> Sizes; + for (uint32_t I = 0; I < File.getNumStreams(); ++I) { + yaml::StreamSizeEntry Entry; + Entry.Size = File.getStreamByteSize(I); + Sizes.push_back(Entry); + } + Obj.StreamSizes.emplace(Sizes); return Error::success(); } @@ -52,6 +59,15 @@ Error YAMLOutputStyle::dumpStreamBlocks() { if (!opts::DumpStreamBlocks) return Error::success(); + std::vector<yaml::StreamMapEntry> Blocks; + for (uint32_t I = 0; I < File.getNumStreams(); ++I) { + yaml::StreamMapEntry Entry; + auto BlockList = File.getStreamBlockList(I); + Entry.Blocks.assign(BlockList.begin(), BlockList.end()); + Blocks.push_back(Entry); + } + Obj.StreamMap.emplace(Blocks); + return Error::success(); } |