Line data Source code
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 : #include "llvm/Support/BinaryStreamReader.h"
12 : #include "llvm/Support/BinaryStreamRef.h"
13 :
14 : using namespace llvm;
15 : using namespace llvm::codeview;
16 :
17 0 : Error IModuleSubstreamVisitor::visitSymbols(BinaryStreamRef Data) {
18 0 : return visitUnknown(ModuleSubstreamKind::Symbols, Data);
19 : }
20 0 : Error IModuleSubstreamVisitor::visitLines(BinaryStreamRef Data,
21 : const LineSubstreamHeader *Header,
22 : const LineInfoArray &Lines) {
23 0 : return visitUnknown(ModuleSubstreamKind::Lines, Data);
24 : }
25 0 : Error IModuleSubstreamVisitor::visitStringTable(BinaryStreamRef Data) {
26 0 : return visitUnknown(ModuleSubstreamKind::StringTable, Data);
27 : }
28 0 : Error IModuleSubstreamVisitor::visitFileChecksums(
29 : BinaryStreamRef Data, const FileChecksumArray &Checksums) {
30 0 : return visitUnknown(ModuleSubstreamKind::FileChecksums, Data);
31 : }
32 0 : Error IModuleSubstreamVisitor::visitFrameData(BinaryStreamRef Data) {
33 0 : return visitUnknown(ModuleSubstreamKind::FrameData, Data);
34 : }
35 0 : Error IModuleSubstreamVisitor::visitInlineeLines(BinaryStreamRef Data) {
36 0 : return visitUnknown(ModuleSubstreamKind::InlineeLines, Data);
37 : }
38 0 : Error IModuleSubstreamVisitor::visitCrossScopeImports(BinaryStreamRef Data) {
39 0 : return visitUnknown(ModuleSubstreamKind::CrossScopeExports, Data);
40 : }
41 0 : Error IModuleSubstreamVisitor::visitCrossScopeExports(BinaryStreamRef Data) {
42 0 : return visitUnknown(ModuleSubstreamKind::CrossScopeImports, Data);
43 : }
44 0 : Error IModuleSubstreamVisitor::visitILLines(BinaryStreamRef Data) {
45 0 : return visitUnknown(ModuleSubstreamKind::ILLines, Data);
46 : }
47 0 : Error IModuleSubstreamVisitor::visitFuncMDTokenMap(BinaryStreamRef Data) {
48 0 : return visitUnknown(ModuleSubstreamKind::FuncMDTokenMap, Data);
49 : }
50 0 : Error IModuleSubstreamVisitor::visitTypeMDTokenMap(BinaryStreamRef Data) {
51 0 : return visitUnknown(ModuleSubstreamKind::TypeMDTokenMap, Data);
52 : }
53 0 : Error IModuleSubstreamVisitor::visitMergedAssemblyInput(BinaryStreamRef Data) {
54 0 : return visitUnknown(ModuleSubstreamKind::MergedAssemblyInput, Data);
55 : }
56 0 : Error IModuleSubstreamVisitor::visitCoffSymbolRVA(BinaryStreamRef Data) {
57 0 : return visitUnknown(ModuleSubstreamKind::CoffSymbolRVA, Data);
58 : }
59 :
60 6 : Error llvm::codeview::visitModuleSubstream(const ModuleSubstream &R,
61 : IModuleSubstreamVisitor &V) {
62 6 : switch (R.getSubstreamKind()) {
63 : case ModuleSubstreamKind::Symbols:
64 0 : return V.visitSymbols(R.getRecordData());
65 : case ModuleSubstreamKind::Lines: {
66 6 : BinaryStreamReader Reader(R.getRecordData());
67 : const LineSubstreamHeader *Header;
68 9 : if (auto EC = Reader.readObject(Header))
69 0 : return EC;
70 6 : VarStreamArrayExtractor<LineColumnEntry> E(Header);
71 3 : LineInfoArray LineInfos(E);
72 9 : if (auto EC = Reader.readArray(LineInfos, Reader.bytesRemaining()))
73 0 : return EC;
74 3 : return V.visitLines(R.getRecordData(), Header, LineInfos);
75 : }
76 : case ModuleSubstreamKind::StringTable:
77 0 : return V.visitStringTable(R.getRecordData());
78 : case ModuleSubstreamKind::FileChecksums: {
79 6 : BinaryStreamReader Reader(R.getRecordData());
80 3 : FileChecksumArray Checksums;
81 9 : if (auto EC = Reader.readArray(Checksums, Reader.bytesRemaining()))
82 0 : return EC;
83 3 : return V.visitFileChecksums(R.getRecordData(), Checksums);
84 : }
85 : case ModuleSubstreamKind::FrameData:
86 0 : return V.visitFrameData(R.getRecordData());
87 : case ModuleSubstreamKind::InlineeLines:
88 0 : return V.visitInlineeLines(R.getRecordData());
89 : case ModuleSubstreamKind::CrossScopeImports:
90 0 : return V.visitCrossScopeImports(R.getRecordData());
91 : case ModuleSubstreamKind::CrossScopeExports:
92 0 : return V.visitCrossScopeExports(R.getRecordData());
93 : case ModuleSubstreamKind::ILLines:
94 0 : return V.visitILLines(R.getRecordData());
95 : case ModuleSubstreamKind::FuncMDTokenMap:
96 0 : return V.visitFuncMDTokenMap(R.getRecordData());
97 : case ModuleSubstreamKind::TypeMDTokenMap:
98 0 : return V.visitTypeMDTokenMap(R.getRecordData());
99 : case ModuleSubstreamKind::MergedAssemblyInput:
100 0 : return V.visitMergedAssemblyInput(R.getRecordData());
101 : case ModuleSubstreamKind::CoffSymbolRVA:
102 0 : return V.visitCoffSymbolRVA(R.getRecordData());
103 : default:
104 0 : return V.visitUnknown(R.getSubstreamKind(), R.getRecordData());
105 : }
106 : }
|