LLVM  10.0.0svn
DbiStream.h
Go to the documentation of this file.
1 //===- DbiStream.h - PDB Dbi Stream (Stream 3) Access -----------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_DEBUGINFO_PDB_RAW_PDBDBISTREAM_H
10 #define LLVM_DEBUGINFO_PDB_RAW_PDBDBISTREAM_H
11 
23 #include "llvm/Support/Endian.h"
24 #include "llvm/Support/Error.h"
25 
26 namespace llvm {
27 namespace object {
28 struct FpoData;
29 struct coff_section;
30 }
31 
32 namespace pdb {
33 class DbiStreamBuilder;
34 class PDBFile;
35 class ISectionContribVisitor;
36 
37 class DbiStream {
38  friend class DbiStreamBuilder;
39 
40 public:
41  explicit DbiStream(std::unique_ptr<BinaryStream> Stream);
42  ~DbiStream();
43  Error reload(PDBFile *Pdb);
44 
45  PdbRaw_DbiVer getDbiVersion() const;
46  uint32_t getAge() const;
47  uint16_t getPublicSymbolStreamIndex() const;
48  uint16_t getGlobalSymbolStreamIndex() const;
49 
50  uint16_t getFlags() const;
51  bool isIncrementallyLinked() const;
52  bool hasCTypes() const;
53  bool isStripped() const;
54 
55  uint16_t getBuildNumber() const;
56  uint16_t getBuildMajorVersion() const;
57  uint16_t getBuildMinorVersion() const;
58 
59  uint16_t getPdbDllRbld() const;
60  uint32_t getPdbDllVersion() const;
61 
62  uint32_t getSymRecordStreamIndex() const;
63 
65 
66  const DbiStreamHeader *getHeader() const { return Header; }
67 
68  BinarySubstreamRef getSectionContributionData() const;
69  BinarySubstreamRef getSecMapSubstreamData() const;
70  BinarySubstreamRef getModiSubstreamData() const;
71  BinarySubstreamRef getFileInfoSubstreamData() const;
72  BinarySubstreamRef getTypeServerMapSubstreamData() const;
73  BinarySubstreamRef getECSubstreamData() const;
74 
75  /// If the given stream type is present, returns its stream index. If it is
76  /// not present, returns InvalidStreamIndex.
77  uint32_t getDebugStreamIndex(DbgHeaderType Type) const;
78 
79  const DbiModuleList &modules() const;
80 
81  FixedStreamArray<object::coff_section> getSectionHeaders() const;
82 
83  bool hasOldFpoRecords() const;
84  FixedStreamArray<object::FpoData> getOldFpoRecords() const;
85  bool hasNewFpoRecords() const;
86  const codeview::DebugFrameDataSubsectionRef &getNewFpoRecords() const;
87 
88  FixedStreamArray<SecMapEntry> getSectionMap() const;
89  void visitSectionContributions(ISectionContribVisitor &Visitor) const;
90 
91  Expected<StringRef> getECName(uint32_t NI) const;
92 
93 private:
94  Error initializeSectionContributionData();
95  Error initializeSectionHeadersData(PDBFile *Pdb);
96  Error initializeSectionMapData();
97  Error initializeOldFpoRecords(PDBFile *Pdb);
98  Error initializeNewFpoRecords(PDBFile *Pdb);
99 
101  createIndexedStreamForHeaderType(PDBFile *Pdb, DbgHeaderType Type) const;
102 
103  std::unique_ptr<BinaryStream> Stream;
104 
105  PDBStringTable ECNames;
106 
107  BinarySubstreamRef SecContrSubstream;
108  BinarySubstreamRef SecMapSubstream;
109  BinarySubstreamRef ModiSubstream;
110  BinarySubstreamRef FileInfoSubstream;
111  BinarySubstreamRef TypeServerMapSubstream;
112  BinarySubstreamRef ECSubstream;
113 
114  DbiModuleList Modules;
115 
117 
118  PdbRaw_DbiSecContribVer SectionContribVersion =
121  FixedStreamArray<SectionContrib2> SectionContribs2;
123 
124  std::unique_ptr<msf::MappedBlockStream> SectionHeaderStream;
126 
127  std::unique_ptr<msf::MappedBlockStream> OldFpoStream;
128  FixedStreamArray<object::FpoData> OldFpoRecords;
129 
130  std::unique_ptr<msf::MappedBlockStream> NewFpoStream;
132 
133  const DbiStreamHeader *Header;
134 };
135 }
136 }
137 
138 #endif
This class represents lattice values for constants.
Definition: AllocatorList.h:23
FixedStreamArray is similar to VarStreamArray, except with each record having a fixed-length.
Tagged union holding either a T or a Error.
Definition: yaml2obj.h:21
The fixed size header that appears at the beginning of the DBI Stream.
Definition: RawTypes.h:119
The instances of the Type class are immutable: once they are created, they are never changed...
Definition: Type.h:46
const DbiStreamHeader * getHeader() const
Definition: DbiStream.h:66
static uint32_t getFlags(const Symbol *Sym)
Definition: TapiFile.cpp:28
PdbRaw_DbiSecContribVer
Definition: RawConstants.h:67
COFF::MachineTypes getMachineType(StringRef S)
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157