diff options
Diffstat (limited to 'llvm/lib/CodeGen/AsmPrinter/BTFDebug.h')
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/BTFDebug.h | 293 |
1 files changed, 0 insertions, 293 deletions
diff --git a/llvm/lib/CodeGen/AsmPrinter/BTFDebug.h b/llvm/lib/CodeGen/AsmPrinter/BTFDebug.h deleted file mode 100644 index 736ef696f7c..00000000000 --- a/llvm/lib/CodeGen/AsmPrinter/BTFDebug.h +++ /dev/null @@ -1,293 +0,0 @@ -//===- llvm/lib/CodeGen/AsmPrinter/BTFDebug.h -------------------*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -/// -/// \file -/// This file contains support for writing BTF debug info. -/// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_LIB_CODEGEN_ASMPRINTER_BTFDEBUG_H -#define LLVM_LIB_CODEGEN_ASMPRINTER_BTFDEBUG_H - -#include "DebugHandlerBase.h" -#include "llvm/ADT/StringMap.h" -#include "llvm/BinaryFormat/BTF.h" -#include <unordered_map> - -namespace llvm { - -class AsmPrinter; -class BTFDebug; -class DIType; -class MCStreamer; -class MCSymbol; -class MachineFunction; - -/// The base class for BTF type generation. -class BTFTypeBase { -protected: - uint8_t Kind; - uint32_t Id; - struct BTF::CommonType BTFType; - -public: - virtual ~BTFTypeBase() = default; - void setId(uint32_t Id) { this->Id = Id; } - uint32_t getId() { return Id; } - uint32_t roundupToBytes(uint32_t NumBits) { return (NumBits + 7) >> 3; } - /// Get the size of this BTF type entry. - virtual uint32_t getSize() { return BTF::CommonTypeSize; } - /// Complete BTF type generation after all related DebugInfo types - /// have been visited so their BTF type id's are available - /// for cross referece. - virtual void completeType(BTFDebug &BDebug) {} - /// Emit types for this BTF type entry. - virtual void emitType(MCStreamer &OS); -}; - -/// Handle several derived types include pointer, const, -/// volatile, typedef and restrict. -class BTFTypeDerived : public BTFTypeBase { - const DIDerivedType *DTy; - -public: - BTFTypeDerived(const DIDerivedType *Ty, unsigned Tag); - void completeType(BTFDebug &BDebug); - void emitType(MCStreamer &OS); -}; - -/// Handle struct or union forward declaration. -class BTFTypeFwd : public BTFTypeBase { - StringRef Name; - -public: - BTFTypeFwd(StringRef Name); - void completeType(BTFDebug &BDebug); - void emitType(MCStreamer &OS); -}; - -/// Handle int type. -class BTFTypeInt : public BTFTypeBase { - StringRef Name; - uint32_t IntVal; ///< Encoding, offset, bits - -public: - BTFTypeInt(uint32_t Encoding, uint32_t SizeInBits, uint32_t OffsetInBits, - StringRef TypeName); - uint32_t getSize() { return BTFTypeBase::getSize() + sizeof(uint32_t); } - void completeType(BTFDebug &BDebug); - void emitType(MCStreamer &OS); -}; - -/// Handle enumerate type. -class BTFTypeEnum : public BTFTypeBase { - const DICompositeType *ETy; - std::vector<struct BTF::BTFEnum> EnumValues; - -public: - BTFTypeEnum(const DICompositeType *ETy, uint32_t NumValues); - uint32_t getSize() { - return BTFTypeBase::getSize() + EnumValues.size() * BTF::BTFEnumSize; - } - void completeType(BTFDebug &BDebug); - void emitType(MCStreamer &OS); -}; - -/// Handle array type. -class BTFTypeArray : public BTFTypeBase { - const DICompositeType *ATy; - struct BTF::BTFArray ArrayInfo; - -public: - BTFTypeArray(const DICompositeType *ATy); - uint32_t getSize() { return BTFTypeBase::getSize() + BTF::BTFArraySize; } - void completeType(BTFDebug &BDebug); - void emitType(MCStreamer &OS); -}; - -/// Handle struct/union type. -class BTFTypeStruct : public BTFTypeBase { - const DICompositeType *STy; - std::vector<struct BTF::BTFMember> Members; - -public: - BTFTypeStruct(const DICompositeType *STy, bool IsStruct, uint32_t NumMembers); - uint32_t getSize() { - return BTFTypeBase::getSize() + Members.size() * BTF::BTFMemberSize; - } - void completeType(BTFDebug &BDebug); - void emitType(MCStreamer &OS); -}; - -/// Handle function pointer. -class BTFTypeFuncProto : public BTFTypeBase { - const DISubroutineType *STy; - std::unordered_map<uint32_t, StringRef> FuncArgNames; - std::vector<struct BTF::BTFParam> Parameters; - -public: - BTFTypeFuncProto(const DISubroutineType *STy, uint32_t NumParams, - const std::unordered_map<uint32_t, StringRef> &FuncArgNames); - uint32_t getSize() { - return BTFTypeBase::getSize() + Parameters.size() * BTF::BTFParamSize; - } - void completeType(BTFDebug &BDebug); - void emitType(MCStreamer &OS); -}; - -/// Handle subprogram -class BTFTypeFunc : public BTFTypeBase { - StringRef Name; - -public: - BTFTypeFunc(StringRef FuncName, uint32_t ProtoTypeId); - uint32_t getSize() { return BTFTypeBase::getSize(); } - void completeType(BTFDebug &BDebug); - void emitType(MCStreamer &OS); -}; - -/// String table. -class BTFStringTable { - /// String table size in bytes. - uint32_t Size; - /// A mapping from string table offset to the index - /// of the Table. It is used to avoid putting - /// duplicated strings in the table. - std::unordered_map<uint32_t, uint32_t> OffsetToIdMap; - /// A vector of strings to represent the string table. - std::vector<std::string> Table; - -public: - BTFStringTable() : Size(0) {} - uint32_t getSize() { return Size; } - std::vector<std::string> &getTable() { return Table; } - /// Add a string to the string table and returns its offset - /// in the table. - uint32_t addString(StringRef S); -}; - -/// Represent one func and its type id. -struct BTFFuncInfo { - const MCSymbol *Label; ///< Func MCSymbol - uint32_t TypeId; ///< Type id referring to .BTF type section -}; - -/// Represent one line info. -struct BTFLineInfo { - MCSymbol *Label; ///< MCSymbol identifying insn for the lineinfo - uint32_t FileNameOff; ///< file name offset in the .BTF string table - uint32_t LineOff; ///< line offset in the .BTF string table - uint32_t LineNum; ///< the line number - uint32_t ColumnNum; ///< the column number -}; - -/// Collect and emit BTF information. -class BTFDebug : public DebugHandlerBase { - MCStreamer &OS; - bool SkipInstruction; - bool LineInfoGenerated; - uint32_t SecNameOff; - uint32_t ArrayIndexTypeId; - BTFStringTable StringTable; - std::vector<std::unique_ptr<BTFTypeBase>> TypeEntries; - std::unordered_map<const DIType *, uint32_t> DIToIdMap; - std::unordered_map<const DIType *, uint32_t> BitFieldTypeMap; - std::unordered_map<uint32_t, std::vector<BTFFuncInfo>> FuncInfoTable; - std::unordered_map<uint32_t, std::vector<BTFLineInfo>> LineInfoTable; - StringMap<std::vector<std::string>> FileContent; - - /// Add types to TypeEntries. - /// @{ - /// Add types to TypeEntries and DIToIdMap. - void addType(std::unique_ptr<BTFTypeBase> TypeEntry, const DIType *Ty); - /// Add types to TypeEntries only and return type id. - uint32_t addType(std::unique_ptr<BTFTypeBase> TypeEntry); - /// @} - - /// IR type visiting functions. - /// @{ - void visitTypeEntry(const DIType *Ty); - void visitBasicType(const DIBasicType *BTy); - void visitSubroutineType( - const DISubroutineType *STy, bool ForSubprog, - const std::unordered_map<uint32_t, StringRef> &FuncArgNames, - uint32_t &TypeId); - void visitFwdDeclType(const DICompositeType *CTy); - void visitCompositeType(const DICompositeType *CTy); - void visitStructType(const DICompositeType *STy, bool IsStruct); - void visitArrayType(const DICompositeType *ATy); - void visitEnumType(const DICompositeType *ETy); - void visitDerivedType(const DIDerivedType *DTy); - /// @} - - /// Get the file content for the subprogram. Certain lines of the file - /// later may be put into string table and referenced by line info. - std::string populateFileContent(const DISubprogram *SP); - - /// Construct a line info. - void constructLineInfo(const DISubprogram *SP, MCSymbol *Label, uint32_t Line, - uint32_t Column); - - /// Emit common header of .BTF and .BTF.ext sections. - void emitCommonHeader(); - - /// Emit the .BTF section. - void emitBTFSection(); - - /// Emit the .BTF.ext section. - void emitBTFExtSection(); - -protected: - /// Gather pre-function debug information. - void beginFunctionImpl(const MachineFunction *MF) override; - - /// Post process after all instructions in this function are processed. - void endFunctionImpl(const MachineFunction *MF) override; - -public: - BTFDebug(AsmPrinter *AP); - - /// Get the special array index type id. - uint32_t getArrayIndexTypeId() { - assert(ArrayIndexTypeId); - return ArrayIndexTypeId; - } - - /// Add string to the string table. - size_t addString(StringRef S) { return StringTable.addString(S); } - - /// Get the type id for a particular DIType. - uint32_t getTypeId(const DIType *Ty) { - assert(Ty && "Invalid null Type"); - assert(DIToIdMap.find(Ty) != DIToIdMap.end() && - "DIType not added in the BDIToIdMap"); - return DIToIdMap[Ty]; - } - - /// Get the bitfield type id. If the struct/union member - /// is a bitfield, a special type is created for it. - uint32_t getBitFieldTypeId(const DIDerivedType *Ty) { - assert(Ty && "Invalid null Type"); - assert(BitFieldTypeMap.find(Ty) != BitFieldTypeMap.end() && - "DIDerivedType not added in the BitFieldTypeMap"); - return BitFieldTypeMap[Ty]; - } - - void setSymbolSize(const MCSymbol *Symbol, uint64_t Size) override {} - - /// Process beginning of an instruction. - void beginInstruction(const MachineInstr *MI) override; - - /// Complete all the types and emit the BTF sections. - void endModule() override; -}; - -} // end namespace llvm - -#endif // LLVM_LIB_CODEGEN_ASMPRINTER_BTFDEBUG_H |