LLVM  13.0.0git
DebugInlineeLinesSubsection.h
Go to the documentation of this file.
1 //===- DebugInlineeLinesSubsection.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_DEBUGINLINEELINESSUBSECTION_H
10 #define LLVM_DEBUGINFO_CODEVIEW_DEBUGINLINEELINESSUBSECTION_H
11 
12 #include "llvm/ADT/StringRef.h"
20 #include "llvm/Support/Endian.h"
21 #include "llvm/Support/Error.h"
22 #include <cstdint>
23 #include <vector>
24 
25 namespace llvm {
26 
27 namespace codeview {
28 
29 class DebugChecksumsSubsection;
30 
32  Normal, // CV_INLINEE_SOURCE_LINE_SIGNATURE
33  ExtraFiles // CV_INLINEE_SOURCE_LINE_SIGNATURE_EX
34 };
35 
37  TypeIndex Inlinee; // ID of the function that was inlined.
38  support::ulittle32_t FileID; // Offset into FileChecksums subsection.
39  support::ulittle32_t SourceLineNum; // First line of inlined code.
40  // If extra files present:
41  // ulittle32_t ExtraFileCount;
42  // ulittle32_t Files[];
43 };
44 
48 };
49 
50 } // end namespace codeview
51 
52 template <> struct VarStreamArrayExtractor<codeview::InlineeSourceLine> {
55 
56  bool HasExtraFiles = false;
57 };
58 
59 namespace codeview {
60 
64 
65 public:
67 
68  static bool classof(const DebugSubsectionRef *S) {
69  return S->kind() == DebugSubsectionKind::InlineeLines;
70  }
71 
75  }
76 
77  bool valid() const { return Lines.valid(); }
78  bool hasExtraFiles() const;
79 
80  Iterator begin() const { return Lines.begin(); }
81  Iterator end() const { return Lines.end(); }
82 
83 private:
84  InlineeLinesSignature Signature;
85  LinesArray Lines;
86 };
87 
89 public:
90  struct Entry {
91  std::vector<support::ulittle32_t> ExtraFiles;
93  };
94 
96  bool HasExtraFiles = false);
97 
98  static bool classof(const DebugSubsection *S) {
99  return S->kind() == DebugSubsectionKind::InlineeLines;
100  }
101 
102  Error commit(BinaryStreamWriter &Writer) const override;
103  uint32_t calculateSerializedSize() const override;
104 
105  void addInlineSite(TypeIndex FuncId, StringRef FileName, uint32_t SourceLine);
106  void addExtraFile(StringRef FileName);
107 
108  bool hasExtraFiles() const { return HasExtraFiles; }
109  void setHasExtraFiles(bool Has) { HasExtraFiles = Has; }
110 
111  std::vector<Entry>::const_iterator begin() const { return Entries.begin(); }
112  std::vector<Entry>::const_iterator end() const { return Entries.end(); }
113 
114 private:
115  DebugChecksumsSubsection &Checksums;
116  bool HasExtraFiles = false;
117  uint32_t ExtraFileCount = 0;
118  std::vector<Entry> Entries;
119 };
120 
121 } // end namespace codeview
122 
123 } // end namespace llvm
124 
125 #endif // LLVM_DEBUGINFO_CODEVIEW_DEBUGINLINEELINESSUBSECTION_H
llvm::codeview::DebugInlineeLinesSubsection::begin
std::vector< Entry >::const_iterator begin() const
Definition: DebugInlineeLinesSubsection.h:111
BinaryStreamReader.h
llvm::codeview::DebugInlineeLinesSubsection::calculateSerializedSize
uint32_t calculateSerializedSize() const override
Definition: DebugInlineeLinesSubsection.cpp:66
llvm::codeview::InlineeSourceLine
Definition: DebugInlineeLinesSubsection.h:45
llvm::codeview::DebugSubsectionKind::InlineeLines
@ InlineeLines
llvm
Definition: AllocatorList.h:23
llvm::codeview::DebugChecksumsSubsection
Definition: DebugChecksumsSubsection.h:75
llvm::support::detail::packed_endian_specific_integral
Definition: Endian.h:206
StringRef.h
llvm::BinaryStreamWriter
Provides write only access to a subclass of WritableBinaryStream.
Definition: BinaryStreamWriter.h:31
Error.h
llvm::codeview::DebugInlineeLinesSubsection::setHasExtraFiles
void setHasExtraFiles(bool Has)
Definition: DebugInlineeLinesSubsection.h:109
llvm::codeview::DebugInlineeLinesSubsectionRef::classof
static bool classof(const DebugSubsectionRef *S)
Definition: DebugInlineeLinesSubsection.h:68
llvm::codeview::DebugInlineeLinesSubsection::classof
static bool classof(const DebugSubsection *S)
Definition: DebugInlineeLinesSubsection.h:98
llvm::codeview::InlineeLinesSignature::ExtraFiles
@ ExtraFiles
llvm::VarStreamArray::end
Iterator end() const
Definition: BinaryStreamArray.h:115
llvm::VarStreamArrayExtractor
VarStreamArrayExtractor is intended to be specialized to provide customized extraction logic.
Definition: BinaryStreamArray.h:47
llvm::codeview::DebugInlineeLinesSubsectionRef::initialize
Error initialize(BinaryStreamRef Section)
Definition: DebugInlineeLinesSubsection.h:73
llvm::FixedStreamArray< support::ulittle32_t >
llvm::codeview::InlineeSourceLine::Header
const InlineeSourceLineHeader * Header
Definition: DebugInlineeLinesSubsection.h:46
llvm::codeview::InlineeSourceLineHeader::FileID
support::ulittle32_t FileID
Definition: DebugInlineeLinesSubsection.h:38
llvm::ARMBuildAttrs::Section
@ Section
Legacy Tags.
Definition: ARMBuildAttributes.h:78
llvm::codeview::DebugInlineeLinesSubsectionRef::initialize
Error initialize(BinaryStreamReader Reader)
Definition: DebugInlineeLinesSubsection.cpp:45
llvm::codeview::InlineeLinesSignature
InlineeLinesSignature
Definition: DebugInlineeLinesSubsection.h:31
llvm::VarStreamArray< InlineeSourceLine >
llvm::codeview::DebugSubsectionRef
Definition: DebugSubsection.h:19
llvm::codeview::DebugInlineeLinesSubsection
Definition: DebugInlineeLinesSubsection.h:88
llvm::codeview::InlineeSourceLineHeader
Definition: DebugInlineeLinesSubsection.h:36
llvm::VarStreamArray< InlineeSourceLine >::Iterator
VarStreamArrayIterator< InlineeSourceLine, VarStreamArrayExtractor< InlineeSourceLine > > Iterator
Definition: BinaryStreamArray.h:96
llvm::VarStreamArrayExtractor::operator()
Error operator()(BinaryStreamRef Stream, uint32_t &Len, T &Item) const =delete
Definition: DebugChecksumsSubsection.cpp:35
llvm::codeview::DebugInlineeLinesSubsectionRef::hasExtraFiles
bool hasExtraFiles() const
Definition: DebugInlineeLinesSubsection.cpp:57
llvm::codeview::DebugInlineeLinesSubsectionRef::begin
Iterator begin() const
Definition: DebugInlineeLinesSubsection.h:80
llvm::codeview::DebugInlineeLinesSubsection::Entry::ExtraFiles
std::vector< support::ulittle32_t > ExtraFiles
Definition: DebugInlineeLinesSubsection.h:91
llvm::codeview::InlineeSourceLine::ExtraFiles
FixedStreamArray< support::ulittle32_t > ExtraFiles
Definition: DebugInlineeLinesSubsection.h:47
CodeView.h
llvm::codeview::DebugInlineeLinesSubsectionRef::end
Iterator end() const
Definition: DebugInlineeLinesSubsection.h:81
llvm::BinaryStreamReader
Provides read only access to a subclass of BinaryStream.
Definition: BinaryStreamReader.h:31
Line.h
DebugSubsection.h
llvm::codeview::InlineeSourceLineHeader::SourceLineNum
support::ulittle32_t SourceLineNum
Definition: DebugInlineeLinesSubsection.h:39
FuncId
Profile::FuncID FuncId
Definition: Profile.cpp:321
BinaryStreamArray.h
llvm::VarStreamArrayIterator
VarStreamArray represents an array of variable length records backed by a stream.
Definition: BinaryStreamArray.h:88
llvm::codeview::DebugInlineeLinesSubsection::end
std::vector< Entry >::const_iterator end() const
Definition: DebugInlineeLinesSubsection.h:112
llvm::codeview::DebugInlineeLinesSubsection::addInlineSite
void addInlineSite(TypeIndex FuncId, StringRef FileName, uint32_t SourceLine)
Definition: DebugInlineeLinesSubsection.cpp:115
llvm::codeview::DebugInlineeLinesSubsection::hasExtraFiles
bool hasExtraFiles() const
Definition: DebugInlineeLinesSubsection.h:108
llvm::codeview::DebugInlineeLinesSubsection::Entry
Definition: DebugInlineeLinesSubsection.h:90
llvm::StringRef
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:58
BinaryStreamRef.h
uint32_t
llvm::codeview::DebugInlineeLinesSubsection::DebugInlineeLinesSubsection
DebugInlineeLinesSubsection(DebugChecksumsSubsection &Checksums, bool HasExtraFiles=false)
Definition: DebugInlineeLinesSubsection.cpp:61
llvm::codeview::DebugInlineeLinesSubsection::Entry::Header
InlineeSourceLineHeader Header
Definition: DebugInlineeLinesSubsection.h:92
S
add sub stmia L5 ldr r0 bl L_printf $stub Instead of a and a wouldn t it be better to do three moves *Return an aggregate type is even return S
Definition: README.txt:210
llvm::VarStreamArray::valid
bool valid() const
Definition: BinaryStreamArray.h:112
llvm::VarStreamArray::begin
Iterator begin(bool *HadError=nullptr) const
Definition: BinaryStreamArray.h:108
llvm::codeview::DebugSubsection
Definition: DebugSubsection.h:32
llvm::codeview::InlineeLinesSignature::Normal
@ Normal
llvm::codeview::DebugInlineeLinesSubsectionRef::valid
bool valid() const
Definition: DebugInlineeLinesSubsection.h:77
llvm::Error
Lightweight error class with error context and mandatory checking.
Definition: Error.h:157
TypeIndex.h
llvm::codeview::DebugInlineeLinesSubsectionRef
Definition: DebugInlineeLinesSubsection.h:61
llvm::codeview::DebugInlineeLinesSubsectionRef::DebugInlineeLinesSubsectionRef
DebugInlineeLinesSubsectionRef()
Definition: DebugInlineeLinesSubsection.cpp:42
llvm::codeview::DebugInlineeLinesSubsection::commit
Error commit(BinaryStreamWriter &Writer) const override
Definition: DebugInlineeLinesSubsection.cpp:83
llvm::codeview::TypeIndex
A 32-bit type reference.
Definition: TypeIndex.h:95
Endian.h
llvm::codeview::DebugInlineeLinesSubsection::addExtraFile
void addExtraFile(StringRef FileName)
Definition: DebugInlineeLinesSubsection.cpp:107
llvm::BinaryStreamRef
BinaryStreamRef is to BinaryStream what ArrayRef is to an Array.
Definition: BinaryStreamRef.h:156
llvm::codeview::InlineeSourceLineHeader::Inlinee
TypeIndex Inlinee
Definition: DebugInlineeLinesSubsection.h:37