LLVM 20.0.0git
Classes | Functions
CodeViewDebug.cpp File Reference
#include "CodeViewDebug.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallBitVector.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/TinyPtrVector.h"
#include "llvm/ADT/Twine.h"
#include "llvm/BinaryFormat/COFF.h"
#include "llvm/BinaryFormat/Dwarf.h"
#include "llvm/CodeGen/AsmPrinter.h"
#include "llvm/CodeGen/LexicalScopes.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstr.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/TargetFrameLowering.h"
#include "llvm/CodeGen/TargetLowering.h"
#include "llvm/CodeGen/TargetRegisterInfo.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/DebugInfo/CodeView/CVTypeVisitor.h"
#include "llvm/DebugInfo/CodeView/CodeViewRecordIO.h"
#include "llvm/DebugInfo/CodeView/ContinuationRecordBuilder.h"
#include "llvm/DebugInfo/CodeView/DebugInlineeLinesSubsection.h"
#include "llvm/DebugInfo/CodeView/EnumTables.h"
#include "llvm/DebugInfo/CodeView/Line.h"
#include "llvm/DebugInfo/CodeView/SymbolRecord.h"
#include "llvm/DebugInfo/CodeView/TypeRecord.h"
#include "llvm/DebugInfo/CodeView/TypeTableCollection.h"
#include "llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCSectionCOFF.h"
#include "llvm/MC/MCStreamer.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/Support/BinaryStreamWriter.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/SMLoc.h"
#include "llvm/Support/ScopedPrinter.h"
#include "llvm/Target/TargetLoweringObjectFile.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/TargetParser/Triple.h"
#include <algorithm>
#include <cassert>
#include <cctype>
#include <cstddef>
#include <limits>

Go to the source code of this file.

Classes

struct  llvm::CodeViewDebug::TypeLoweringScope
 
struct  llvm::ClassInfo
 
struct  llvm::ClassInfo::MemberInfo
 

Functions

static CPUType mapArchToCVCPUType (Triple::ArchType Type)
 
static StringRef getPrettyScopeName (const DIScope *Scope)
 
static std::string formatNestedName (ArrayRef< StringRef > QualifiedNameComponents, StringRef TypeName)
 
static StringRef removeTemplateArgs (StringRef Name)
 
static bool isNonTrivial (const DICompositeType *DCTy)
 
static FunctionOptions getFunctionOptions (const DISubroutineType *Ty, const DICompositeType *ClassTy=nullptr, StringRef SPName=StringRef(""))
 
static void addLocIfNotPresent (SmallVectorImpl< const DILocation * > &Locs, const DILocation *Loc)
 
static SourceLanguage MapDWLangToCVLang (unsigned DWLang)
 
static void emitNullTerminatedSymbolName (MCStreamer &OS, StringRef S, unsigned MaxFixedRecordLength=0xF00)
 
static Version parseVersion (StringRef Name)
 
static TypeIndex getStringIdTypeIdx (GlobalTypeTableBuilder &TypeTable, StringRef S)
 
static bool canUseReferenceType (const DbgVariableLocation &Loc)
 
static bool needsReferenceType (const DbgVariableLocation &Loc)
 
static bool shouldEmitUdt (const DIType *T)
 
static PointerToMemberRepresentation translatePtrToMemberRep (unsigned SizeInBytes, bool IsPMF, unsigned Flags)
 
static CallingConvention dwarfCCToCodeView (unsigned DwarfCC)
 Given a DWARF calling convention, get the CodeView equivalent.
 
static MemberAccess translateAccessFlags (unsigned RecordTag, unsigned Flags)
 
static MethodOptions translateMethodOptionFlags (const DISubprogram *SP)
 
static MethodKind translateMethodKindFlags (const DISubprogram *SP, bool Introduced)
 
static TypeRecordKind getRecordKind (const DICompositeType *Ty)
 
static ClassOptions getCommonClassOptions (const DICompositeType *Ty)
 Return ClassOptions that should be present on both the forward declaration and the defintion of a tag type.
 
static bool shouldAlwaysEmitCompleteClassType (const DICompositeType *Ty)
 
static bool isUsableDebugLoc (DebugLoc DL)
 
static StringRef getSymbolName (SymbolKind SymKind)
 
static bool isFloatDIType (const DIType *Ty)
 
void forEachJumpTableBranch (const MachineFunction *MF, bool isThumb, const std::function< void(const MachineJumpTableInfo &, const MachineInstr &, int64_t)> &Callback)
 

Function Documentation

◆ addLocIfNotPresent()

static void addLocIfNotPresent ( SmallVectorImpl< const DILocation * > &  Locs,
const DILocation Loc 
)
static

◆ canUseReferenceType()

static bool canUseReferenceType ( const DbgVariableLocation Loc)
static

◆ dwarfCCToCodeView()

static CallingConvention dwarfCCToCodeView ( unsigned  DwarfCC)
static

Given a DWARF calling convention, get the CodeView equivalent.

If we don't have a translation, use the NearC convention.

Definition at line 1963 of file CodeViewDebug.cpp.

◆ emitNullTerminatedSymbolName()

