LLVM  8.0.1
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/RelocVisitor.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/DataExtractor.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/Format.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/Path.h"
#include "llvm/Support/TargetRegistry.h"
#include "llvm/Support/WithColor.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 dumpDWARFv5StringOffsetsSection (raw_ostream &OS, StringRef SectionName, const DWARFObject &Obj, const DWARFSection &StringOffsetsSection, StringRef StringSection, DWARFContext::unit_iterator_range Units, bool LittleEndian)
 
static void dumpStringOffsetsSection (raw_ostream &OS, StringRef SectionName, const DWARFObject &Obj, const DWARFSection &StringOffsetsSection, StringRef StringSection, DWARFContext::unit_iterator_range Units, bool LittleEndian, unsigned MaxVersion)
 
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< SectionedAddress >(uint32_t)> LookupPooledAddress, DIDumpOptions DumpOpts)
 
static void dumpLoclistsSection (raw_ostream &OS, DIDumpOptions DumpOpts, DWARFDataExtractor Data, const MCRegisterInfo *MRI, Optional< uint64_t > DumpOffset)
 
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, std::string &FunctionName, uint32_t &StartLine)
 
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 62 of file DWARFContext.cpp.

Typedef Documentation

◆ ContributionCollection

Definition at line 97 of file DWARFContext.cpp.

◆ DWARFLineTable

Definition at line 64 of file DWARFContext.cpp.

◆ FileLineInfoKind

Definition at line 65 of file DWARFContext.cpp.

◆ FunctionNameKind

Definition at line 66 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 1148 of file DWARFContext.cpp.

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

Referenced by getSymbolInfo().

◆ dumpAddrSection()

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

Definition at line 249 of file DWARFContext.cpp.

References llvm::DataExtractor::isValidOffset().

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

◆ dumpDWARFv5StringOffsetsSection()

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

◆ dumpLoclistsSection()

static void dumpLoclistsSection ( raw_ostream OS,
DIDumpOptions  DumpOpts,
DWARFDataExtractor  Data,
const MCRegisterInfo MRI,
Optional< uint64_t >  DumpOffset 
)
static

◆ dumpRnglistsSection()

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

Definition at line 273 of file DWARFContext.cpp.

References llvm::DataExtractor::isValidOffset().

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

◆ dumpStringOffsetsSection()

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

◆ dumpUUID()

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

Dump the UUID load command.

Definition at line 75 of file DWARFContext.cpp.

References llvm::dyn_cast(), llvm::Triple::getArchName(), llvm::Intrinsic::memcpy, 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

◆ getFunctionNameAndStartLineForAddress()

static bool getFunctionNameAndStartLineForAddress ( DWARFCompileUnit CU,
uint64_t  Address,
FunctionNameKind  Kind,
std::string &  FunctionName,
uint32_t StartLine 
)
static

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

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

◆ isRelocScattered()

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

Definition at line 1217 of file DWARFContext.cpp.

References llvm::dyn_cast().