LLVM 22.0.0git
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/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/raw_ostream.h"
#include <cstdint>
#include <deque>
#include <map>
#include <string>
#include <utility>
#include <vector>

Go to the source code of this file.

Classes

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 ContributionCollection

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 65 of file DWARFContext.cpp.

Typedef Documentation

◆ ContributionCollection

Initial value:
std::vector<std::optional<StrOffsetsContributionDescriptor>>

Definition at line 780 of file DWARFContext.cpp.

◆ DWARFLineTable

Definition at line 67 of file DWARFContext.cpp.

Function Documentation

◆ collectContributionData()

ContributionCollection collectContributionData ( DWARFContext::unit_iterator_range Units)
static

Definition at line 786 of file DWARFContext.cpp.

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

Referenced by dumpStringOffsetsSection().

◆ createError()

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

◆ dumpAddrSection()

◆ dumpLoclistsSection()

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

◆ dumpPubTableSection()

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

◆ dumpRnglistsSection()

◆ dumpStringOffsetsSection()

◆ dumpUUID()

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

Dump the UUID load command.

Definition at line 759 of file DWARFContext.cpp.

References llvm::dyn_cast(), T, and llvm::raw_ostream::write_uuid().

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

◆ fixupIndex()

void fixupIndex ( DWARFContext & C,
DWARFUnitIndex & Index )

Definition at line 183 of file DWARFContext.cpp.

References llvm::CallingConv::C, fixupIndexV4(), and fixupIndexV5().

◆ fixupIndexV4()

◆ fixupIndexV5()

◆ getAccelTable()

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

Definition at line 191 of file DWARFContext.cpp.

References llvm::consumeError(), E(), and T.

◆ getExpressionFrameOffset()

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

◆ getFunctionNameAndStartLineForAddress()

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 1600 of file DWARFContext.cpp.

References llvm::SmallVectorTemplateCommon< T, typename >::empty(), and llvm::dwarf::toSectionedAddress().

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

◆ getSymbolInfo()

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 1911 of file DWARFContext.cpp.

References llvm::createError(), llvm::dyn_cast(), llvm::object::SectionRef::getAddress(), llvm::object::SymbolRef::getAddress(), llvm::object::SectionRef::getIndex(), llvm::object::SymbolRef::getSection(), llvm::object::ObjectFile::section_end(), llvm::object::SymbolicFile::symbol_end(), and llvm::Expected< T >::takeError().

◆ isRelocScattered()