LLVM 23.0.0git
PDBFile.h
Go to the documentation of this file.
1//===- PDBFile.h - Low level interface to a PDB file ------------*- 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_PDBFILE_H
10#define LLVM_DEBUGINFO_PDB_NATIVE_PDBFILE_H
11
18#include "llvm/Support/Endian.h"
19#include "llvm/Support/Error.h"
20
21#include <memory>
22
23namespace llvm {
24
25class BinaryStream;
26
27namespace msf {
29}
30
31namespace pdb {
32class DbiStream;
33class GlobalsStream;
34class InfoStream;
36class PDBStringTable;
37class PDBFileBuilder;
38class PublicsStream;
39class SymbolStream;
40class TpiStream;
41
43 friend PDBFileBuilder;
44
45public:
46 PDBFile(StringRef Path, std::unique_ptr<BinaryStream> PdbFileBuffer,
47 BumpPtrAllocator &Allocator);
48 ~PDBFile() override;
49
51 StringRef getFilePath() const;
52
54 uint32_t getUnknown1() const;
55
56 uint32_t getBlockSize() const override;
57 uint32_t getBlockCount() const override;
62
63 uint32_t getNumStreams() const override;
65 uint32_t getStreamByteSize(uint32_t StreamIndex) const override;
67 getStreamBlockList(uint32_t StreamIndex) const override;
68 uint64_t getFileSize() const;
69
71 uint32_t NumBytes) const override;
73 ArrayRef<uint8_t> Data) const override;
74
76 return ContainerLayout.StreamSizes;
77 }
79 return ContainerLayout.StreamMap;
80 }
81
82 const msf::MSFLayout &getMsfLayout() const { return ContainerLayout; }
83 BinaryStreamRef getMsfBuffer() const { return *Buffer; }
84
85 ArrayRef<support::ulittle32_t> getDirectoryBlockArray() const;
86
87 std::unique_ptr<msf::MappedBlockStream>
88 createIndexedStream(uint16_t SN) const;
90 safelyCreateIndexedStream(uint32_t StreamIndex) const;
92 safelyCreateNamedStream(StringRef Name);
93
94 msf::MSFStreamLayout getStreamLayout(uint32_t StreamIdx) const;
95 msf::MSFStreamLayout getFpmStreamLayout() const;
96
97 Error parseFileHeaders();
98 Error parseStreamData();
99
100 Expected<InfoStream &> getPDBInfoStream();
101 Expected<DbiStream &> getPDBDbiStream();
102 Expected<GlobalsStream &> getPDBGlobalsStream();
103 Expected<TpiStream &> getPDBTpiStream();
104 Expected<TpiStream &> getPDBIpiStream();
105 Expected<PublicsStream &> getPDBPublicsStream();
106 Expected<SymbolStream &> getPDBSymbolStream();
107 Expected<PDBStringTable &> getStringTable();
108 Expected<InjectedSourceStream &> getInjectedSourceStream();
109 Expected<object::DXContainer &> getDXContainerStream();
110
111 BumpPtrAllocator &getAllocator() { return Allocator; }
112
113 bool hasPDBDbiStream() const;
114 bool hasPDBGlobalsStream();
115 bool hasPDBInfoStream() const;
116 bool hasPDBIpiStream() const;
117 bool hasPDBPublicsStream();
118 bool hasPDBSymbolStream();
119 bool hasPDBTpiStream() const;
120 bool hasPDBStringTable();
121 bool hasPDBInjectedSourceStream();
122
124
125private:
126 std::string FilePath;
128
129 std::unique_ptr<BinaryStream> Buffer;
130
131 msf::MSFLayout ContainerLayout;
132
133 std::unique_ptr<GlobalsStream> Globals;
134 std::unique_ptr<InfoStream> Info;
135 std::unique_ptr<DbiStream> Dbi;
136 std::unique_ptr<TpiStream> Tpi;
137 std::unique_ptr<TpiStream> Ipi;
138 std::unique_ptr<object::DXContainer> Dxc;
139 std::unique_ptr<PublicsStream> Publics;
140 std::unique_ptr<SymbolStream> Symbols;
141 std::unique_ptr<msf::MappedBlockStream> DirectoryStream;
142 std::unique_ptr<msf::MappedBlockStream> StringTableStream;
143 std::unique_ptr<InjectedSourceStream> InjectedSources;
144 std::unique_ptr<PDBStringTable> Strings;
145};
146}
147}
148
149#endif
This file defines the BumpPtrAllocator interface.
#define LLVM_ABI
Definition Compiler.h:213
static std::optional< TypeSize > getPointerSize(const Value *V, const DataLayout &DL, const TargetLibraryInfo &TLI, const Function *F)
Basic Register Allocator
Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:40
BinaryStreamRef is to BinaryStream what ArrayRef is to an Array.
An interface for accessing data in a stream-like format, but which discourages copying.
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
Tagged union holding either a T or a Error.
Definition Error.h:485
Represent a constant reference to a string, i.e.
Definition StringRef.h:56
Describes the layout of a stream in an MSF layout.
Definition MSFCommon.h:78
MappedBlockStream represents data stored in an MSF file into chunks of a particular size (called the ...
ArrayRef< support::ulittle32_t > getStreamSizes() const
Definition PDBFile.h:75
const msf::MSFLayout & getMsfLayout() const
Definition PDBFile.h:82
uint32_t getNumDirectoryBlocks() const
Definition PDBFile.cpp:74
uint32_t getBlockSize() const override
Definition PDBFile.cpp:54
uint32_t getUnknown1() const
Definition PDBFile.cpp:72
uint32_t getBlockMapIndex() const
Definition PDBFile.cpp:68
BinaryStreamRef getMsfBuffer() const
Definition PDBFile.h:83
PDBFile(StringRef Path, std::unique_ptr< BinaryStream > PdbFileBuffer, BumpPtrAllocator &Allocator)
Definition PDBFile.cpp:41
uint32_t getBlockCount() const override
Definition PDBFile.cpp:60
StringRef getFileDirectory() const
Definition PDBFile.cpp:50
uint32_t getMaxStreamSize() const
Definition PDBFile.cpp:88
ArrayRef< ArrayRef< support::ulittle32_t > > getStreamMap() const
Definition PDBFile.h:78
Error setBlockData(uint32_t BlockIndex, uint32_t Offset, ArrayRef< uint8_t > Data) const override
Definition PDBFile.cpp:113
uint64_t getBlockMapOffset() const
Definition PDBFile.cpp:79
~PDBFile() override
uint64_t getFileSize() const
Definition PDBFile.cpp:101
Expected< ArrayRef< uint8_t > > getBlockData(uint32_t BlockIndex, uint32_t NumBytes) const override
Definition PDBFile.cpp:103
uint32_t getFreeBlockMapBlock() const
Definition PDBFile.cpp:56
BumpPtrAllocator & getAllocator()
Definition PDBFile.h:111
uint32_t getStreamByteSize(uint32_t StreamIndex) const override
Definition PDBFile.cpp:92
uint32_t getNumStreams() const override
Definition PDBFile.cpp:84
StringRef getFilePath() const
Definition PDBFile.cpp:48
ArrayRef< support::ulittle32_t > getStreamBlockList(uint32_t StreamIndex) const override
Definition PDBFile.cpp:97
uint32_t getNumDirectoryBytes() const
Definition PDBFile.cpp:64
This is an optimization pass for GlobalISel generic memory operations.
BumpPtrAllocatorImpl<> BumpPtrAllocator
The standard BumpPtrAllocator which just uses the default template parameters.
Definition Allocator.h:383