]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/llvm/include/llvm/DebugInfo/CodeView/DebugFrameDataSubsection.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm-project / llvm / include / llvm / DebugInfo / CodeView / DebugFrameDataSubsection.h
1 //===- DebugFrameDataSubsection.h ------------------------------*- 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 #ifndef LLVM_DEBUGINFO_CODEVIEW_DEBUGFRAMEDATASUBSECTION_H
10 #define LLVM_DEBUGINFO_CODEVIEW_DEBUGFRAMEDATASUBSECTION_H
11
12 #include "llvm/DebugInfo/CodeView/CodeView.h"
13 #include "llvm/DebugInfo/CodeView/DebugSubsection.h"
14 #include "llvm/Support/BinaryStreamReader.h"
15 #include "llvm/Support/Endian.h"
16 #include "llvm/Support/Error.h"
17
18 namespace llvm {
19 namespace codeview {
20 class DebugFrameDataSubsectionRef final : public DebugSubsectionRef {
21 public:
22   DebugFrameDataSubsectionRef()
23       : DebugSubsectionRef(DebugSubsectionKind::FrameData) {}
24   static bool classof(const DebugSubsection *S) {
25     return S->kind() == DebugSubsectionKind::FrameData;
26   }
27
28   Error initialize(BinaryStreamReader Reader);
29   Error initialize(BinaryStreamRef Stream);
30
31   FixedStreamArray<FrameData>::Iterator begin() const { return Frames.begin(); }
32   FixedStreamArray<FrameData>::Iterator end() const { return Frames.end(); }
33
34   const support::ulittle32_t *getRelocPtr() const { return RelocPtr; }
35
36 private:
37   const support::ulittle32_t *RelocPtr = nullptr;
38   FixedStreamArray<FrameData> Frames;
39 };
40
41 class DebugFrameDataSubsection final : public DebugSubsection {
42 public:
43   DebugFrameDataSubsection(bool IncludeRelocPtr)
44       : DebugSubsection(DebugSubsectionKind::FrameData),
45         IncludeRelocPtr(IncludeRelocPtr) {}
46   static bool classof(const DebugSubsection *S) {
47     return S->kind() == DebugSubsectionKind::FrameData;
48   }
49
50   uint32_t calculateSerializedSize() const override;
51   Error commit(BinaryStreamWriter &Writer) const override;
52
53   void addFrameData(const FrameData &Frame);
54   void setFrames(ArrayRef<FrameData> Frames);
55
56 private:
57   bool IncludeRelocPtr = false;
58   std::vector<FrameData> Frames;
59 };
60 }
61 }
62
63 #endif