diff options
Diffstat (limited to 'lib/DebugInfo/PDB/Native/ModuleDebugStream.cpp')
| -rw-r--r-- | lib/DebugInfo/PDB/Native/ModuleDebugStream.cpp | 20 | 
1 files changed, 17 insertions, 3 deletions
diff --git a/lib/DebugInfo/PDB/Native/ModuleDebugStream.cpp b/lib/DebugInfo/PDB/Native/ModuleDebugStream.cpp index 2e1f61c7a25d..8c97f4a012f0 100644 --- a/lib/DebugInfo/PDB/Native/ModuleDebugStream.cpp +++ b/lib/DebugInfo/PDB/Native/ModuleDebugStream.cpp @@ -11,7 +11,9 @@  #include "llvm/ADT/iterator_range.h"  #include "llvm/DebugInfo/CodeView/CodeView.h"  #include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h" +#include "llvm/DebugInfo/CodeView/SymbolDeserializer.h"  #include "llvm/DebugInfo/CodeView/SymbolRecord.h" +#include "llvm/DebugInfo/CodeView/SymbolRecordHelpers.h"  #include "llvm/DebugInfo/PDB/Native/DbiModuleDescriptor.h"  #include "llvm/DebugInfo/PDB/Native/RawError.h"  #include "llvm/Support/BinaryStreamReader.h" @@ -47,7 +49,8 @@ Error ModuleDebugStreamRef::reload() {    if (auto EC = Reader.readInteger(Signature))      return EC; -  if (auto EC = Reader.readSubstream(SymbolsSubstream, SymbolSize - 4)) +  Reader.setOffset(0); +  if (auto EC = Reader.readSubstream(SymbolsSubstream, SymbolSize))      return EC;    if (auto EC = Reader.readSubstream(C11LinesSubstream, C11Size))      return EC; @@ -55,8 +58,8 @@ Error ModuleDebugStreamRef::reload() {      return EC;    BinaryStreamReader SymbolReader(SymbolsSubstream.StreamData); -  if (auto EC = -          SymbolReader.readArray(SymbolArray, SymbolReader.bytesRemaining())) +  if (auto EC = SymbolReader.readArray( +          SymbolArray, SymbolReader.bytesRemaining(), sizeof(uint32_t)))      return EC;    BinaryStreamReader SubsectionsReader(C13LinesSubstream.StreamData); @@ -76,6 +79,11 @@ Error ModuleDebugStreamRef::reload() {    return Error::success();  } +const codeview::CVSymbolArray +ModuleDebugStreamRef::getSymbolArrayForScope(uint32_t ScopeBegin) const { +  return limitSymbolArrayToScope(SymbolArray, ScopeBegin); +} +  BinarySubstreamRef ModuleDebugStreamRef::getSymbolsSubstream() const {    return SymbolsSubstream;  } @@ -97,6 +105,12 @@ ModuleDebugStreamRef::symbols(bool *HadError) const {    return make_range(SymbolArray.begin(HadError), SymbolArray.end());  } +CVSymbol ModuleDebugStreamRef::readSymbolAtOffset(uint32_t Offset) const { +  auto Iter = SymbolArray.at(Offset); +  assert(Iter != SymbolArray.end()); +  return *Iter; +} +  iterator_range<ModuleDebugStreamRef::DebugSubsectionIterator>  ModuleDebugStreamRef::subsections() const {    return make_range(Subsections.begin(), Subsections.end());  | 
