24 using namespace llvm::msf;
25 using namespace llvm::pdb;
28 std::unique_ptr<MappedBlockStream> Stream)
29 : Mod(Module), Stream(std::move(Stream)) {}
40 if (C11Size > 0 && C13Size > 0)
42 "Module has both C11 and C13 line info");
48 if (
auto EC = Reader.
readArray(SymbolsSubstream, SymbolSize - 4))
53 if (
auto EC = Reader.
readStreamRef(C13LinesSubstream, C13Size))
63 if (
auto EC = Reader.
readStreamRef(GlobalRefsSubstream, GlobalRefsSize))
66 return make_error<RawError>(raw_error_code::corrupt_file,
67 "Unexpected bytes in module stream.");
A Module instance is used to store all the information related to an LLVM module. ...
This provides a very simple, boring adaptor for a begin and end iterator into a range type...
uint32_t getC13LineInfoByteSize() const
iterator_range< codeview::ModuleSubstreamArray::Iterator > lines(bool *HadError) const
Iterator begin(bool *HadError=nullptr) const
ReadableStreamRef getUnderlyingStream() const
uint32_t getLength() const
Error readInteger(uint8_t &Dest)
Error readArray(ArrayRef< T > &Array, uint32_t NumElements)
uint32_t getLineInfoByteSize() 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.
uint32_t getSymbolDebugInfoByteSize() const
Error readStreamRef(ReadableStreamRef &Ref)
uint32_t bytesRemaining() const
Lightweight error class with error context and mandatory checking.
iterator_range< codeview::CVSymbolArray::Iterator > symbols(bool *HadError) const