LLVM 22.0.0git
GlobalsStream.h
Go to the documentation of this file.
1//===- GlobalsStream.h - PDB Index of Symbols by Name -----------*- 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_GLOBALSSTREAM_H
10#define LLVM_DEBUGINFO_PDB_NATIVE_GLOBALSSTREAM_H
11
12#include "llvm/ADT/iterator.h"
17#include "llvm/Support/Endian.h"
18#include "llvm/Support/Error.h"
19
20namespace llvm {
21class BinaryStreamReader;
22namespace msf {
23class MappedBlockStream;
24}
25namespace pdb {
26class SymbolStream;
27
28/// Iterator over hash records producing symbol record offsets. Abstracts away
29/// the fact that symbol record offsets on disk are off-by-one.
31 : public iterator_adaptor_base<
32 GSIHashIterator, FixedStreamArrayIterator<PSHashRecord>,
33 std::random_access_iterator_tag, const uint32_t> {
34public:
35 template <typename T>
37 : GSIHashIterator::iterator_adaptor_base(std::forward<T &&>(v)) {}
38
40 uint32_t Off = this->I->Off;
41 return --Off;
42 }
43};
44
45/// From https://github.com/Microsoft/microsoft-pdb/blob/master/PDB/dbi/gsi.cpp
46enum : unsigned { IPHR_HASH = 4096 };
47
48/// A readonly view of a hash table used in the globals and publics streams.
49/// Most clients will only want to iterate this to get symbol record offsets
50/// into the PDB symbol stream.
52public:
57 std::array<int32_t, IPHR_HASH + 1> BucketMap;
58
60
62 uint32_t getVerHeader() const { return HashHdr->VerHdr; }
65
69};
70
72public:
73 LLVM_ABI explicit GlobalsStream(
74 std::unique_ptr<msf::MappedBlockStream> Stream);
76 const GSIHashTable &getGlobalsTable() const { return GlobalsTable; }
78
79 LLVM_ABI std::vector<std::pair<uint32_t, codeview::CVSymbol>>
81
82private:
83 GSIHashTable GlobalsTable;
84 std::unique_ptr<msf::MappedBlockStream> Stream;
85};
86} // namespace pdb
87}
88
89#endif
Lightweight arrays that are backed by an arbitrary BinaryStream.
#define LLVM_ABI
Definition: Compiler.h:213
std::string Name
Provides read only access to a subclass of BinaryStream.
Lightweight error class with error context and mandatory checking.
Definition: Error.h:159
FixedStreamArray is similar to VarStreamArray, except with each record having a fixed-length.
FixedStreamArrayIterator< T > begin() const
FixedStreamArrayIterator< T > end() const
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:55
CRTP base class for adapting an iterator to a different type.
Definition: iterator.h:237
Iterator over hash records producing symbol record offsets.
Definition: GlobalsStream.h:33
uint32_t operator*() const
Definition: GlobalsStream.h:39
A readonly view of a hash table used in the globals and publics streams.
Definition: GlobalsStream.h:51
const GSIHashHeader * HashHdr
Definition: GlobalsStream.h:53
uint32_t getHashRecordSize() const
Definition: GlobalsStream.h:63
LLVM_ABI Error read(BinaryStreamReader &Reader)
uint32_t getNumBuckets() const
Definition: GlobalsStream.h:64
std::array< int32_t, IPHR_HASH+1 > BucketMap
Definition: GlobalsStream.h:57
FixedStreamArray< support::ulittle32_t > HashBuckets
Definition: GlobalsStream.h:56
FixedStreamArray< support::ulittle32_t > HashBitmap
Definition: GlobalsStream.h:55
uint32_t getVerSignature() const
Definition: GlobalsStream.h:61
GSIHashHeader iterator
Definition: GlobalsStream.h:66
GSIHashIterator begin() const
Definition: GlobalsStream.h:67
GSIHashIterator end() const
Definition: GlobalsStream.h:68
uint32_t getVerHeader() const
Definition: GlobalsStream.h:62
FixedStreamArray< PSHashRecord > HashRecords
Definition: GlobalsStream.h:54
LLVM_ABI Error reload()
LLVM_ABI std::vector< std::pair< uint32_t, codeview::CVSymbol > > findRecordsByName(StringRef Name, const SymbolStream &Symbols) const
const GSIHashTable & getGlobalsTable() const
Definition: GlobalsStream.h:76
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
Implement std::hash so that hash_code can be used in STL containers.
Definition: BitVector.h:856
Header of the hash tables found in the globals and publics sections.
Definition: RawTypes.h:28
support::ulittle32_t HrSize
Definition: RawTypes.h:35
support::ulittle32_t VerHdr
Definition: RawTypes.h:34
support::ulittle32_t VerSignature
Definition: RawTypes.h:33
support::ulittle32_t NumBuckets
Definition: RawTypes.h:36