• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
visitDebugSubsection(const DebugSubsectionRecord & R,DebugSubsectionVisitor & V,const StringsAndChecksumsRef & State)29 Error llvm::codeview::visitDebugSubsection(
30     const DebugSubsectionRecord &R, DebugSubsectionVisitor &V,
31     const StringsAndChecksumsRef &State) {
32   BinaryStreamReader Reader(R.getRecordData());
33   switch (R.kind()) {
34   case DebugSubsectionKind::Lines: {
35     DebugLinesSubsectionRef Fragment;
36     if (auto EC = Fragment.initialize(Reader))
37       return EC;
38 
39     return V.visitLines(Fragment, State);
40   }
41   case DebugSubsectionKind::FileChecksums: {
42     DebugChecksumsSubsectionRef Fragment;
43     if (auto EC = Fragment.initialize(Reader))
44       return EC;
45 
46     return V.visitFileChecksums(Fragment, State);
47   }
48   case DebugSubsectionKind::InlineeLines: {
49     DebugInlineeLinesSubsectionRef Fragment;
50     if (auto EC = Fragment.initialize(Reader))
51       return EC;
52     return V.visitInlineeLines(Fragment, State);
53   }
54   case DebugSubsectionKind::CrossScopeExports: {
55     DebugCrossModuleExportsSubsectionRef Section;
56     if (auto EC = Section.initialize(Reader))
57       return EC;
58     return V.visitCrossModuleExports(Section, State);
59   }
60   case DebugSubsectionKind::CrossScopeImports: {
61     DebugCrossModuleImportsSubsectionRef Section;
62     if (auto EC = Section.initialize(Reader))
63       return EC;
64     return V.visitCrossModuleImports(Section, State);
65   }
66   case DebugSubsectionKind::Symbols: {
67     DebugSymbolsSubsectionRef Section;
68     if (auto EC = Section.initialize(Reader))
69       return EC;
70     return V.visitSymbols(Section, State);
71   }
72   case DebugSubsectionKind::StringTable: {
73     DebugStringTableSubsectionRef Section;
74     if (auto EC = Section.initialize(Reader))
75       return EC;
76     return V.visitStringTable(Section, State);
77   }
78   case DebugSubsectionKind::FrameData: {
79     DebugFrameDataSubsectionRef Section;
80     if (auto EC = Section.initialize(Reader))
81       return EC;
82     return V.visitFrameData(Section, State);
83   }
84   case DebugSubsectionKind::CoffSymbolRVA: {
85     DebugSymbolRVASubsectionRef Section;
86     if (auto EC = Section.initialize(Reader))
87       return EC;
88     return V.visitCOFFSymbolRVAs(Section, State);
89   }
90   default: {
91     DebugUnknownSubsectionRef Fragment(R.kind(), R.getRecordData());
92     return V.visitUnknown(Fragment);
93   }
94   }
95 }
96