llvm.org GIT mirror llvm / release_90 tools / llvm-pdbutil / PdbYaml.h
release_90

Tree @release_90 (Download .tar.gz)

PdbYaml.h @release_90

61e0e27
 
6b54768
 
 
61e0e27
 
 
 
 
 
 
 
 
2ce5ded
 
5e11785
11e1d83
 
8bf0aed
7b436b0
 
 
61e0e27
 
 
 
 
 
42d60ef
 
 
61e0e27
 
 
be73fbc
 
5e11785
6be3e7c
bbf9606
6be3e7c
bbf9606
 
61e0e27
 
7d35b2d
6be3e7c
4efa5e5
 
93a8d14
 
 
 
 
8bf0aed
bbf9606
 
 
5c238d6
7ba6356
93a8d14
8bf0aed
 
2ce5ded
 
5dc9013
2ce5ded
 
6406b60
 
 
 
42d60ef
2ce5ded
6406b60
 
ae108ee
bbf9606
 
 
 
 
 
 
6406b60
 
ae108ee
 
3fe902e
bbf9606
ea64a9b
3fe902e
 
f3aabb0
 
 
 
61e0e27
be73fbc
 
5e11785
6be3e7c
7d35b2d
8bf0aed
ae108ee
3fe902e
5fa3c52
f3aabb0
be73fbc
9c1e7a6
 
be73fbc
61e0e27
 
 
4efa5e5
61e0e27
ea64a9b
 
 
 
 
 
 
f3aabb0
ea64a9b
 
 
61e0e27
 
//===- PdbYAML.h ---------------------------------------------- *- 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_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/Native/PDBFile.h"
#include "llvm/DebugInfo/PDB/Native/RawConstants.h"
#include "llvm/DebugInfo/PDB/PDBTypes.h"
#include "llvm/ObjectYAML/CodeViewYAMLDebugSections.h"
#include "llvm/ObjectYAML/CodeViewYAMLSymbols.h"
#include "llvm/ObjectYAML/CodeViewYAMLTypes.h"
#include "llvm/Support/Endian.h"
#include "llvm/Support/YAMLTraits.h"

#include <vector>

namespace llvm {
namespace codeview {
class DebugStringTableSubsection;
}
namespace pdb {

namespace yaml {
struct SerializationContext;

struct MSFHeaders {
  msf::SuperBlock SuperBlock;
  uint32_t NumDirectoryBlocks = 0;
  std::vector<uint32_t> DirectoryBlocks;
  uint32_t NumStreams = 0;
  uint32_t FileSize = 0;
};

struct StreamBlockList {
  std::vector<uint32_t> Blocks;
};

struct NamedStreamMapping {
  StringRef StreamName;
  uint32_t StreamNumber;
};

struct PdbInfoStream {
  PdbRaw_ImplVer Version = PdbImplVC70;
  uint32_t Signature = 0;
  uint32_t Age = 1;
  codeview::GUID Guid;
  std::vector<PdbRaw_FeatureSig> Features;
  std::vector<NamedStreamMapping> NamedStreams;
};

struct PdbModiStream {
  uint32_t Signature;
  std::vector<CodeViewYAML::SymbolRecord> Symbols;
};

struct PdbDbiModuleInfo {
  StringRef Obj;
  StringRef Mod;
  std::vector<StringRef> SourceFiles;
  std::vector<CodeViewYAML::YAMLDebugSubsection> Subsections;
  Optional<PdbModiStream> Modi;
};

struct PdbDbiStream {
  PdbRaw_DbiVer VerHeader = PdbDbiV70;
  uint32_t Age = 1;
  uint16_t BuildNumber = 0;
  uint32_t PdbDllVersion = 0;
  uint16_t PdbDllRbld = 0;
  uint16_t Flags = 1;
  PDB_Machine MachineType = PDB_Machine::x86;

  std::vector<PdbDbiModuleInfo> ModInfos;
};

struct PdbTpiStream {
  PdbRaw_TpiVer Version = PdbTpiV80;
  std::vector<CodeViewYAML::LeafRecord> Records;
};

struct PdbPublicsStream {
  std::vector<CodeViewYAML::SymbolRecord> PubSyms;
};

struct PdbObject {
  explicit PdbObject(BumpPtrAllocator &Allocator) : Allocator(Allocator) {}

  Optional<MSFHeaders> Headers;
  Optional<std::vector<uint32_t>> StreamSizes;
  Optional<std::vector<StreamBlockList>> StreamMap;
  Optional<PdbInfoStream> PdbStream;
  Optional<PdbDbiStream> DbiStream;
  Optional<PdbTpiStream> TpiStream;
  Optional<PdbTpiStream> IpiStream;
  Optional<PdbPublicsStream> PublicsStream;

  Optional<std::vector<StringRef>> StringTable;

  BumpPtrAllocator &Allocator;
};
}
}
}

LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbObject)
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::MSFHeaders)
LLVM_YAML_DECLARE_MAPPING_TRAITS(msf::SuperBlock)
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::StreamBlockList)
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbInfoStream)
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiStream)
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbTpiStream)
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbPublicsStream)
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::NamedStreamMapping)
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbModiStream)
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiModuleInfo)

#endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H