LLVM  14.0.0git
Classes | Macros | Typedefs | Functions
DWARFContext.cpp File Reference
#include "llvm/DebugInfo/DWARF/DWARFContext.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/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/DWARFSection.h"
#include "llvm/DebugInfo/DWARF/DWARFUnitIndex.h"
#include "llvm/DebugInfo/DWARF/DWARFVerifier.h"
#include "llvm/MC/MCRegisterInfo.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/TargetRegistry.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cstdint>
#include <deque>
#include <map>
#include <string>
#include <utility>
#include <vector>
Include dependency graph for DWARFContext.cpp:

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 FileLineInfoKind = DILineInfoSpecifier::FileLineInfoKind
 
using FunctionNameKind = DILineInfoSpecifier::FunctionNameKind
 
using ContributionCollection = std::vector< Optional< StrOffsetsContributionDescriptor > >
 

Functions

static void dumpUUID (raw_ostream &OS, const ObjectFile &Obj)
 Dump the UUID load command. More...
 
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< Optional< object::SectionedAddress >(uint32_t)> LookupPooledAddress, DIDumpOptions DumpOpts)
 
static void dumpLoclistsSection (raw_ostream &OS, DIDumpOptions DumpOpts, DWARFDataExtractor Data, const MCRegisterInfo *MRI, const DWARFObject &Obj, Optional< uint64_t > DumpOffset)
 
static void dumpPubTableSection (raw_ostream &OS, DIDumpOptions DumpOpts, DWARFDataExtractor Data, bool GnuStyle)
 
template<typename T >
static TgetAccelTable (std::unique_ptr< T > &Cache, const DWARFObject &Obj, const DWARFSection &Section, StringRef StringSection, bool IsLittleEndian)
 
static bool getFunctionNameAndStartLineForAddress (DWARFCompileUnit *CU, uint64_t Address, FunctionNameKind Kind, DILineInfoSpecifier::FileLineInfoKind FileNameKind, std::string &FunctionName, std::string &StartFile, uint32_t &StartLine, Optional< uint64_t > &StartAddress)
 TODO: change input parameter from "uint64_t Address" into "SectionedAddress Address". More...
 
static Optional< uint64_t > getTypeSize (DWARFDie Type, uint64_t PointerSize)
 
static Optional< int64_t > getExpressionFrameOffset (ArrayRef< uint8_t > Expr, 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. More...
 
static bool isRelocScattered (const object::ObjectFile &Obj, const RelocationRef &Reloc)
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "dwarf"

Definition at line 61 of file DWARFContext.cpp.

Typedef Documentation

◆ ContributionCollection

Definition at line 100 of file DWARFContext.cpp.

◆ DWARFLineTable

Definition at line 63 of file DWARFContext.cpp.

◆ FileLineInfoKind

Definition at line 64 of file DWARFContext.cpp.

◆ FunctionNameKind

Definition at line 65 of file DWARFContext.cpp.

Function Documentation

◆ collectContributionData()

static ContributionCollection collectContributionData ( DWARFContext::unit_iterator_range  Units)
static

◆ createError()

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

Definition at line 1420 of file DWARFContext.cpp.

References E, llvm::inconvertibleErrorCode(), move, and llvm::toString().

◆ dumpAddrSection()

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

Definition at line 217 of file DWARFContext.cpp.

References llvm::DataExtractor::isValidOffset(), and Offset.

◆ dumpLoclistsSection()

static void dumpLoclistsSection ( raw_ostream OS,
DIDumpOptions  DumpOpts,
DWARFDataExtractor  Data,
const MCRegisterInfo MRI,
const DWARFObject Obj,
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< Optional< object::SectionedAddress >(uint32_t)>  LookupPooledAddress,
DIDumpOptions  DumpOpts 
)
static

Definition at line 240 of file DWARFContext.cpp.

References llvm::DataExtractor::isValidOffset(), and Offset.

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

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

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

◆ 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 Optional<int64_t> getExpressionFrameOffset ( ArrayRef< uint8_t >  Expr,
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,
Optional< uint64_t > &  StartAddress 
)
static

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

Definition at line 1038 of file DWARFContext.cpp.

References llvm::Address, llvm::None, 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 1434 of file DWARFContext.cpp.

References llvm::createError(), llvm::object::SymbolRef::getAddress(), llvm::object::SymbolRef::getSection(), llvm::LoadedObjectInfo::getSectionLoadAddress(), llvm::MipsISD::Ret, llvm::object::ObjectFile::section_end(), llvm::object::SymbolicFile::symbol_end(), and llvm::Expected< T >::takeError().

◆ getTypeSize()

static Optional<uint64_t> getTypeSize ( DWARFDie  Type,
uint64_t  PointerSize 
)
static

Definition at line 1072 of file DWARFContext.cpp.

References llvm::jitlink::x86_64::PointerSize, and llvm::Check::Size.

◆ isRelocScattered()

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

Definition at line 1489 of file DWARFContext.cpp.