blob: 9b824333369be31b38741eac83ea3b03db87e109 [file] [log] [blame]
Zachary Turnerdeb39132017-06-09 00:28:08 +00001//===- DebugSubsectionVisitor.cpp -------------------------------*- C++ -*-===//
Zachary Turner8c099fe2017-05-30 16:36:15 +00002//
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"
Zachary Turner349c18f2017-06-05 21:40:33 +000013#include "llvm/DebugInfo/CodeView/DebugCrossExSubsection.h"
14#include "llvm/DebugInfo/CodeView/DebugCrossImpSubsection.h"
Zachary Turnerdeb39132017-06-09 00:28:08 +000015#include "llvm/DebugInfo/CodeView/DebugFrameDataSubsection.h"
Zachary Turner8c099fe2017-05-30 16:36:15 +000016#include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h"
17#include "llvm/DebugInfo/CodeView/DebugLinesSubsection.h"
Zachary Turner1bf77622017-06-08 23:49:01 +000018#include "llvm/DebugInfo/CodeView/DebugStringTableSubsection.h"
Zachary Turner8c099fe2017-05-30 16:36:15 +000019#include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
Zachary Turner3226fe92017-06-09 20:46:52 +000020#include "llvm/DebugInfo/CodeView/DebugSymbolRVASubsection.h"
Zachary Turnerdeb39132017-06-09 00:28:08 +000021#include "llvm/DebugInfo/CodeView/DebugSymbolsSubsection.h"
Zachary Turner8c099fe2017-05-30 16:36:15 +000022#include "llvm/DebugInfo/CodeView/DebugUnknownSubsection.h"
23#include "llvm/Support/BinaryStreamReader.h"
24#include "llvm/Support/BinaryStreamRef.h"
25
26using namespace llvm;
27using namespace llvm::codeview;
28
Zachary Turnera8cfc292017-06-14 15:59:27 +000029Error llvm::codeview::visitDebugSubsection(
30 const DebugSubsectionRecord &R, DebugSubsectionVisitor &V,
31 const StringsAndChecksumsRef &State) {
Zachary Turner8c099fe2017-05-30 16:36:15 +000032 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
Zachary Turner1bf77622017-06-08 23:49:01 +000039 return V.visitLines(Fragment, State);
Zachary Turner8c099fe2017-05-30 16:36:15 +000040 }
41 case DebugSubsectionKind::FileChecksums: {
42 DebugChecksumsSubsectionRef Fragment;
43 if (auto EC = Fragment.initialize(Reader))
44 return EC;
45
Zachary Turner1bf77622017-06-08 23:49:01 +000046 return V.visitFileChecksums(Fragment, State);
Zachary Turner8c099fe2017-05-30 16:36:15 +000047 }
48 case DebugSubsectionKind::InlineeLines: {
49 DebugInlineeLinesSubsectionRef Fragment;
50 if (auto EC = Fragment.initialize(Reader))
51 return EC;
Zachary Turner1bf77622017-06-08 23:49:01 +000052 return V.visitInlineeLines(Fragment, State);
Zachary Turner8c099fe2017-05-30 16:36:15 +000053 }
Zachary Turner349c18f2017-06-05 21:40:33 +000054 case DebugSubsectionKind::CrossScopeExports: {
55 DebugCrossModuleExportsSubsectionRef Section;
56 if (auto EC = Section.initialize(Reader))
57 return EC;
Zachary Turner1bf77622017-06-08 23:49:01 +000058 return V.visitCrossModuleExports(Section, State);
Zachary Turner349c18f2017-06-05 21:40:33 +000059 }
60 case DebugSubsectionKind::CrossScopeImports: {
61 DebugCrossModuleImportsSubsectionRef Section;
62 if (auto EC = Section.initialize(Reader))
63 return EC;
Zachary Turner1bf77622017-06-08 23:49:01 +000064 return V.visitCrossModuleImports(Section, State);
Zachary Turner349c18f2017-06-05 21:40:33 +000065 }
Zachary Turnerdeb39132017-06-09 00:28:08 +000066 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 }
Zachary Turner3226fe92017-06-09 20:46:52 +000084 case DebugSubsectionKind::CoffSymbolRVA: {
85 DebugSymbolRVASubsectionRef Section;
86 if (auto EC = Section.initialize(Reader))
87 return EC;
88 return V.visitCOFFSymbolRVAs(Section, State);
89 }
Zachary Turner8c099fe2017-05-30 16:36:15 +000090 default: {
91 DebugUnknownSubsectionRef Fragment(R.kind(), R.getRecordData());
92 return V.visitUnknown(Fragment);
93 }
94 }
95}