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