43 if (
auto E = GlobalsTable.
read(Reader))
48std::vector<std::pair<uint32_t, codeview::CVSymbol>>
51 std::vector<std::pair<uint32_t, codeview::CVSymbol>> Result;
55 int32_t CompressedBucketIndex = GlobalsTable.
BucketMap[ExpandedBucketIndex];
56 if (CompressedBucketIndex == -1)
61 GlobalsTable.
HashBuckets[CompressedBucketIndex] / 12;
64 EndRecordIndex = GlobalsTable.
HashBuckets[CompressedBucketIndex + 1];
74 while (StartRecordIndex < EndRecordIndex) {
79 Result.push_back(std::make_pair(Off, std::move(
Record)));
87 return make_error<RawError>(
89 "Encountered unsupported globals stream version.");
98 "Stream does not contain a GSIHashHeader.");
101 return make_error<RawError>(
103 "GSIHashHeader signature (0xffffffff) not found.");
118 "Invalid HR array size.");
120 if (
auto EC = Reader.
readArray(HashRecords, NumHashRecords))
123 "Error reading hash records."));
140 uint32_t NumBitmapEntries = BitmapSizeInBits / 32;
141 if (
auto EC = Reader.
readArray(HashBitmap, NumBitmapEntries))
144 "Could not read a bitmap."));
147 uint8_t WordIdx =
I / 32;
148 uint8_t BitIdx =
I % 32;
149 bool IsSet = HashBitmap[WordIdx] & (1U << BitIdx);
151 BucketMap[
I] = CompressedBucketIdx++;
162 if (
auto EC = Reader.
readArray(HashBuckets, NumBuckets))
165 "Hash buckets corrupted."));
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)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
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.
CVRecord is a fat pointer (base + size pair) to a symbol or type record.
const GSIHashHeader * HashHdr
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
std::vector< std::pair< uint32_t, codeview::CVSymbol > > findRecordsByName(StringRef Name, const SymbolStream &Symbols) const
GlobalsStream(std::unique_ptr< msf::MappedBlockStream > Stream)
StringRef getSymbolName(CVSymbol Sym)
uint32_t hashStringV1(StringRef Str)
This is an optimization pass for GlobalISel generic memory operations.
int popcount(T Value) noexcept
Count the number of set bits in a value.
Error joinErrors(Error E1, Error E2)
Concatenate errors.
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.
Implement std::hash so that hash_code can be used in STL containers.