Line data Source code
1 : //===- DbiStream.h - PDB Dbi Stream (Stream 3) Access -----------*- C++ -*-===//
2 : //
3 : // The LLVM Compiler Infrastructure
4 : //
5 : // This file is distributed under the University of Illinois Open Source
6 : // License. See LICENSE.TXT for details.
7 : //
8 : //===----------------------------------------------------------------------===//
9 :
10 : #ifndef LLVM_DEBUGINFO_PDB_RAW_PDBDBISTREAM_H
11 : #define LLVM_DEBUGINFO_PDB_RAW_PDBDBISTREAM_H
12 :
13 : #include "llvm/DebugInfo/CodeView/DebugSubsection.h"
14 : #include "llvm/DebugInfo/MSF/MappedBlockStream.h"
15 : #include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h"
16 : #include "llvm/DebugInfo/PDB/Native/DbiModuleList.h"
17 : #include "llvm/DebugInfo/PDB/Native/PDBStringTable.h"
18 : #include "llvm/DebugInfo/PDB/Native/RawConstants.h"
19 : #include "llvm/DebugInfo/PDB/Native/RawTypes.h"
20 : #include "llvm/DebugInfo/PDB/PDBTypes.h"
21 : #include "llvm/Support/BinaryStreamArray.h"
22 : #include "llvm/Support/BinaryStreamRef.h"
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 372 : 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 :
64 : PDB_Machine getMachineType() const;
65 :
66 0 : 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 : FixedStreamArray<object::FpoData> getFpoRecords();
84 :
85 : FixedStreamArray<SecMapEntry> getSectionMap() const;
86 : void visitSectionContributions(ISectionContribVisitor &Visitor) const;
87 :
88 : Expected<StringRef> getECName(uint32_t NI) const;
89 :
90 : private:
91 : Error initializeSectionContributionData();
92 : Error initializeSectionHeadersData(PDBFile *Pdb);
93 : Error initializeSectionMapData();
94 : Error initializeFpoRecords(PDBFile *Pdb);
95 :
96 : std::unique_ptr<BinaryStream> Stream;
97 :
98 : PDBStringTable ECNames;
99 :
100 : BinarySubstreamRef SecContrSubstream;
101 : BinarySubstreamRef SecMapSubstream;
102 : BinarySubstreamRef ModiSubstream;
103 : BinarySubstreamRef FileInfoSubstream;
104 : BinarySubstreamRef TypeServerMapSubstream;
105 : BinarySubstreamRef ECSubstream;
106 :
107 : DbiModuleList Modules;
108 :
109 : FixedStreamArray<support::ulittle16_t> DbgStreams;
110 :
111 : PdbRaw_DbiSecContribVer SectionContribVersion =
112 : PdbRaw_DbiSecContribVer::DbiSecContribVer60;
113 : FixedStreamArray<SectionContrib> SectionContribs;
114 : FixedStreamArray<SectionContrib2> SectionContribs2;
115 : FixedStreamArray<SecMapEntry> SectionMap;
116 :
117 : std::unique_ptr<msf::MappedBlockStream> SectionHeaderStream;
118 : FixedStreamArray<object::coff_section> SectionHeaders;
119 :
120 : std::unique_ptr<msf::MappedBlockStream> FpoStream;
121 : FixedStreamArray<object::FpoData> FpoRecords;
122 :
123 : const DbiStreamHeader *Header;
124 : };
125 : }
126 : }
127 :
128 : #endif
|