1 //===- ModuleSubstreamVisitor.cpp -------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "llvm/DebugInfo/CodeView/ModuleSubstreamVisitor.h" 11 12 using namespace llvm; 13 using namespace llvm::codeview; 14 15 Error IModuleSubstreamVisitor::visitSymbols(StreamRef Data) { 16 return visitUnknown(ModuleSubstreamKind::Symbols, Data); 17 } 18 Error IModuleSubstreamVisitor::visitLines(StreamRef Data, 19 const LineSubstreamHeader *Header, 20 const LineInfoArray &Lines) { 21 return visitUnknown(ModuleSubstreamKind::Lines, Data); 22 } 23 Error IModuleSubstreamVisitor::visitStringTable(StreamRef Data) { 24 return visitUnknown(ModuleSubstreamKind::StringTable, Data); 25 } 26 Error IModuleSubstreamVisitor::visitFileChecksums( 27 StreamRef Data, const FileChecksumArray &Checksums) { 28 return visitUnknown(ModuleSubstreamKind::FileChecksums, Data); 29 } 30 Error IModuleSubstreamVisitor::visitFrameData(StreamRef Data) { 31 return visitUnknown(ModuleSubstreamKind::FrameData, Data); 32 } 33 Error IModuleSubstreamVisitor::visitInlineeLines(StreamRef Data) { 34 return visitUnknown(ModuleSubstreamKind::InlineeLines, Data); 35 } 36 Error IModuleSubstreamVisitor::visitCrossScopeImports(StreamRef Data) { 37 return visitUnknown(ModuleSubstreamKind::CrossScopeExports, Data); 38 } 39 Error IModuleSubstreamVisitor::visitCrossScopeExports(StreamRef Data) { 40 return visitUnknown(ModuleSubstreamKind::CrossScopeImports, Data); 41 } 42 Error IModuleSubstreamVisitor::visitILLines(StreamRef Data) { 43 return visitUnknown(ModuleSubstreamKind::ILLines, Data); 44 } 45 Error IModuleSubstreamVisitor::visitFuncMDTokenMap(StreamRef Data) { 46 return visitUnknown(ModuleSubstreamKind::FuncMDTokenMap, Data); 47 } 48 Error IModuleSubstreamVisitor::visitTypeMDTokenMap(StreamRef Data) { 49 return visitUnknown(ModuleSubstreamKind::TypeMDTokenMap, Data); 50 } 51 Error IModuleSubstreamVisitor::visitMergedAssemblyInput(StreamRef Data) { 52 return visitUnknown(ModuleSubstreamKind::MergedAssemblyInput, Data); 53 } 54 Error IModuleSubstreamVisitor::visitCoffSymbolRVA(StreamRef Data) { 55 return visitUnknown(ModuleSubstreamKind::CoffSymbolRVA, Data); 56 } 57 58 Error llvm::codeview::visitModuleSubstream(const ModuleSubstream &R, 59 IModuleSubstreamVisitor &V) { 60 switch (R.getSubstreamKind()) { 61 case ModuleSubstreamKind::Symbols: 62 return V.visitSymbols(R.getRecordData()); 63 case ModuleSubstreamKind::Lines: { 64 StreamReader Reader(R.getRecordData()); 65 const LineSubstreamHeader *Header; 66 if (auto EC = Reader.readObject(Header)) 67 return EC; 68 VarStreamArrayExtractor<LineColumnEntry> E(Header); 69 LineInfoArray LineInfos(E); 70 if (auto EC = Reader.readArray(LineInfos, Reader.bytesRemaining())) 71 return EC; 72 return V.visitLines(R.getRecordData(), Header, LineInfos); 73 } 74 case ModuleSubstreamKind::StringTable: 75 return V.visitStringTable(R.getRecordData()); 76 case ModuleSubstreamKind::FileChecksums: { 77 StreamReader Reader(R.getRecordData()); 78 FileChecksumArray Checksums; 79 if (auto EC = Reader.readArray(Checksums, Reader.bytesRemaining())) 80 return EC; 81 return V.visitFileChecksums(R.getRecordData(), Checksums); 82 } 83 case ModuleSubstreamKind::FrameData: 84 return V.visitFrameData(R.getRecordData()); 85 case ModuleSubstreamKind::InlineeLines: 86 return V.visitInlineeLines(R.getRecordData()); 87 case ModuleSubstreamKind::CrossScopeImports: 88 return V.visitCrossScopeImports(R.getRecordData()); 89 case ModuleSubstreamKind::CrossScopeExports: 90 return V.visitCrossScopeExports(R.getRecordData()); 91 case ModuleSubstreamKind::ILLines: 92 return V.visitILLines(R.getRecordData()); 93 case ModuleSubstreamKind::FuncMDTokenMap: 94 return V.visitFuncMDTokenMap(R.getRecordData()); 95 case ModuleSubstreamKind::TypeMDTokenMap: 96 return V.visitTypeMDTokenMap(R.getRecordData()); 97 case ModuleSubstreamKind::MergedAssemblyInput: 98 return V.visitMergedAssemblyInput(R.getRecordData()); 99 case ModuleSubstreamKind::CoffSymbolRVA: 100 return V.visitCoffSymbolRVA(R.getRecordData()); 101 default: 102 return V.visitUnknown(R.getSubstreamKind(), R.getRecordData()); 103 } 104 } 105