mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
ea31ec8205
Previously we would expect certain subsections to appear in a certain order because some subsections would reference other subsections, but in practice we need to support arbitrary orderings since some object file and PDB file producers generate them this way. This also paves the way for supporting Yaml <-> Object File conversion of CodeView, since Object Files typically have quite a large number of subsections in their debug info. Differential Revision: https://reviews.llvm.org/D33807 llvm-svn: 304588
126 lines
3.4 KiB
C++
126 lines
3.4 KiB
C++
//===- 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/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;
|
|
PDB_UniqueId 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 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<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::NamedStreamMapping)
|
|
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbModiStream)
|
|
LLVM_YAML_DECLARE_MAPPING_TRAITS(pdb::yaml::PdbDbiModuleInfo)
|
|
|
|
#endif // LLVM_TOOLS_LLVMPDBDUMP_PDBYAML_H
|