diff options
Diffstat (limited to 'llvm/lib/DebugInfo/PDB/Raw')
| -rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp | 12 | ||||
| -rw-r--r-- | llvm/lib/DebugInfo/PDB/Raw/ModuleSubstreamRecord.cpp | 49 |
2 files changed, 58 insertions, 3 deletions
diff --git a/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp b/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp index b7204cb5afa..a6d1977165f 100644 --- a/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp +++ b/llvm/lib/DebugInfo/PDB/Raw/ModStream.cpp @@ -13,6 +13,7 @@ #include "llvm/DebugInfo/PDB/Raw/ModInfo.h" #include "llvm/DebugInfo/PDB/Raw/PDBFile.h" #include "llvm/DebugInfo/PDB/Raw/RawError.h" +#include "llvm/DebugInfo/PDB/Raw/RawTypes.h" using namespace llvm; using namespace llvm::pdb; @@ -45,9 +46,9 @@ Error ModStream::reload() { return EC; if (auto EC = Reader.readStreamRef(C13LinesSubstream, C13Size)) return EC; - ArrayRef<uint8_t> LineBytes; - codeview::StreamReader LinesReader(C13LinesSubstream); - if (auto EC = LinesReader.readBytes(LineBytes, C13LinesSubstream.getLength())) + + codeview::StreamReader LineReader(C13LinesSubstream); + if (auto EC = LineReader.readArray(LineInfo, LineReader.bytesRemaining())) return EC; uint32_t GlobalRefsSize; @@ -67,3 +68,8 @@ ModStream::symbols(bool *HadError) const { return llvm::make_range(SymbolsSubstream.begin(HadError), SymbolsSubstream.end()); } + +iterator_range<ModStream::LineInfoArray::Iterator> +ModStream::lines(bool *HadError) const { + return llvm::make_range(LineInfo.begin(HadError), LineInfo.end()); +} diff --git a/llvm/lib/DebugInfo/PDB/Raw/ModuleSubstreamRecord.cpp b/llvm/lib/DebugInfo/PDB/Raw/ModuleSubstreamRecord.cpp new file mode 100644 index 00000000000..3e0573bf5ef --- /dev/null +++ b/llvm/lib/DebugInfo/PDB/Raw/ModuleSubstreamRecord.cpp @@ -0,0 +1,49 @@ +//===- ModuleSubstreamRecord.cpp --------------------------------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +#include "llvm/DebugInfo/PDB/Raw/ModuleSubstreamRecord.h" + +#include "llvm/DebugInfo/CodeView/StreamReader.h" +#include "llvm/DebugInfo/PDB/Raw/RawTypes.h" + +using namespace llvm; +using namespace llvm::codeview; +using namespace llvm::pdb; + +ModuleSubstreamRecord::ModuleSubstreamRecord() + : Kind(ModuleSubstreamKind::None) {} + +ModuleSubstreamRecord::ModuleSubstreamRecord(ModuleSubstreamKind Kind, + StreamRef Data) + : Kind(Kind), Data(Data) {} + +Error ModuleSubstreamRecord::initialize(StreamRef Stream, + ModuleSubstreamRecord &Info) { + const ModuleSubsectionHeader *Header; + StreamReader Reader(Stream); + if (auto EC = Reader.readObject(Header)) + return EC; + + ModuleSubstreamKind Kind = + static_cast<ModuleSubstreamKind>(uint32_t(Header->Kind)); + if (auto EC = Reader.readStreamRef(Info.Data, Header->Length)) + return EC; + Info.Kind = Kind; + return Error::success(); +} + +uint32_t ModuleSubstreamRecord::getRecordLength() const { + return sizeof(ModuleSubsectionHeader) + Data.getLength(); +} + +ModuleSubstreamKind ModuleSubstreamRecord::getSubstreamKind() const { + return Kind; +} + +StreamRef ModuleSubstreamRecord::getRecordData() const { return Data; } |

