diff options
Diffstat (limited to 'contrib/llvm/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp')
-rw-r--r-- | contrib/llvm/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/contrib/llvm/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp b/contrib/llvm/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp new file mode 100644 index 0000000..6f237ee --- /dev/null +++ b/contrib/llvm/lib/DebugInfo/CodeView/ModuleSubstreamVisitor.cpp @@ -0,0 +1,104 @@ +//===- ModuleSubstreamVisitor.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/CodeView/ModuleSubstreamVisitor.h" + +using namespace llvm; +using namespace llvm::codeview; + +Error IModuleSubstreamVisitor::visitSymbols(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::Symbols, Data); +} +Error IModuleSubstreamVisitor::visitLines(StreamRef Data, + const LineSubstreamHeader *Header, + const LineInfoArray &Lines) { + return visitUnknown(ModuleSubstreamKind::Lines, Data); +} +Error IModuleSubstreamVisitor::visitStringTable(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::StringTable, Data); +} +Error IModuleSubstreamVisitor::visitFileChecksums( + StreamRef Data, const FileChecksumArray &Checksums) { + return visitUnknown(ModuleSubstreamKind::FileChecksums, Data); +} +Error IModuleSubstreamVisitor::visitFrameData(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::FrameData, Data); +} +Error IModuleSubstreamVisitor::visitInlineeLines(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::InlineeLines, Data); +} +Error IModuleSubstreamVisitor::visitCrossScopeImports(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::CrossScopeExports, Data); +} +Error IModuleSubstreamVisitor::visitCrossScopeExports(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::CrossScopeImports, Data); +} +Error IModuleSubstreamVisitor::visitILLines(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::ILLines, Data); +} +Error IModuleSubstreamVisitor::visitFuncMDTokenMap(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::FuncMDTokenMap, Data); +} +Error IModuleSubstreamVisitor::visitTypeMDTokenMap(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::TypeMDTokenMap, Data); +} +Error IModuleSubstreamVisitor::visitMergedAssemblyInput(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::MergedAssemblyInput, Data); +} +Error IModuleSubstreamVisitor::visitCoffSymbolRVA(StreamRef Data) { + return visitUnknown(ModuleSubstreamKind::CoffSymbolRVA, Data); +} + +Error llvm::codeview::visitModuleSubstream(const ModuleSubstream &R, + IModuleSubstreamVisitor &V) { + switch (R.getSubstreamKind()) { + case ModuleSubstreamKind::Symbols: + return V.visitSymbols(R.getRecordData()); + case ModuleSubstreamKind::Lines: { + StreamReader Reader(R.getRecordData()); + const LineSubstreamHeader *Header; + if (auto EC = Reader.readObject(Header)) + return EC; + VarStreamArrayExtractor<LineColumnEntry> E(Header); + LineInfoArray LineInfos(E); + if (auto EC = Reader.readArray(LineInfos, Reader.bytesRemaining())) + return EC; + return V.visitLines(R.getRecordData(), Header, LineInfos); + } + case ModuleSubstreamKind::StringTable: + return V.visitStringTable(R.getRecordData()); + case ModuleSubstreamKind::FileChecksums: { + StreamReader Reader(R.getRecordData()); + FileChecksumArray Checksums; + if (auto EC = Reader.readArray(Checksums, Reader.bytesRemaining())) + return EC; + return V.visitFileChecksums(R.getRecordData(), Checksums); + } + case ModuleSubstreamKind::FrameData: + return V.visitFrameData(R.getRecordData()); + case ModuleSubstreamKind::InlineeLines: + return V.visitInlineeLines(R.getRecordData()); + case ModuleSubstreamKind::CrossScopeImports: + return V.visitCrossScopeImports(R.getRecordData()); + case ModuleSubstreamKind::CrossScopeExports: + return V.visitCrossScopeExports(R.getRecordData()); + case ModuleSubstreamKind::ILLines: + return V.visitILLines(R.getRecordData()); + case ModuleSubstreamKind::FuncMDTokenMap: + return V.visitFuncMDTokenMap(R.getRecordData()); + case ModuleSubstreamKind::TypeMDTokenMap: + return V.visitTypeMDTokenMap(R.getRecordData()); + case ModuleSubstreamKind::MergedAssemblyInput: + return V.visitMergedAssemblyInput(R.getRecordData()); + case ModuleSubstreamKind::CoffSymbolRVA: + return V.visitCoffSymbolRVA(R.getRecordData()); + default: + return V.visitUnknown(R.getSubstreamKind(), R.getRecordData()); + } +} |