42 if (
auto E = GlobalsTable.read(Reader))
47std::vector<std::pair<uint32_t, codeview::CVSymbol>>
50 std::vector<std::pair<uint32_t, codeview::CVSymbol>> Result;
54 int32_t CompressedBucketIndex = GlobalsTable.BucketMap[ExpandedBucketIndex];
55 if (CompressedBucketIndex == -1)
58 uint32_t LastBucketIndex = GlobalsTable.HashBuckets.size() - 1;
60 GlobalsTable.HashBuckets[CompressedBucketIndex] / 12;
63 EndRecordIndex = GlobalsTable.HashBuckets[CompressedBucketIndex + 1];
67 EndRecordIndex = GlobalsTable.HashRecords.size() * 12;
72 assert(EndRecordIndex <= GlobalsTable.HashRecords.size());
73 while (StartRecordIndex < EndRecordIndex) {
74 PSHashRecord PSH = GlobalsTable.HashRecords[StartRecordIndex];
78 Result.push_back(std::make_pair(Off, std::move(
Record)));
88 "Encountered unsupported globals stream version.");
97 "Stream does not contain a GSIHashHeader.");
102 "GSIHashHeader signature (0xffffffff) not found.");
117 "Invalid HR array size.");
119 if (
auto EC = Reader.
readArray(HashRecords, NumHashRecords))
122 "Error reading hash records."));
139 uint32_t NumBitmapEntries = BitmapSizeInBits / 32;
140 if (
auto EC = Reader.
readArray(HashBitmap, NumBitmapEntries))
143 "Could not read a bitmap."));
148 bool IsSet = HashBitmap[WordIdx] & (1U << BitIdx);
150 BucketMap[
I] = CompressedBucketIdx++;
161 if (
auto EC = Reader.
readArray(HashBuckets, NumBuckets))
164 "Hash buckets corrupted."));
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
static GCRegistry::Add< OcamlGC > B("ocaml", "ocaml 3.10-compatible GC")
#define LLVM_LIKELY(EXPR)
static Error readGSIHashHeader(const GSIHashHeader *&HashHdr, BinaryStreamReader &Reader)
static Error readGSIHashBuckets(FixedStreamArray< support::ulittle32_t > &HashBuckets, FixedStreamArray< support::ulittle32_t > &HashBitmap, const GSIHashHeader *HashHdr, MutableArrayRef< int32_t > BucketMap, BinaryStreamReader &Reader)
static Error readGSIHashRecords(FixedStreamArray< PSHashRecord > &HashRecords, const GSIHashHeader *HashHdr, BinaryStreamReader &Reader)
static Error checkHashHdrVersion(const GSIHashHeader *HashHdr)
Provides read only access to a subclass of BinaryStream.
Error readObject(const T *&Dest)
Get a pointer to an object of type T from the underlying stream, as if by memcpy, and store the resul...
Error readArray(ArrayRef< T > &Array, uint32_t NumElements)
Get a reference to a NumElements element array of objects of type T from the underlying stream as if ...
Lightweight error class with error context and mandatory checking.
static ErrorSuccess success()
Create a success value.
FixedStreamArray is similar to VarStreamArray, except with each record having a fixed-length.
MutableArrayRef - Represent a mutable reference to an array (0 or more elements consecutively in memo...
StringRef - Represent a constant reference to a string, i.e.
const GSIHashHeader * HashHdr
LLVM_ABI Error read(BinaryStreamReader &Reader)
std::array< int32_t, IPHR_HASH+1 > BucketMap
FixedStreamArray< support::ulittle32_t > HashBuckets
FixedStreamArray< support::ulittle32_t > HashBitmap
FixedStreamArray< PSHashRecord > HashRecords
LLVM_ABI std::vector< std::pair< uint32_t, codeview::CVSymbol > > findRecordsByName(StringRef Name, const SymbolStream &Symbols) const
LLVM_ABI ~GlobalsStream()
LLVM_ABI GlobalsStream(std::unique_ptr< msf::MappedBlockStream > Stream)
CVRecord< SymbolKind > CVSymbol
LLVM_ABI StringRef getSymbolName(CVSymbol Sym)
LLVM_ABI uint32_t hashStringV1(StringRef Str)
This is an optimization pass for GlobalISel generic memory operations.
Error joinErrors(Error E1, Error E2)
Concatenate errors.
Error make_error(ArgTs &&... Args)
Make a Error instance representing failure using the given error info type.
uint64_t alignTo(uint64_t Size, Align A)
Returns a multiple of A needed to store Size bytes.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
int popcount(T Value) noexcept
Count the number of set bits in a value.
Implement std::hash so that hash_code can be used in STL containers.