Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/llvm/lib/DebugInfo/CodeView/DebugSubsectionVisitor.cpp
35271 views
1
//===- DebugSubsectionVisitor.cpp -------------------------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
9
#include "llvm/DebugInfo/CodeView/DebugSubsectionVisitor.h"
10
11
#include "llvm/DebugInfo/CodeView/CodeView.h"
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/SwapByteOrder.h"
25
26
using namespace llvm;
27
using namespace llvm::codeview;
28
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
97