Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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_NATIVE_DBISTREAM_H
10
#define LLVM_DEBUGINFO_PDB_NATIVE_DBISTREAM_H
11
 
12
#include "llvm/DebugInfo/CodeView/DebugFrameDataSubsection.h"
13
#include "llvm/DebugInfo/PDB/Native/DbiModuleList.h"
14
#include "llvm/DebugInfo/PDB/Native/PDBStringTable.h"
15
#include "llvm/DebugInfo/PDB/Native/RawConstants.h"
16
#include "llvm/DebugInfo/PDB/PDBTypes.h"
17
#include "llvm/Support/BinaryStreamArray.h"
18
#include "llvm/Support/BinaryStreamRef.h"
19
#include "llvm/Support/Endian.h"
20
#include "llvm/Support/Error.h"
21
 
22
namespace llvm {
23
class BinaryStream;
24
namespace object {
25
struct FpoData;
26
struct coff_section;
27
}
28
namespace msf {
29
class MappedBlockStream;
30
}
31
namespace pdb {
32
struct DbiStreamHeader;
33
struct SecMapEntry;
34
struct SectionContrib2;
35
struct SectionContrib;
36
class PDBFile;
37
class ISectionContribVisitor;
38
 
39
class DbiStream {
40
  friend class DbiStreamBuilder;
41
 
42
public:
43
  explicit DbiStream(std::unique_ptr<BinaryStream> Stream);
44
  ~DbiStream();
45
  Error reload(PDBFile *Pdb);
46
 
47
  PdbRaw_DbiVer getDbiVersion() const;
48
  uint32_t getAge() const;
49
  uint16_t getPublicSymbolStreamIndex() const;
50
  uint16_t getGlobalSymbolStreamIndex() const;
51
 
52
  uint16_t getFlags() const;
53
  bool isIncrementallyLinked() const;
54
  bool hasCTypes() const;
55
  bool isStripped() const;
56
 
57
  uint16_t getBuildNumber() const;
58
  uint16_t getBuildMajorVersion() const;
59
  uint16_t getBuildMinorVersion() const;
60
 
61
  uint16_t getPdbDllRbld() const;
62
  uint32_t getPdbDllVersion() const;
63
 
64
  uint32_t getSymRecordStreamIndex() const;
65
 
66
  PDB_Machine getMachineType() const;
67
 
68
  const DbiStreamHeader *getHeader() const { return Header; }
69
 
70
  BinarySubstreamRef getSectionContributionData() const;
71
  BinarySubstreamRef getSecMapSubstreamData() const;
72
  BinarySubstreamRef getModiSubstreamData() const;
73
  BinarySubstreamRef getFileInfoSubstreamData() const;
74
  BinarySubstreamRef getTypeServerMapSubstreamData() const;
75
  BinarySubstreamRef getECSubstreamData() const;
76
 
77
  /// If the given stream type is present, returns its stream index. If it is
78
  /// not present, returns InvalidStreamIndex.
79
  uint32_t getDebugStreamIndex(DbgHeaderType Type) const;
80
 
81
  const DbiModuleList &modules() const;
82
 
83
  FixedStreamArray<object::coff_section> getSectionHeaders() const;
84
 
85
  bool hasOldFpoRecords() const;
86
  FixedStreamArray<object::FpoData> getOldFpoRecords() const;
87
  bool hasNewFpoRecords() const;
88
  const codeview::DebugFrameDataSubsectionRef &getNewFpoRecords() const;
89
 
90
  FixedStreamArray<SecMapEntry> getSectionMap() const;
91
  void visitSectionContributions(ISectionContribVisitor &Visitor) const;
92
 
93
  Expected<StringRef> getECName(uint32_t NI) const;
94
 
95
private:
96
  Error initializeSectionContributionData();
97
  Error initializeSectionHeadersData(PDBFile *Pdb);
98
  Error initializeSectionMapData();
99
  Error initializeOldFpoRecords(PDBFile *Pdb);
100
  Error initializeNewFpoRecords(PDBFile *Pdb);
101
 
102
  Expected<std::unique_ptr<msf::MappedBlockStream>>
103
  createIndexedStreamForHeaderType(PDBFile *Pdb, DbgHeaderType Type) const;
104
 
105
  std::unique_ptr<BinaryStream> Stream;
106
 
107
  PDBStringTable ECNames;
108
 
109
  BinarySubstreamRef SecContrSubstream;
110
  BinarySubstreamRef SecMapSubstream;
111
  BinarySubstreamRef ModiSubstream;
112
  BinarySubstreamRef FileInfoSubstream;
113
  BinarySubstreamRef TypeServerMapSubstream;
114
  BinarySubstreamRef ECSubstream;
115
 
116
  DbiModuleList Modules;
117
 
118
  FixedStreamArray<support::ulittle16_t> DbgStreams;
119
 
120
  PdbRaw_DbiSecContribVer SectionContribVersion =
121
      PdbRaw_DbiSecContribVer::DbiSecContribVer60;
122
  FixedStreamArray<SectionContrib> SectionContribs;
123
  FixedStreamArray<SectionContrib2> SectionContribs2;
124
  FixedStreamArray<SecMapEntry> SectionMap;
125
 
126
  std::unique_ptr<msf::MappedBlockStream> SectionHeaderStream;
127
  FixedStreamArray<object::coff_section> SectionHeaders;
128
 
129
  std::unique_ptr<msf::MappedBlockStream> OldFpoStream;
130
  FixedStreamArray<object::FpoData> OldFpoRecords;
131
 
132
  std::unique_ptr<msf::MappedBlockStream> NewFpoStream;
133
  codeview::DebugFrameDataSubsectionRef NewFpoRecords;
134
 
135
  const DbiStreamHeader *Header;
136
};
137
}
138
}
139
 
140
#endif