47 return Header->ISectThunkTable;
50 return Header->OffThunkTable;
65 "Publics Stream does not contain a header.");
70 "Publics Stream does not contain a header.");
73 if (
auto E = PublicsTable.read(Reader))
78 if (
auto EC = Reader.
readArray(AddressMap, NumAddressMapEntries))
81 "Could not read an address map."));
84 if (
auto EC = Reader.
readArray(ThunkMap, Header->NumThunks))
87 "Could not read a thunk map."));
91 if (
auto EC = Reader.
readArray(SectionOffsets, Header->NumSections))
94 "Could not read a section map."));
99 "Corrupted publics stream.");
105std::optional<std::pair<codeview::PublicSym32, size_t>>
111 AddressMap, std::tuple(Segment,
Offset),
114 if (Sym.kind() != codeview::S_PUB32)
125 return std::tie(Psym->Segment, Psym->Offset) < Addr;
128 if (It == AddressMap.end())
131 auto Sym =
Symbols.readRecord(It->value());
132 if (Sym.kind() != codeview::S_PUB32)
146 std::ptrdiff_t IterOffset = It - AddressMap.begin();
147 return std::pair{Psym,
static_cast<size_t>(IterOffset)};
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...
uint64_t bytesRemaining() const
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.
static Error deserializeAs(CVSymbol Symbol, T &Record)
LLVM_ABI uint32_t getSymHash() const
LLVM_ABI uint32_t getThunkTableOffset() const
LLVM_ABI ~PublicsStream()
LLVM_ABI PublicsStream(std::unique_ptr< msf::MappedBlockStream > Stream)
LLVM_ABI std::optional< std::pair< codeview::PublicSym32, size_t > > findByAddress(const SymbolStream &Symbols, uint16_t Segment, uint32_t Offset) const
Find a public symbol by a segment and offset.
LLVM_ABI uint16_t getThunkTableSection() const
detail::packed_endian_specific_integral< uint32_t, llvm::endianness::little, unaligned > ulittle32_t
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.
auto lower_bound(R &&Range, T &&Value)
Provide wrappers to std::lower_bound which take ranges instead of having to pass begin/end explicitly...
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
void consumeError(Error Err)
Consume a Error without doing anything.
Implement std::hash so that hash_code can be used in STL containers.