Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
14 pmbaty 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
struct DebugSubsectionState {};
119
 
120
Expected<std::vector<std::shared_ptr<codeview::DebugSubsection>>>
121
toCodeViewSubsectionList(BumpPtrAllocator &Allocator,
122
                         ArrayRef<YAMLDebugSubsection> Subsections,
123
                         const codeview::StringsAndChecksums &SC);
124
 
125
std::vector<YAMLDebugSubsection>
126
fromDebugS(ArrayRef<uint8_t> Data, const codeview::StringsAndChecksumsRef &SC);
127
 
128
void initializeStringsAndChecksums(ArrayRef<YAMLDebugSubsection> Sections,
129
                                   codeview::StringsAndChecksums &SC);
130
 
131
} // end namespace CodeViewYAML
132
 
133
} // end namespace llvm
134
 
135
LLVM_YAML_DECLARE_MAPPING_TRAITS(CodeViewYAML::YAMLDebugSubsection)
136
 
137
LLVM_YAML_IS_SEQUENCE_VECTOR(CodeViewYAML::YAMLDebugSubsection)
138
 
139
#endif // LLVM_OBJECTYAML_CODEVIEWYAMLDEBUGSECTIONS_H