LLVM 22.0.0git
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()

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

◆ canUseReferenceType()

bool canUseReferenceType ( const DbgVariableLocation & Loc)
static

Definition at line 1347 of file CodeViewDebug.cpp.

◆ dwarfCCToCodeView()

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 2012 of file CodeViewDebug.cpp.

References llvm::codeview::NearC, llvm::codeview::NearFast, llvm::codeview::NearPascal, llvm::codeview::NearStdCall, llvm::codeview::NearVector, and llvm::codeview::ThisCall.

◆ emitNullTerminatedSymbolName()

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 )

Definition at line 3480 of file CodeViewDebug.cpp.

References assert(), E(), llvm::MachineFunction::getJumpTableInfo(), I, isThumb(), and MBB.

◆ formatNestedName()

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

Definition at line 301 of file CodeViewDebug.cpp.

References llvm::reverse().

◆ getCommonClassOptions()

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 2222 of file CodeViewDebug.cpp.

References llvm::DIScope::getScope(), llvm::codeview::HasUniqueName, llvm::isa(), llvm::codeview::Nested, llvm::codeview::None, and llvm::codeview::Scoped.

◆ getFunctionOptions()

◆ getPrettyScopeName()

StringRef getPrettyScopeName ( const DIScope * Scope)
static

Definition at line 262 of file CodeViewDebug.cpp.

References llvm::StringRef::empty().

◆ getRecordKind()

TypeRecordKind getRecordKind ( const DICompositeType * Ty)
static

Definition at line 2209 of file CodeViewDebug.cpp.

References llvm_unreachable.

◆ getStringIdTypeIdx()

TypeIndex getStringIdTypeIdx ( GlobalTypeTableBuilder & TypeTable,
StringRef S )
static

◆ getSymbolName()

◆ isFloatDIType()

bool isFloatDIType ( const DIType * Ty)
static

Definition at line 3406 of file CodeViewDebug.cpp.

References assert(), llvm::cast(), llvm::dyn_cast(), llvm::isa(), isFloatDIType(), and T.

Referenced by isFloatDIType().

◆ isNonTrivial()

bool isNonTrivial ( const DICompositeType * DCTy)
static

Definition at line 421 of file CodeViewDebug.cpp.

References llvm::DIType::getFlags().

Referenced by getFunctionOptions().

◆ isUsableDebugLoc()

bool isUsableDebugLoc ( DebugLoc DL)
static

Definition at line 3133 of file CodeViewDebug.cpp.

References DL.

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

◆ mapArchToCVCPUType()

◆ MapDWLangToCVLang()

SourceLanguage MapDWLangToCVLang ( unsigned DWLang)
static

Definition at line 572 of file CodeViewDebug.cpp.

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

◆ needsReferenceType()

bool needsReferenceType ( const DbgVariableLocation & Loc)
static

Definition at line 1351 of file CodeViewDebug.cpp.

◆ parseVersion()

Version parseVersion ( StringRef Name)
static

Definition at line 858 of file CodeViewDebug.cpp.

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

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

◆ removeTemplateArgs()

StringRef removeTemplateArgs ( StringRef Name)
static

Definition at line 369 of file CodeViewDebug.cpp.

◆ shouldAlwaysEmitCompleteClassType()

bool shouldAlwaysEmitCompleteClassType ( const DICompositeType * Ty)
static

Definition at line 2437 of file CodeViewDebug.cpp.

◆ shouldEmitUdt()

bool shouldEmitUdt ( const DIType * T)
static

Definition at line 1615 of file CodeViewDebug.cpp.

References llvm::dyn_cast(), and T.

◆ translateAccessFlags()

◆ translateMethodKindFlags()

◆ translateMethodOptionFlags()

MethodOptions translateMethodOptionFlags ( const DISubprogram * SP)
static

Definition at line 2180 of file CodeViewDebug.cpp.

References llvm::codeview::CompilerGenerated, and llvm::codeview::None.

◆ translatePtrToMemberRep()