Coverage Report

Created: 2017-10-03 07:32

/Users/buildslave/jenkins/sharedspace/clang-stage2-coverage-R@2/llvm/include/llvm/DebugInfo/PDB/Native/PDBFile.h
Line
Count
Source (jump to first uncovered line)
1
//===- PDBFile.h - Low level interface to a PDB file ------------*- 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_PDBFILE_H
11
#define LLVM_DEBUGINFO_PDB_RAW_PDBFILE_H
12
13
#include "llvm/ADT/DenseMap.h"
14
#include "llvm/DebugInfo/MSF/IMSFFile.h"
15
#include "llvm/DebugInfo/MSF/MSFCommon.h"
16
#include "llvm/Support/Allocator.h"
17
#include "llvm/Support/BinaryStreamRef.h"
18
#include "llvm/Support/Endian.h"
19
#include "llvm/Support/Error.h"
20
#include "llvm/Support/MathExtras.h"
21
22
#include <memory>
23
24
namespace llvm {
25
26
class BinaryStream;
27
28
namespace msf {
29
class MappedBlockStream;
30
}
31
32
namespace pdb {
33
class DbiStream;
34
class GlobalsStream;
35
class InfoStream;
36
class PDBStringTable;
37
class PDBFileBuilder;
38
class PublicsStream;
39
class SymbolStream;
40
class TpiStream;
41
42
class PDBFile : public msf::IMSFFile {
43
  friend PDBFileBuilder;
44
45
public:
46
  PDBFile(StringRef Path, std::unique_ptr<BinaryStream> PdbFileBuffer,
47
          BumpPtrAllocator &Allocator);
48
  ~PDBFile() override;
49
50
  StringRef getFileDirectory() const;
51
  StringRef getFilePath() const;
52
53
  uint32_t getFreeBlockMapBlock() const;
54
  uint32_t getUnknown1() const;
55
56
  uint32_t getBlockSize() const override;
57
  uint32_t getBlockCount() const override;
58
  uint32_t getNumDirectoryBytes() const;
59
  uint32_t getBlockMapIndex() const;
60
  uint32_t getNumDirectoryBlocks() const;
61
  uint64_t getBlockMapOffset() const;
62
63
  uint32_t getNumStreams() const override;
64
  uint32_t getMaxStreamSize() const;
65
  uint32_t getStreamByteSize(uint32_t StreamIndex) const override;
66
  ArrayRef<support::ulittle32_t>
67
  getStreamBlockList(uint32_t StreamIndex) const override;
68
  uint32_t getFileSize() const;
69
70
  Expected<ArrayRef<uint8_t>> getBlockData(uint32_t BlockIndex,
71
                                           uint32_t NumBytes) const override;
72
  Error setBlockData(uint32_t BlockIndex, uint32_t Offset,
73
                     ArrayRef<uint8_t> Data) const override;
74
75
0
  ArrayRef<support::ulittle32_t> getStreamSizes() const {
76
0
    return ContainerLayout.StreamSizes;
77
0
  }
78
0
  ArrayRef<ArrayRef<support::ulittle32_t>> getStreamMap() const {
79
0
    return ContainerLayout.StreamMap;
80
0
  }
81
82
224
  const msf::MSFLayout &getMsfLayout() const { return ContainerLayout; }
83
225
  BinaryStreamRef getMsfBuffer() const { return *Buffer; }
84
85
  ArrayRef<support::ulittle32_t> getDirectoryBlockArray() const;
86
87
  std::unique_ptr<msf::MappedBlockStream> createIndexedStream(uint16_t SN);
88
89
  msf::MSFStreamLayout getStreamLayout(uint32_t StreamIdx) const;
90
  msf::MSFStreamLayout getFpmStreamLayout() const;
91
92
  Error parseFileHeaders();
93
  Error parseStreamData();
94
95
  Expected<InfoStream &> getPDBInfoStream();
96
  Expected<DbiStream &> getPDBDbiStream();
97
  Expected<GlobalsStream &> getPDBGlobalsStream();
98
  Expected<TpiStream &> getPDBTpiStream();
99
  Expected<TpiStream &> getPDBIpiStream();
100
  Expected<PublicsStream &> getPDBPublicsStream();
101
  Expected<SymbolStream &> getPDBSymbolStream();
102
  Expected<PDBStringTable &> getStringTable();
103
104
258
  BumpPtrAllocator &getAllocator() { return Allocator; }
105
106
  bool hasPDBDbiStream() const;
107
  bool hasPDBGlobalsStream();
108
  bool hasPDBInfoStream() const;
109
  bool hasPDBIpiStream() const;
110
  bool hasPDBPublicsStream();
111
  bool hasPDBSymbolStream();
112
  bool hasPDBTpiStream() const;
113
  bool hasPDBStringTable();
114
115
  uint32_t getPointerSize();
116
117
private:
118
  Expected<std::unique_ptr<msf::MappedBlockStream>>
119
  safelyCreateIndexedStream(const msf::MSFLayout &Layout,
120
                            BinaryStreamRef MsfData,
121
                            uint32_t StreamIndex) const;
122
123
  std::string FilePath;
124
  BumpPtrAllocator &Allocator;
125
126
  std::unique_ptr<BinaryStream> Buffer;
127
128
  msf::MSFLayout ContainerLayout;
129
130
  std::unique_ptr<GlobalsStream> Globals;
131
  std::unique_ptr<InfoStream> Info;
132
  std::unique_ptr<DbiStream> Dbi;
133
  std::unique_ptr<TpiStream> Tpi;
134
  std::unique_ptr<TpiStream> Ipi;
135
  std::unique_ptr<PublicsStream> Publics;
136
  std::unique_ptr<SymbolStream> Symbols;
137
  std::unique_ptr<msf::MappedBlockStream> DirectoryStream;
138
  std::unique_ptr<msf::MappedBlockStream> StringTableStream;
139
  std::unique_ptr<PDBStringTable> Strings;
140
};
141
}
142
}
143
144
#endif