LLVM 22.0.0git
BTFDebug.h
Go to the documentation of this file.
1//===- BTFDebug.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/// \file
10/// This file contains support for writing BTF debug info.
11///
12//===----------------------------------------------------------------------===//
13
14#ifndef LLVM_LIB_TARGET_BPF_BTFDEBUG_H
15#define LLVM_LIB_TARGET_BPF_BTFDEBUG_H
16
17#include "llvm/ADT/StringMap.h"
20#include <cstdint>
21#include <map>
22#include <set>
23#include <unordered_map>
24
25namespace llvm {
26
27class AsmPrinter;
28class BTFDebug;
29class DIType;
30class GlobalVariable;
31class MachineFunction;
32class MachineInstr;
33class MachineOperand;
34class MCInst;
35class MCStreamer;
36class MCSymbol;
37
38/// The base class for BTF type generation.
40protected:
45
46public:
48 virtual ~BTFTypeBase() = default;
49 void setId(uint32_t Id) { this->Id = Id; }
50 uint32_t getId() { return Id; }
51 uint32_t roundupToBytes(uint32_t NumBits) { return (NumBits + 7) >> 3; }
52 /// Get the size of this BTF type entry.
53 virtual uint32_t getSize() { return BTF::CommonTypeSize; }
54 /// Complete BTF type generation after all related DebugInfo types
55 /// have been visited so their BTF type id's are available
56 /// for cross referece.
57 virtual void completeType(BTFDebug &BDebug) {}
58 /// Emit types for this BTF type entry.
59 virtual void emitType(MCStreamer &OS);
60};
61
62/// Handle several derived types include pointer, const,
63/// volatile, typedef and restrict.
65 const DIDerivedType *DTy;
66 bool NeedsFixup;
67 StringRef Name;
68
69public:
70 BTFTypeDerived(const DIDerivedType *Ty, unsigned Tag, bool NeedsFixup);
71 BTFTypeDerived(unsigned NextTypeId, unsigned Tag, StringRef Name);
72 void completeType(BTFDebug &BDebug) override;
73 void emitType(MCStreamer &OS) override;
74 void setPointeeType(uint32_t PointeeType);
75};
76
77/// Handle struct or union forward declaration.
78class BTFTypeFwd : public BTFTypeBase {
79 StringRef Name;
80
81public:
82 BTFTypeFwd(StringRef Name, bool IsUnion);
83 void completeType(BTFDebug &BDebug) override;
84 void emitType(MCStreamer &OS) override;
85};
86
87/// Handle int type.
88class BTFTypeInt : public BTFTypeBase {
89 StringRef Name;
90 uint32_t IntVal; ///< Encoding, offset, bits
91
92public:
93 BTFTypeInt(uint32_t Encoding, uint32_t SizeInBits, uint32_t OffsetInBits,
94 StringRef TypeName);
95 uint32_t getSize() override { return BTFTypeBase::getSize() + sizeof(uint32_t); }
96 void completeType(BTFDebug &BDebug) override;
97 void emitType(MCStreamer &OS) override;
98};
99
100/// Handle enumerate type.
101class BTFTypeEnum : public BTFTypeBase {
102 const DICompositeType *ETy;
103 std::vector<struct BTF::BTFEnum> EnumValues;
104
105public:
106 BTFTypeEnum(const DICompositeType *ETy, uint32_t NumValues, bool IsSigned);
107 uint32_t getSize() override {
108 return BTFTypeBase::getSize() + EnumValues.size() * BTF::BTFEnumSize;
109 }
110 void completeType(BTFDebug &BDebug) override;
111 void emitType(MCStreamer &OS) override;
112};
113
114/// Handle array type.
115class BTFTypeArray : public BTFTypeBase {
116 struct BTF::BTFArray ArrayInfo;
117
118public:
119 BTFTypeArray(uint32_t ElemTypeId, uint32_t NumElems);
121 void completeType(BTFDebug &BDebug) override;
122 void emitType(MCStreamer &OS) override;
123};
124
125/// Handle struct/union type.
127 const DICompositeType *STy;
128 bool HasBitField;
129 std::vector<struct BTF::BTFMember> Members;
130
131public:
132 BTFTypeStruct(const DICompositeType *STy, bool IsStruct, bool HasBitField,
133 uint32_t NumMembers);
134 uint32_t getSize() override {
135 return BTFTypeBase::getSize() + Members.size() * BTF::BTFMemberSize;
136 }
137 void completeType(BTFDebug &BDebug) override;
138 void emitType(MCStreamer &OS) override;
139 std::string getName();
140};
141
142/// Handle function pointer.
144 const DISubroutineType *STy;
145 std::unordered_map<uint32_t, StringRef> FuncArgNames;
146 std::vector<struct BTF::BTFParam> Parameters;
147
148public:
149 BTFTypeFuncProto(const DISubroutineType *STy, uint32_t NumParams,
150 const std::unordered_map<uint32_t, StringRef> &FuncArgNames);
151 uint32_t getSize() override {
152 return BTFTypeBase::getSize() + Parameters.size() * BTF::BTFParamSize;
153 }
154 void completeType(BTFDebug &BDebug) override;
155 void emitType(MCStreamer &OS) override;
156};
157
158/// Handle subprogram
159class BTFTypeFunc : public BTFTypeBase {
160 StringRef Name;
161
162public:
163 BTFTypeFunc(StringRef FuncName, uint32_t ProtoTypeId, uint32_t Scope);
164 uint32_t getSize() override { return BTFTypeBase::getSize(); }
165 void completeType(BTFDebug &BDebug) override;
166 void emitType(MCStreamer &OS) override;
167};
168
169/// Handle variable instances
170class BTFKindVar : public BTFTypeBase {
171 StringRef Name;
172 uint32_t Info;
173
174public:
175 BTFKindVar(StringRef VarName, uint32_t TypeId, uint32_t VarInfo);
176 uint32_t getSize() override { return BTFTypeBase::getSize() + 4; }
177 void completeType(BTFDebug &BDebug) override;
178 void emitType(MCStreamer &OS) override;
179};
180
181/// Handle data sections
183 AsmPrinter *Asm;
184 std::string Name;
185 std::vector<std::tuple<uint32_t, const MCSymbol *, uint32_t>> Vars;
186
187public:
188 BTFKindDataSec(AsmPrinter *AsmPrt, std::string SecName);
189 uint32_t getSize() override {
190 return BTFTypeBase::getSize() + BTF::BTFDataSecVarSize * Vars.size();
191 }
193 Vars.push_back(std::make_tuple(Id, Sym, Size));
194 }
195 std::string getName() { return Name; }
196 void completeType(BTFDebug &BDebug) override;
197 void emitType(MCStreamer &OS) override;
198};
199
200/// Handle binary floating point type.
201class BTFTypeFloat : public BTFTypeBase {
202 StringRef Name;
203
204public:
205 BTFTypeFloat(uint32_t SizeInBits, StringRef TypeName);
206 void completeType(BTFDebug &BDebug) override;
207};
208
209/// Handle decl tags.
211 uint32_t Info;
212 StringRef Tag;
213
214public:
215 BTFTypeDeclTag(uint32_t BaseTypeId, int ComponentId, StringRef Tag);
216 uint32_t getSize() override { return BTFTypeBase::getSize() + 4; }
217 void completeType(BTFDebug &BDebug) override;
218 void emitType(MCStreamer &OS) override;
219};
220
221/// Handle 64-bit enumerate type.
223 const DICompositeType *ETy;
224 std::vector<struct BTF::BTFEnum64> EnumValues;
225
226public:
227 BTFTypeEnum64(const DICompositeType *ETy, uint32_t NumValues, bool IsSigned);
228 uint32_t getSize() override {
229 return BTFTypeBase::getSize() + EnumValues.size() * BTF::BTFEnum64Size;
230 }
231 void completeType(BTFDebug &BDebug) override;
232 void emitType(MCStreamer &OS) override;
233};
234
236 const DIDerivedType *DTy;
237 StringRef Tag;
238
239public:
240 BTFTypeTypeTag(uint32_t NextTypeId, StringRef Tag);
241 BTFTypeTypeTag(const DIDerivedType *DTy, StringRef Tag);
242 void completeType(BTFDebug &BDebug) override;
243};
244
245/// String table.
247 /// String table size in bytes.
248 uint32_t Size;
249 /// A mapping from string table offset to the index
250 /// of the Table. It is used to avoid putting
251 /// duplicated strings in the table.
252 std::map<uint32_t, uint32_t> OffsetToIdMap;
253 /// A vector of strings to represent the string table.
254 std::vector<std::string> Table;
255
256public:
257 BTFStringTable() : Size(0) {}
258 uint32_t getSize() { return Size; }
259 std::vector<std::string> &getTable() { return Table; }
260 /// Add a string to the string table and returns its offset
261 /// in the table.
263};
264
265/// Represent one func and its type id.
267 const MCSymbol *Label; ///< Func MCSymbol
268 uint32_t TypeId; ///< Type id referring to .BTF type section
269};
270
271/// Represent one line info.
273 MCSymbol *Label; ///< MCSymbol identifying insn for the lineinfo
274 uint32_t FileNameOff; ///< file name offset in the .BTF string table
275 uint32_t LineOff; ///< line offset in the .BTF string table
276 uint32_t LineNum; ///< the line number
277 uint32_t ColumnNum; ///< the column number
278};
279
280/// Represent one field relocation.
282 const MCSymbol *Label; ///< MCSymbol identifying insn for the reloc
283 uint32_t TypeID; ///< Type ID
284 uint32_t OffsetNameOff; ///< The string to traverse types
285 uint32_t RelocKind; ///< What to patch the instruction
286};
287
288/// Collect and emit BTF information.
290 MCStreamer &OS;
291 bool SkipInstruction;
292 bool LineInfoGenerated;
293 uint32_t SecNameOff;
294 uint32_t ArrayIndexTypeId;
295 bool MapDefNotCollected;
296 BTFStringTable StringTable;
297 std::vector<std::unique_ptr<BTFTypeBase>> TypeEntries;
298 std::unordered_map<const DIType *, uint32_t> DIToIdMap;
299 std::map<uint32_t, std::vector<BTFFuncInfo>> FuncInfoTable;
300 std::map<uint32_t, std::vector<BTFLineInfo>> LineInfoTable;
301 std::map<uint32_t, std::vector<BTFFieldReloc>> FieldRelocTable;
303 std::map<std::string, std::unique_ptr<BTFKindDataSec>, std::less<>>
304 DataSecEntries;
305 std::vector<BTFTypeStruct *> StructTypes;
306 std::map<const GlobalVariable *, std::pair<int64_t, uint32_t>> PatchImms;
307 std::map<const DICompositeType *,
308 std::vector<std::pair<const DIDerivedType *, BTFTypeDerived *>>>
309 FixupDerivedTypes;
310 std::set<const Function *>ProtoFunctions;
311
312 /// Add types to TypeEntries.
313 /// @{
314 /// Add types to TypeEntries and DIToIdMap.
315 uint32_t addType(std::unique_ptr<BTFTypeBase> TypeEntry, const DIType *Ty);
316 /// Add types to TypeEntries only and return type id.
317 uint32_t addType(std::unique_ptr<BTFTypeBase> TypeEntry);
318 /// @}
319
320 /// IR type visiting functions.
321 /// @{
322 void visitTypeEntry(const DIType *Ty);
323 void visitTypeEntry(const DIType *Ty, uint32_t &TypeId, bool CheckPointer,
324 bool SeenPointer);
325 void visitBasicType(const DIBasicType *BTy, uint32_t &TypeId);
326 void visitSubroutineType(
327 const DISubroutineType *STy, bool ForSubprog,
328 const std::unordered_map<uint32_t, StringRef> &FuncArgNames,
329 uint32_t &TypeId);
330 void visitFwdDeclType(const DICompositeType *CTy, bool IsUnion,
331 uint32_t &TypeId);
332 void visitCompositeType(const DICompositeType *CTy, uint32_t &TypeId);
333 void visitStructType(const DICompositeType *STy, bool IsStruct,
334 uint32_t &TypeId);
335 void visitArrayType(const DICompositeType *ATy, uint32_t &TypeId);
336 void visitEnumType(const DICompositeType *ETy, uint32_t &TypeId);
337 void visitDerivedType(const DIDerivedType *DTy, uint32_t &TypeId,
338 bool CheckPointer, bool SeenPointer);
339 void visitMapDefType(const DIType *Ty, uint32_t &TypeId);
340 /// @}
341
342 /// Check whether the type is a forward declaration candidate or not.
343 bool IsForwardDeclCandidate(const DIType *Base);
344
345 /// Get the file content for the subprogram. Certain lines of the file
346 /// later may be put into string table and referenced by line info.
347 std::string populateFileContent(const DIFile *File);
348
349 /// Construct a line info.
350 void constructLineInfo(MCSymbol *Label, const DIFile *File, uint32_t Line,
351 uint32_t Column);
352
353 /// Generate types and variables for globals.
354 void processGlobals(bool ProcessingMapDef);
355
356 /// Process global variable initializer in pursuit for function
357 /// pointers.
358 void processGlobalInitializer(const Constant *C);
359
360 /// Generate types for function prototypes.
361 void processFuncPrototypes(const Function *);
362
363 /// Generate types for decl annotations.
364 void processDeclAnnotations(DINodeArray Annotations, uint32_t BaseTypeId,
365 int ComponentId);
366
367 /// Generate types for DISubprogram and it's arguments.
368 uint32_t processDISubprogram(const DISubprogram *SP, uint32_t ProtoTypeId,
369 uint8_t Scope);
370
371 /// Generate BTF type_tag's. If BaseTypeId is nonnegative, the last
372 /// BTF type_tag in the chain points to BaseTypeId. Otherwise, it points to
373 /// the base type of DTy. Return the type id of the first BTF type_tag
374 /// in the chain. If no type_tag's are generated, a negative value
375 /// is returned.
376 int genBTFTypeTags(const DIDerivedType *DTy, int BaseTypeId);
377
378 /// Generate one field relocation record.
379 void generatePatchImmReloc(const MCSymbol *ORSym, uint32_t RootId,
380 const GlobalVariable *, bool IsAma);
381
382 /// Populating unprocessed type on demand.
383 unsigned populateType(const DIType *Ty);
384
385 /// Process global variables referenced by relocation instructions
386 /// and extern function references.
387 void processGlobalValue(const MachineOperand &MO);
388
389 /// Emit common header of .BTF and .BTF.ext sections.
390 void emitCommonHeader();
391
392 /// Emit the .BTF section.
393 void emitBTFSection();
394
395 /// Emit the .BTF.ext section.
396 void emitBTFExtSection();
397
398protected:
399 /// Gather pre-function debug information.
400 void beginFunctionImpl(const MachineFunction *MF) override;
401
402 /// Post process after all instructions in this function are processed.
403 void endFunctionImpl(const MachineFunction *MF) override;
404
405public:
406 BTFDebug(AsmPrinter *AP);
407
408 ///
409 bool InstLower(const MachineInstr *MI, MCInst &OutMI);
410
411 /// Get the special array index type id.
413 assert(ArrayIndexTypeId);
414 return ArrayIndexTypeId;
415 }
416
417 /// Add string to the string table.
418 size_t addString(StringRef S) { return StringTable.addString(S); }
419
420 /// Get the type id for a particular DIType.
422 assert(Ty && "Invalid null Type");
423 assert(DIToIdMap.find(Ty) != DIToIdMap.end() &&
424 "DIType not added in the BDIToIdMap");
425 return DIToIdMap[Ty];
426 }
427
428 /// Process beginning of an instruction.
429 void beginInstruction(const MachineInstr *MI) override;
430
431 /// Complete all the types and emit the BTF sections.
432 void endModule() override;
433};
434
435} // end namespace llvm
436
437#endif
assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")
This file defines the StringMap class.
This file contains the layout of .BTF and .BTF.ext ELF sections.
IRTranslator LLVM IR MI
Annotations lets you mark points and ranges inside source code, for tests:
Definition Annotations.h:53
This class is intended to be used as a driving class for all asm writers.
Definition AsmPrinter.h:90
Collect and emit BTF information.
Definition BTFDebug.h:289
void endFunctionImpl(const MachineFunction *MF) override
Post process after all instructions in this function are processed.
BTFDebug(AsmPrinter *AP)
Definition BTFDebug.cpp:517
void beginInstruction(const MachineInstr *MI) override
Process beginning of an instruction.
bool InstLower(const MachineInstr *MI, MCInst &OutMI)
Emit proper patchable instructions.
size_t addString(StringRef S)
Add string to the string table.
Definition BTFDebug.h:418
uint32_t getArrayIndexTypeId()
Get the special array index type id.
Definition BTFDebug.h:412
uint32_t getTypeId(const DIType *Ty)
Get the type id for a particular DIType.
Definition BTFDebug.h:421
void endModule() override
Complete all the types and emit the BTF sections.
void beginFunctionImpl(const MachineFunction *MF) override
Gather pre-function debug information.
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:429
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:424
void addDataSecEntry(uint32_t Id, const MCSymbol *Sym, uint32_t Size)
Definition BTFDebug.h:192
BTFKindDataSec(AsmPrinter *AsmPrt, std::string SecName)
Definition BTFDebug.cpp:417
uint32_t getSize() override
Get the size of this BTF type entry.
Definition BTFDebug.h:189
std::string getName()
Definition BTFDebug.h:195
BTFKindVar(StringRef VarName, uint32_t TypeId, uint32_t VarInfo)
Definition BTFDebug.cpp:400
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:412
uint32_t getSize() override
Get the size of this BTF type entry.
Definition BTFDebug.h:176
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:408
String table.
Definition BTFDebug.h:246
uint32_t getSize()
Definition BTFDebug.h:258
uint32_t addString(StringRef S)
Add a string to the string table and returns its offset in the table.
Definition BTFDebug.cpp:503
std::vector< std::string > & getTable()
Definition BTFDebug.h:259
BTFTypeArray(uint32_t ElemTypeId, uint32_t NumElems)
Definition BTFDebug.cpp:258
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:281
void completeType(BTFDebug &BDebug) override
Represent a BTF array.
Definition BTFDebug.cpp:269
uint32_t getSize() override
Get the size of this BTF type entry.
Definition BTFDebug.h:120
void setId(uint32_t Id)
Definition BTFDebug.h:49
struct BTF::CommonType BTFType
Definition BTFDebug.h:44
virtual uint32_t getSize()
Get the size of this BTF type entry.
Definition BTFDebug.h:53
virtual void completeType(BTFDebug &BDebug)
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.h:57
virtual ~BTFTypeBase()=default
virtual void emitType(MCStreamer &OS)
Emit types for this BTF type entry.
Definition BTFDebug.cpp:48
uint32_t getId()
Definition BTFDebug.h:50
uint32_t roundupToBytes(uint32_t NumBits)
Definition BTFDebug.h:51
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:463
uint32_t getSize() override
Get the size of this BTF type entry.
Definition BTFDebug.h:216
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:471
BTFTypeDeclTag(uint32_t BaseTypeId, int ComponentId, StringRef Tag)
Definition BTFDebug.cpp:454
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:91
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:113
void setPointeeType(uint32_t PointeeType)
Definition BTFDebug.cpp:115
BTFTypeDerived(const DIDerivedType *Ty, unsigned Tag, bool NeedsFixup)
Definition BTFDebug.cpp:57
uint32_t getSize() override
Get the size of this BTF type entry.
Definition BTFDebug.h:228
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:223
BTFTypeEnum64(const DICompositeType *ETy, uint32_t NumValues, bool IsSigned)
Definition BTFDebug.cpp:216
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:247
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:184
uint32_t getSize() override
Get the size of this BTF type entry.
Definition BTFDebug.h:107
BTFTypeEnum(const DICompositeType *ETy, uint32_t NumValues, bool IsSigned)
Definition BTFDebug.cpp:177
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:208
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:446
BTFTypeFloat(uint32_t SizeInBits, StringRef TypeName)
Definition BTFDebug.cpp:439
BTFTypeFuncProto(const DISubroutineType *STy, uint32_t NumParams, const std::unordered_map< uint32_t, StringRef > &FuncArgNames)
The Func kind represents both subprogram and pointee of function pointers.
Definition BTFDebug.cpp:340
uint32_t getSize() override
Get the size of this BTF type entry.
Definition BTFDebug.h:151
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:348
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:374
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:398
BTFTypeFunc(StringRef FuncName, uint32_t ProtoTypeId, uint32_t Scope)
Definition BTFDebug.cpp:382
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:390
uint32_t getSize() override
Get the size of this BTF type entry.
Definition BTFDebug.h:164
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:134
BTFTypeFwd(StringRef Name, bool IsUnion)
Represent a struct/union forward declaration.
Definition BTFDebug.cpp:120
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:126
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:171
uint32_t getSize() override
Get the size of this BTF type entry.
Definition BTFDebug.h:95
BTFTypeInt(uint32_t Encoding, uint32_t SizeInBits, uint32_t OffsetInBits, StringRef TypeName)
Definition BTFDebug.cpp:136
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:163
void emitType(MCStreamer &OS) override
Emit types for this BTF type entry.
Definition BTFDebug.cpp:323
uint32_t getSize() override
Get the size of this BTF type entry.
Definition BTFDebug.h:134
BTFTypeStruct(const DICompositeType *STy, bool IsStruct, bool HasBitField, uint32_t NumMembers)
Represent either a struct or a union.
Definition BTFDebug.cpp:289
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:297
std::string getName()
Definition BTFDebug.cpp:333
void completeType(BTFDebug &BDebug) override
Complete BTF type generation after all related DebugInfo types have been visited so their BTF type id...
Definition BTFDebug.cpp:489
BTFTypeTypeTag(uint32_t NextTypeId, StringRef Tag)
Definition BTFDebug.cpp:476
This is an important base class in LLVM.
Definition Constant.h:43
Basic type, like 'int' or 'float'.
Subprogram description. Uses SubclassData1.
Type array for a subprogram.
Base class for types.
Instances of this class represent a single low-level machine instruction.
Definition MCInst.h:188
Streaming machine code generation interface.
Definition MCStreamer.h:220
MCSymbol - Instances of this class represent a symbol name in the MC file, and MCSymbols are created ...
Definition MCSymbol.h:42
Representation of each machine instruction.
MachineOperand class - Representation of each machine instruction operand.
StringMap - This is an unconventional map that is specialized for handling keys that are "strings",...
Definition StringMap.h:133
StringRef - Represent a constant reference to a string, i.e.
Definition StringRef.h:55
@ BTFEnum64Size
Definition BTF.h:66
@ BTFArraySize
Definition BTF.h:64
@ BTFMemberSize
Definition BTF.h:67
@ BTFEnumSize
Definition BTF.h:65
@ BTFParamSize
Definition BTF.h:68
@ CommonTypeSize
Definition BTF.h:63
@ BTFDataSecVarSize
Definition BTF.h:69
@ C
The default llvm calling convention, compatible with C.
Definition CallingConv.h:34
This is an optimization pass for GlobalISel generic memory operations.
Represent one field relocation.
Definition BTFDebug.h:281
uint32_t RelocKind
What to patch the instruction.
Definition BTFDebug.h:285
const MCSymbol * Label
MCSymbol identifying insn for the reloc.
Definition BTFDebug.h:282
uint32_t TypeID
Type ID.
Definition BTFDebug.h:283
uint32_t OffsetNameOff
The string to traverse types.
Definition BTFDebug.h:284
Represent one func and its type id.
Definition BTFDebug.h:266
uint32_t TypeId
Type id referring to .BTF type section.
Definition BTFDebug.h:268
const MCSymbol * Label
Func MCSymbol.
Definition BTFDebug.h:267
Represent one line info.
Definition BTFDebug.h:272
uint32_t LineOff
line offset in the .BTF string table
Definition BTFDebug.h:275
MCSymbol * Label
MCSymbol identifying insn for the lineinfo.
Definition BTFDebug.h:273
uint32_t ColumnNum
the column number
Definition BTFDebug.h:277
uint32_t FileNameOff
file name offset in the .BTF string table
Definition BTFDebug.h:274
uint32_t LineNum
the line number
Definition BTFDebug.h:276
BTF_KIND_ARRAY is followed by one "struct BTFArray".
Definition BTF.h:169
The BTF common type definition.
Definition BTF.h:107