Line data Source code
1 : //===- DebugSubsectionVisitor.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/DebugSubsectionVisitor.h"
11 :
12 : #include "llvm/DebugInfo/CodeView/DebugChecksumsSubsection.h"
13 : #include "llvm/DebugInfo/CodeView/DebugCrossExSubsection.h"
14 : #include "llvm/DebugInfo/CodeView/DebugCrossImpSubsection.h"
15 : #include "llvm/DebugInfo/CodeView/DebugFrameDataSubsection.h"
16 : #include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h"
17 : #include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h"
18 : #include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h"
19 : #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
20 : #include "llvm/DebugInfo/CodeView/DebugSymbolRVASubsection.h"
21 : #include "llvm/DebugInfo/CodeView/DebugSymbolsSubsection.h"
22 : #include "llvm/DebugInfo/CodeView/DebugUnknownSubsection.h"
23 : #include "llvm/Support/BinaryStreamReader.h"
24 : #include "llvm/Support/BinaryStreamRef.h"
25 :
26 : using namespace llvm;
27 : using namespace llvm::codeview;
28 :
29 55 : Error llvm::codeview::visitDebugSubsection(
30 : const DebugSubsectionRecord &R, DebugSubsectionVisitor &V,
31 : const StringsAndChecksumsRef &State) {
32 55 : BinaryStreamReader Reader(R.getRecordData());
33 55 : switch (R.kind()) {
34 14 : case DebugSubsectionKind::Lines: {
35 28 : DebugLinesSubsectionRef Fragment;
36 28 : if (auto EC = Fragment.initialize(Reader))
37 : return EC;
38 :
39 14 : return V.visitLines(Fragment, State);
40 : }
41 : case DebugSubsectionKind::FileChecksums: {
42 10 : DebugChecksumsSubsectionRef Fragment;
43 20 : if (auto EC = Fragment.initialize(Reader))
44 : return EC;
45 :
46 10 : return V.visitFileChecksums(Fragment, State);
47 : }
48 1 : case DebugSubsectionKind::InlineeLines: {
49 2 : DebugInlineeLinesSubsectionRef Fragment;
50 2 : if (auto EC = Fragment.initialize(Reader))
51 : return EC;
52 1 : return V.visitInlineeLines(Fragment, State);
53 : }
54 : case DebugSubsectionKind::CrossScopeExports: {
55 2 : DebugCrossModuleExportsSubsectionRef Section;
56 4 : if (auto EC = Section.initialize(Reader))
57 : return EC;
58 2 : return V.visitCrossModuleExports(Section, State);
59 : }
60 : case DebugSubsectionKind::CrossScopeImports: {
61 1 : DebugCrossModuleImportsSubsectionRef Section;
62 2 : if (auto EC = Section.initialize(Reader))
63 : return EC;
64 1 : return V.visitCrossModuleImports(Section, State);
65 : }
66 : case DebugSubsectionKind::Symbols: {
67 18 : DebugSymbolsSubsectionRef Section;
68 36 : if (auto EC = Section.initialize(Reader))
69 : return EC;
70 18 : return V.visitSymbols(Section, State);
71 : }
72 5 : case DebugSubsectionKind::StringTable: {
73 10 : DebugStringTableSubsectionRef Section;
74 10 : if (auto EC = Section.initialize(Reader))
75 : return EC;
76 5 : return V.visitStringTable(Section, State);
77 : }
78 : case DebugSubsectionKind::FrameData: {
79 4 : DebugFrameDataSubsectionRef Section;
80 8 : if (auto EC = Section.initialize(Reader))
81 : return EC;
82 4 : return V.visitFrameData(Section, State);
83 : }
84 0 : case DebugSubsectionKind::CoffSymbolRVA: {
85 0 : DebugSymbolRVASubsectionRef Section;
86 0 : if (auto EC = Section.initialize(Reader))
87 : return EC;
88 0 : return V.visitCOFFSymbolRVAs(Section, State);
89 : }
90 0 : default: {
91 0 : DebugUnknownSubsectionRef Fragment(R.kind(), R.getRecordData());
92 0 : return V.visitUnknown(Fragment);
93 : }
94 : }
95 : }
|