Line data Source code
1 : //=- CodeViewYAMLDebugSections.h - CodeView YAMLIO debug sections -*- 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 : // This file defines classes for handling the YAML representation of CodeView
11 : // Debug Info.
12 : //
13 : //===----------------------------------------------------------------------===//
14 :
15 : #ifndef LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H
16 : #define LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H
17 :
18 : #include "llvm/ADT/ArrayRef.h"
19 : #include "llvm/ADT/StringRef.h"
20 : #include "llvm/DebugInfo/CodeView/CodeView.h"
21 : #include "llvm/DebugInfo/CodeView/DebugSubsection.h"
22 : #include "llvm/DebugInfo/CodeView/DebugSubsectionRecord.h"
23 : #include "llvm/Support/Error.h"
24 : #include "llvm/Support/YAMLTraits.h"
25 : #include <cstdint>
26 : #include <memory>
27 : #include <vector>
28 :
29 : namespace llvm {
30 :
31 : namespace codeview {
32 :
33 : class StringsAndChecksums;
34 : class StringsAndChecksumsRef;
35 :
36 : } // end namespace codeview
37 :
38 : namespace CodeViewYAML {
39 :
40 : namespace detail {
41 :
42 : struct YAMLSubsectionBase;
43 :
44 : } // end namespace detail
45 :
46 : struct YAMLFrameData {
47 : uint32_t RvaStart;
48 : uint32_t CodeSize;
49 : uint32_t LocalSize;
50 : uint32_t ParamsSize;
51 : uint32_t MaxStackSize;
52 : StringRef FrameFunc;
53 : uint32_t PrologSize;
54 : uint32_t SavedRegsSize;
55 : uint32_t Flags;
56 : };
57 :
58 3 : struct YAMLCrossModuleImport {
59 : StringRef ModuleName;
60 : std::vector<uint32_t> ImportIds;
61 : };
62 :
63 : struct SourceLineEntry {
64 : uint32_t Offset;
65 : uint32_t LineStart;
66 : uint32_t EndDelta;
67 : bool IsStatement;
68 : };
69 :
70 : struct SourceColumnEntry {
71 : uint16_t StartColumn;
72 : uint16_t EndColumn;
73 : };
74 :
75 14 : struct SourceLineBlock {
76 : StringRef FileName;
77 : std::vector<SourceLineEntry> Lines;
78 : std::vector<SourceColumnEntry> Columns;
79 : };
80 :
81 16 : struct HexFormattedString {
82 : std::vector<uint8_t> Bytes;
83 : };
84 :
85 154 : struct SourceFileChecksumEntry {
86 : StringRef FileName;
87 : codeview::FileChecksumKind Kind;
88 : HexFormattedString ChecksumBytes;
89 : };
90 :
91 74 : struct SourceLineInfo {
92 : uint32_t RelocOffset;
93 : uint32_t RelocSegment;
94 : codeview::LineFlags Flags;
95 : uint32_t CodeSize;
96 : std::vector<SourceLineBlock> Blocks;
97 : };
98 :
99 4 : struct InlineeSite {
100 : uint32_t Inlinee;
101 : StringRef FileName;
102 : uint32_t SourceLineNum;
103 : std::vector<StringRef> ExtraFiles;
104 : };
105 :
106 3 : struct InlineeInfo {
107 : bool HasExtraFiles;
108 : std::vector<InlineeSite> Sites;
109 : };
110 :
111 1424 : struct YAMLDebugSubsection {
112 : static Expected<YAMLDebugSubsection>
113 : fromCodeViewSubection(const codeview::StringsAndChecksumsRef &SC,
114 : const codeview::DebugSubsectionRecord &SS);
115 :
116 : std::shared_ptr<detail::YAMLSubsectionBase> Subsection;
117 : };
118 :
119 : struct DebugSubsectionState {};
120 :
121 : Expected<std::vector<std::shared_ptr<codeview::DebugSubsection>>>
122 : toCodeViewSubsectionList(BumpPtrAllocator &Allocator,
123 : ArrayRef<YAMLDebugSubsection> Subsections,
124 : const codeview::StringsAndChecksums &SC);
125 :
126 : std::vector<YAMLDebugSubsection>
127 : fromDebugS(ArrayRef<uint8_t> Data, const codeview::StringsAndChecksumsRef &SC);
128 :
129 : void initializeStringsAndChecksums(ArrayRef<YAMLDebugSubsection> Sections,
130 : codeview::StringsAndChecksums &SC);
131 :
132 : } // end namespace CodeViewYAML
133 :
134 : } // end namespace llvm
135 :
136 : LLVM_YAML_DECLARE_MAPPING_TRAITS(CodeViewYAML::YAMLDebugSubsection)
137 :
138 : LLVM_YAML_IS_SEQUENCE_VECTOR(CodeViewYAML::YAMLDebugSubsection)
139 :
140 : #endif // LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H
|