40 using namespace llvm::msf;
41 using namespace llvm::support;
42 using namespace llvm::pdb;
58 std::unique_ptr<MappedBlockStream> Stream)
59 : Pdb(File), Stream(std::move(Stream)) {}
77 "Publics Stream does not contain a header.");
82 "Publics Stream does not contain a header.");
92 NumBuckets = HashBuckets.
size();
96 if (
auto EC = Reader.
readArray(AddressMap, NumAddressMapEntries))
99 "Could not read an address map."));
105 "Could not read a thunk map."));
111 "Could not read a section map."));
114 return make_error<RawError>(raw_error_code::corrupt_file,
115 "Corrupted publics stream.");
122 if (SymbolS.takeError()) {
VarStreamArray represents an array of variable length records backed by a stream. ...
iterator_range< codeview::CVSymbolArray::Iterator > getSymbols(bool *HadError) const
This provides a very simple, boring adaptor for a begin and end iterator into a range type...
Error readGSIHashBuckets(msf::FixedStreamArray< support::ulittle32_t > &HashBuckets, const GSIHashHeader *HashHdr, msf::StreamReader &Reader)
Expected< SymbolStream & > getPDBSymbolStream()
Error readArray(ArrayRef< T > &Array, uint32_t NumElements)
Error readGSIHashHeader(const GSIHashHeader *&HashHdr, msf::StreamReader &Reader)
uint32_t getSymHash() const
iterator_range< T > make_range(T x, T y)
Convenience function for iterating over sub-ranges.
static ErrorSuccess success()
Create a success value.
A range adaptor for a pair of iterators.
iterator_range< codeview::CVSymbolArray::Iterator > getSymbols(bool *HadError) const
Error joinErrors(Error E1, Error E2)
Concatenate errors.
uint32_t getAddrMap() const
uint32_t bytesRemaining() const
Lightweight error class with error context and mandatory checking.
Error readGSIHashRecords(msf::FixedStreamArray< PSHashRecord > &HashRecords, const GSIHashHeader *HashHdr, msf::StreamReader &Reader)
Error readObject(const T *&Dest)