static void emitNullTerminatedSymbolName ( MCStreamer OS,
StringRef  S,
unsigned  MaxFixedRecordLength = 0xF00 
)
static

◆ forEachJumpTableBranch()

void forEachJumpTableBranch ( const MachineFunction MF,
bool  isThumb,
const std::function< void(const MachineJumpTableInfo &, const MachineInstr &, int64_t)> &  Callback 
)

◆ formatNestedName()

static std::string formatNestedName ( ArrayRef< StringRef QualifiedNameComponents,
StringRef  TypeName 
)
static

Definition at line 297 of file CodeViewDebug.cpp.

References llvm::reverse().

◆ getCommonClassOptions()

static ClassOptions getCommonClassOptions ( const DICompositeType Ty)
static

Return ClassOptions that should be present on both the forward declaration and the defintion of a tag type.

Definition at line 2173 of file CodeViewDebug.cpp.

References llvm::StringRef::empty(), llvm::DICompositeType::getIdentifier(), llvm::DIType::getScope(), and llvm::DINode::getTag().

◆ getFunctionOptions()

static FunctionOptions getFunctionOptions ( const DISubroutineType Ty,
const DICompositeType ClassTy = nullptr,
StringRef  SPName = StringRef("") 
)
static

Definition at line 422 of file CodeViewDebug.cpp.

References llvm::DISubroutineType::getTypeArray(), and isNonTrivial().

◆ getPrettyScopeName()

static StringRef getPrettyScopeName ( const DIScope Scope)
static

Definition at line 258 of file CodeViewDebug.cpp.

References llvm::StringRef::empty().

◆ getRecordKind()

static TypeRecordKind getRecordKind ( const DICompositeType Ty)
static

Definition at line 2160 of file CodeViewDebug.cpp.

References llvm::DINode::getTag(), and llvm_unreachable.

◆ getStringIdTypeIdx()

static TypeIndex getStringIdTypeIdx ( GlobalTypeTableBuilder TypeTable,
StringRef  S 
)
static

◆ getSymbolName()

static StringRef getSymbolName ( SymbolKind  SymKind)
static

◆ isFloatDIType()

static bool isFloatDIType ( const DIType Ty)
static

Definition at line 3357 of file CodeViewDebug.cpp.

References assert(), llvm::DINode::getTag(), and isFloatDIType().

Referenced by isFloatDIType().

◆ isNonTrivial()

static bool isNonTrivial ( const DICompositeType DCTy)
static

Definition at line 417 of file CodeViewDebug.cpp.

References llvm::DIType::getFlags().

Referenced by getFunctionOptions().

◆ isUsableDebugLoc()

static bool isUsableDebugLoc ( DebugLoc  DL)
static

Definition at line 3084 of file CodeViewDebug.cpp.

References DL.

Referenced by llvm::CodeViewDebug::beginInstruction().

◆ mapArchToCVCPUType()

static CPUType mapArchToCVCPUType ( Triple::ArchType  Type)
static

Definition at line 114 of file CodeViewDebug.cpp.

References llvm::report_fatal_error().

Referenced by llvm::CodeViewDebug::beginModule().

◆ MapDWLangToCVLang()

static SourceLanguage MapDWLangToCVLang ( unsigned  DWLang)
static

Definition at line 568 of file CodeViewDebug.cpp.

Referenced by llvm::CodeViewDebug::beginModule().

◆ needsReferenceType()

static bool needsReferenceType ( const DbgVariableLocation Loc)
static

◆ parseVersion()

static Version parseVersion ( StringRef  Name)
static

Definition at line 816 of file CodeViewDebug.cpp.

References llvm::CallingConv::C, N, Name, and llvm::Version.

Referenced by llvm::remarks::createYAMLParserFromMeta().

◆ removeTemplateArgs()

static StringRef removeTemplateArgs ( StringRef  Name)
static

Definition at line 365 of file CodeViewDebug.cpp.

References Name.

◆ shouldAlwaysEmitCompleteClassType()

static bool shouldAlwaysEmitCompleteClassType ( const DICompositeType Ty)
static

◆ shouldEmitUdt()

static bool shouldEmitUdt ( const DIType T)
static

Definition at line 1566 of file CodeViewDebug.cpp.

◆ translateAccessFlags()

static MemberAccess translateAccessFlags ( unsigned  RecordTag,
unsigned  Flags 
)
static

Definition at line 2118 of file CodeViewDebug.cpp.

References llvm::DINode::FlagAccessibility, and llvm_unreachable.

◆ translateMethodKindFlags()

static MethodKind translateMethodKindFlags ( const DISubprogram SP,
bool  Introduced 
)
static

Definition at line 2140 of file CodeViewDebug.cpp.

References llvm_unreachable.

◆ translateMethodOptionFlags()

static MethodOptions translateMethodOptionFlags ( const DISubprogram SP)
static

Definition at line 2131 of file CodeViewDebug.cpp.

◆ translatePtrToMemberRep()

static PointerToMemberRepresentation translatePtrToMemberRep ( unsigned  SizeInBytes,
bool  IsPMF,
unsigned  Flags 
)
static

Definition at line 1909 of file CodeViewDebug.cpp.

References llvm::DINode::FlagPtrToMemberRep, and llvm_unreachable.