LLVM 19.0.0git
Classes | Macros | Typedefs | Functions
DWARFContext.cpp File Reference
#include "llvm/DebugInfo/DWARF/DWARFContext.h"
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/BinaryFormat/Dwarf.h"
#include "llvm/DebugInfo/DWARF/DWARFAcceleratorTable.h"
#include "llvm/DebugInfo/DWARF/DWARFCompileUnit.h"
#include "llvm/DebugInfo/DWARF/DWARFDataExtractor.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugAbbrev.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugAddr.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugArangeSet.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugAranges.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugFrame.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugLine.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugLoc.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugMacro.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugPubTable.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugRangeList.h"
#include "llvm/DebugInfo/DWARF/DWARFDebugRnglists.h"
#include "llvm/DebugInfo/DWARF/DWARFDie.h"
#include "llvm/DebugInfo/DWARF/DWARFFormValue.h"
#include "llvm/DebugInfo/DWARF/DWARFGdbIndex.h"
#include "llvm/DebugInfo/DWARF/DWARFListTable.h"
#include "llvm/DebugInfo/DWARF/DWARFLocationExpression.h"
#include "llvm/DebugInfo/DWARF/DWARFRelocMap.h"
#include "llvm/DebugInfo/DWARF/DWARFSection.h"
#include "llvm/DebugInfo/DWARF/DWARFTypeUnit.h"
#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
#include "llvm/DebugInfo/DWARF/DWARFVerifier.h"
#include "llvm/MC/TargetRegistry.h"
#include "llvm/Object/Decompressor.h"
#include "llvm/Object/MachO.h"
#include "llvm/Object/ObjectFile.h"
#include "llvm/Object/RelocationResolver.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/DataExtractor.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/LEB128.h"
#include "llvm/Support/FormatVariadic.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cstdint>
#include <deque>
#include <map>
#include <string>
#include <utility>
#include <vector>

Go to the source code of this file.

Classes

class  ThreadUnsafeDWARFContextState
 
class  ThreadSafeState
 
struct  SymInfo
 SymInfo contains information about symbol: it's address and section index which is -1LL for absolute symbols. More...
 

Macros

#define DEBUG_TYPE   "dwarf"
 

Typedefs

using DWARFLineTable = DWARFDebugLine::LineTable
 
using FileLineInfoKind = DILineInfoSpecifier::FileLineInfoKind
 
using FunctionNameKind = DILineInfoSpecifier::FunctionNameKind
 
using ContributionCollection = std::vector< std::optional< StrOffsetsContributionDescriptor > >
 

Functions

void fixupIndexV4 (DWARFContext &C, DWARFUnitIndex &Index)
 
void fixupIndexV5 (DWARFContext &C, DWARFUnitIndex &Index)
 
void fixupIndex (DWARFContext &C, DWARFUnitIndex &Index)
 
template<typename T >
static TgetAccelTable (std::unique_ptr< T > &Cache, const DWARFObject &Obj, const DWARFSection &Section, StringRef StringSection, bool IsLittleEndian)
 
static void dumpUUID (raw_ostream &OS, const ObjectFile &Obj)
 Dump the UUID load command.
 
static ContributionCollection collectContributionData (DWARFContext::unit_iterator_range Units)
 
static void dumpStringOffsetsSection (raw_ostream &OS, DIDumpOptions DumpOpts, StringRef SectionName, const DWARFObject &Obj, const DWARFSection &StringOffsetsSection, StringRef StringSection, DWARFContext::unit_iterator_range Units, bool LittleEndian)
 
static void dumpAddrSection (raw_ostream &OS, DWARFDataExtractor &AddrData, DIDumpOptions DumpOpts, uint16_t Version, uint8_t AddrSize)
 
static void dumpRnglistsSection (raw_ostream &OS, DWARFDataExtractor &rnglistData, llvm::function_ref< std::optional< object::SectionedAddress >(uint32_t)> LookupPooledAddress, DIDumpOptions DumpOpts)
 
static void dumpLoclistsSection (raw_ostream &OS, DIDumpOptions DumpOpts, DWARFDataExtractor Data, const DWARFObject &Obj, std::optional< uint64_t > DumpOffset)
 
static void dumpPubTableSection (raw_ostream &OS, DIDumpOptions DumpOpts, DWARFDataExtractor Data, bool GnuStyle)
 
static bool getFunctionNameAndStartLineForAddress (DWARFCompileUnit *CU, uint64_t Address, FunctionNameKind Kind, DILineInfoSpecifier::FileLineInfoKind FileNameKind, std::string &FunctionName, std::string &StartFile, uint32_t &StartLine, std::optional< uint64_t > &StartAddress)
 TODO: change input parameter from "uint64_t Address" into "SectionedAddress Address".
 
static std::optional< int64_t > getExpressionFrameOffset (ArrayRef< uint8_t > Expr, std::optional< unsigned > FrameBaseReg)
 
static Error createError (const Twine &Reason, llvm::Error E)
 
static Expected< SymInfogetSymbolInfo (const object::ObjectFile &Obj, const RelocationRef &Reloc, const LoadedObjectInfo *L, std::map< SymbolRef, SymInfo > &Cache)
 Returns the address of symbol relocation used against and a section index.
 
static bool isRelocScattered (const object::ObjectFile &Obj, const RelocationRef &Reloc)
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "dwarf"

