1 //===- SymbolStream.cpp - PDB Symbol Stream Access ------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "llvm/DebugInfo/PDB/Native/SymbolStream.h"
10 
11 #include "llvm/DebugInfo/MSF/MappedBlockStream.h"
12 #include "llvm/Support/Endian.h"
13 
14 using namespace llvm;
15 using namespace llvm::msf;
16 using namespace llvm::support;
17 using namespace llvm::pdb;
18 
19 SymbolStream::SymbolStream(std::unique_ptr<MappedBlockStream> Stream)
20     : Stream(std::move(Stream)) {}
21 
22 SymbolStream::~SymbolStream() = default;
23 
24 Error SymbolStream::reload() {
25   BinaryStreamReader Reader(*Stream);
26 
27   if (auto EC = Reader.readArray(SymbolRecords, Stream->getLength()))
28     return EC;
29 
30   return Error::success();
31 }
32 
33 iterator_range<codeview::CVSymbolArray::Iterator>
34 SymbolStream::getSymbols(bool *HadError) const {
35   return llvm::make_range(SymbolRecords.begin(HadError), SymbolRecords.end());
36 }
37 
38 Error SymbolStream::commit() { return Error::success(); }
39 
40 codeview::CVSymbol SymbolStream::readRecord(uint32_t Offset) const {
41   return *SymbolRecords.at(Offset);
42 }
43