diff options
Diffstat (limited to 'llvm/lib/DebugInfo/PDB/Raw')
| -rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/ModInfo.cpp | 29 | ||||
| -rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp | 4 | ||||
| -rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/PublicsStream.cpp | 11 | ||||
| -rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/SymbolStream.cpp | 17 | ||||
| -rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp | 7 |
5 files changed, 30 insertions, 38 deletions
diff --git a/llvm/lib/DebugInfo/PDB/Raw/ModInfo.cpp b/llvm/lib/DebugInfo/PDB/Raw/ModInfo.cpp index 67dc81da63a..bae135f77bc 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/ModInfo.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/ModInfo.cpp @@ -69,28 +69,25 @@ struct ModInfo::FileLayout { ModInfo::ModInfo() : Layout(nullptr) {} -ModInfo::ModInfo(codeview::StreamRef Stream) : Layout(nullptr) { - codeview::StreamReader Reader(Stream); - if (auto EC = Reader.readObject(Layout)) { - consumeError(std::move(EC)); - return; - } - if (auto EC = Reader.readZeroString(ModuleName)) { - consumeError(std::move(EC)); - return; - } - if (auto EC = Reader.readZeroString(ObjFileName)) { - consumeError(std::move(EC)); - return; - } -} - ModInfo::ModInfo(const ModInfo &Info) : ModuleName(Info.ModuleName), ObjFileName(Info.ObjFileName), Layout(Info.Layout) {} ModInfo::~ModInfo() {} +Error ModInfo::initialize(codeview::StreamRef Stream, ModInfo &Info) { + codeview::StreamReader Reader(Stream); + if (auto EC = Reader.readObject(Info.Layout)) + return EC; + + if (auto EC = Reader.readZeroString(Info.ModuleName)) + return EC; + + if (auto EC = Reader.readZeroString(Info.ObjFileName)) + return EC; + return Error::success(); +} + bool ModInfo::hasECInfo() const { return (Layout->Flags & HasECFlagMask) != 0; } uint16_t ModInfo::getTypeServerIndex() const { diff --git a/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp index 404208a6487..88c6b7c2444 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp @@ -9,7 +9,6 @@ #include "llvm/DebugInfo/PDB/Raw/ModStream.h" -#include "llvm/DebugInfo/CodeView/RecordIterator.h" #include "llvm/DebugInfo/CodeView/StreamReader.h" #include "llvm/DebugInfo/PDB/Raw/ModInfo.h" #include "llvm/DebugInfo/PDB/Raw/RawError.h" @@ -58,6 +57,7 @@ Error ModStream::reload() { return Error::success(); } -iterator_range<codeview::CVSymbolArray::Iterator> ModStream::symbols() const { +iterator_range<codeview::CVSymbolArray::Iterator> +ModStream::symbols(bool *HadError) const { return llvm::make_range(SymbolsSubstream.begin(), SymbolsSubstream.end()); } diff --git a/llvm/lib/DebugInfo/PDB/Raw/PublicsStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/PublicsStream.cpp index f51a8ef17a2..d3a7ffd7f93 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/PublicsStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/PublicsStream.cpp @@ -113,7 +113,7 @@ Error PublicsStream::reload() { // A bitmap of a fixed length follows. size_t BitmapSizeInBits = alignTo(IPHR_HASH + 1, 32); uint32_t NumBitmapEntries = BitmapSizeInBits / 8; - if (auto EC = Reader.readBytes(NumBitmapEntries, Bitmap)) + if (auto EC = Reader.readBytes(Bitmap, NumBitmapEntries)) return joinErrors(std::move(EC), make_error<RawError>(raw_error_code::corrupt_file, "Could not read a bitmap.")); @@ -156,13 +156,14 @@ Error PublicsStream::reload() { return Error::success(); } -iterator_range<codeview::SymbolIterator> PublicsStream::getSymbols() const { - using codeview::SymbolIterator; +iterator_range<codeview::CVSymbolArray::Iterator> +PublicsStream::getSymbols(bool *HadError) const { auto SymbolS = Pdb.getPDBSymbolStream(); if (SymbolS.takeError()) { - return llvm::make_range<SymbolIterator>(SymbolIterator(), SymbolIterator()); + codeview::CVSymbolArray::Iterator Iter; + return llvm::make_range(Iter, Iter); } SymbolStream &SS = SymbolS.get(); - return SS.getSymbols(); + return SS.getSymbols(HadError); } diff --git a/llvm/lib/DebugInfo/PDB/Raw/SymbolStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/SymbolStream.cpp index ba4ea577d81..021e2299dbd 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/SymbolStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/SymbolStream.cpp @@ -30,20 +30,13 @@ SymbolStream::~SymbolStream() {} Error SymbolStream::reload() { codeview::StreamReader Reader(MappedStream); - if (Stream.load(Reader, MappedStream.getLength())) - return make_error<RawError>(raw_error_code::corrupt_file, - "Could not load symbol stream."); + if (auto EC = Reader.readArray(SymbolRecords, MappedStream.getLength())) + return EC; return Error::success(); } -iterator_range<codeview::SymbolIterator> SymbolStream::getSymbols() const { - using codeview::SymbolIterator; - ArrayRef<uint8_t> Data; - if (auto Error = Stream.readBytes(0, Stream.getLength(), Data)) { - consumeError(std::move(Error)); - return iterator_range<SymbolIterator>(SymbolIterator(), SymbolIterator()); - } - - return codeview::makeSymbolRange(Data, nullptr); +iterator_range<codeview::CVSymbolArray::Iterator> +SymbolStream::getSymbols(bool *HadError) const { + return llvm::make_range(SymbolRecords.begin(HadError), SymbolRecords.end()); } diff --git a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp index 3345ab27571..6478ad1f77f 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/TpiStream.cpp @@ -92,7 +92,7 @@ Error TpiStream::reload() { HashFunction = HashBufferV8; // The actual type records themselves come from this stream - if (auto EC = RecordsBuffer.load(Reader, Header->TypeRecordBytes)) + if (auto EC = Reader.readArray(TypeRecords, Header->TypeRecordBytes)) return EC; // Hash indices, hash values, etc come from the hash stream. @@ -136,6 +136,7 @@ uint16_t TpiStream::getTypeHashStreamAuxIndex() const { return Header->HashAuxStreamIndex; } -iterator_range<codeview::TypeIterator> TpiStream::types(bool *HadError) const { - return codeview::makeTypeRange(RecordsBuffer.data(), /*HadError=*/HadError); +iterator_range<codeview::CVTypeArray::Iterator> +TpiStream::types(bool *HadError) const { + return llvm::make_range(TypeRecords.begin(HadError), TypeRecords.end()); } |