Definition at line 67 of file DWARFContext.cpp.

Typedef Documentation

◆ ContributionCollection

using ContributionCollection = std::vector<std::optional<StrOffsetsContributionDescriptor> >

Definition at line 784 of file DWARFContext.cpp.

◆ DWARFLineTable

Definition at line 69 of file DWARFContext.cpp.

◆ FileLineInfoKind

Definition at line 70 of file DWARFContext.cpp.

◆ FunctionNameKind

Definition at line 71 of file DWARFContext.cpp.

Function Documentation

◆ collectContributionData()

static ContributionCollection collectContributionData ( DWARFContext::unit_iterator_range  Units)
static

Definition at line 790 of file DWARFContext.cpp.

References llvm::CallingConv::C, and llvm::sort().

Referenced by dumpStringOffsetsSection().

◆ createError()

static Error createError ( const Twine Reason,
llvm::Error  E 
)
static

Definition at line 1896 of file DWARFContext.cpp.

References llvm::inconvertibleErrorCode(), and llvm::dwarf::toString().

◆ dumpAddrSection()

static void dumpAddrSection ( raw_ostream OS,
DWARFDataExtractor AddrData,
DIDumpOptions  DumpOpts,
uint16_t  Version,
uint8_t  AddrSize 
)
static

◆ dumpLoclistsSection()

static void dumpLoclistsSection ( raw_ostream OS,
DIDumpOptions  DumpOpts,
DWARFDataExtractor  Data,
const DWARFObject Obj,
std::optional< uint64_t DumpOffset 
)
static

◆ dumpPubTableSection()

static void dumpPubTableSection ( raw_ostream OS,
DIDumpOptions  DumpOpts,
DWARFDataExtractor  Data,
bool  GnuStyle 
)
static

◆ dumpRnglistsSection()

static void dumpRnglistsSection ( raw_ostream OS,
DWARFDataExtractor rnglistData,
llvm::function_ref< std::optional< object::SectionedAddress >(uint32_t)>  LookupPooledAddress,
DIDumpOptions  DumpOpts 
)
static

◆ dumpStringOffsetsSection()

static void dumpStringOffsetsSection ( raw_ostream OS,
DIDumpOptions  DumpOpts,
StringRef  SectionName,
const DWARFObject Obj,
const DWARFSection StringOffsetsSection,
StringRef  StringSection,
DWARFContext::unit_iterator_range  Units,
bool  LittleEndian 
)
static

◆ dumpUUID()

static void dumpUUID ( raw_ostream OS,
const ObjectFile Obj 
)
static

Dump the UUID load command.

Definition at line 763 of file DWARFContext.cpp.

References OS, and llvm::raw_ostream::write_uuid().

Referenced by llvm::DWARFContext::dump().

◆ fixupIndex()

void fixupIndex ( DWARFContext C,
DWARFUnitIndex Index 
)

◆ fixupIndexV4()

void fixupIndexV4 ( DWARFContext C,
DWARFUnitIndex Index 
)

◆ fixupIndexV5()

void fixupIndexV5 ( DWARFContext C,
DWARFUnitIndex Index 
)

◆ getAccelTable()

template<typename T >
static T & getAccelTable ( std::unique_ptr< T > &  Cache,
const DWARFObject Obj,
const DWARFSection Section,
StringRef  StringSection,
bool  IsLittleEndian 
)
static

◆ getExpressionFrameOffset()

static std::optional< int64_t > getExpressionFrameOffset ( ArrayRef< uint8_t >  Expr,
std::optional< unsigned FrameBaseReg 
)
static

◆ getFunctionNameAndStartLineForAddress()

static bool getFunctionNameAndStartLineForAddress ( DWARFCompileUnit CU,
uint64_t  Address,
FunctionNameKind  Kind,
DILineInfoSpecifier::FileLineInfoKind  FileNameKind,
std::string &  FunctionName,
std::string &  StartFile,
uint32_t StartLine,
std::optional< uint64_t > &  StartAddress 
)
static

TODO: change input parameter from "uint64_t Address" into "SectionedAddress Address".

Definition at line 1601 of file DWARFContext.cpp.

References llvm::Address, llvm::SmallVectorBase< Size_T >::empty(), Name, and llvm::dwarf::toSectionedAddress().

Referenced by llvm::DWARFContext::getLineInfoForAddress(), and llvm::DWARFContext::getLineInfoForAddressRange().

◆ getSymbolInfo()

static Expected< SymInfo > getSymbolInfo ( const object::ObjectFile Obj,
const RelocationRef Reloc,
const LoadedObjectInfo L,
std::map< SymbolRef, SymInfo > &  Cache 
)
static

Returns the address of symbol relocation used against and a section index.

Used for futher relocations computation. Symbol's section load address is

Definition at line 1910 of file DWARFContext.cpp.

References llvm::createError(), llvm::object::SectionRef::getAddress(), llvm::object::SectionRef::getIndex(), llvm::object::RelocationRef::getRawDataRefImpl(), llvm::object::RelocationRef::getSymbol(), llvm::object::ObjectFile::section_end(), Sym, llvm::object::SymbolicFile::symbol_end(), and llvm::Expected< T >::takeError().

◆ isRelocScattered()

static bool isRelocScattered ( const object::ObjectFile Obj,
const RelocationRef Reloc 
)
static