forked from OSchip/llvm-project
88 lines
3.4 KiB
C++
88 lines
3.4 KiB
C++
//===-- DWARFDebugInfo.h ----------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef liblldb_DWARFDebugInfo_h_
|
|
#define SymbolFileDWARF_DWARFDebugInfo_h_
|
|
|
|
#include <vector>
|
|
#include <map>
|
|
|
|
#include "lldb/lldb-private.h"
|
|
#include "lldb/lldb-private.h"
|
|
#include "SymbolFileDWARF.h"
|
|
|
|
typedef std::multimap<const char*, dw_offset_t, CStringCompareFunctionObject> CStringToDIEMap;
|
|
typedef CStringToDIEMap::iterator CStringToDIEMapIter;
|
|
typedef CStringToDIEMap::const_iterator CStringToDIEMapConstIter;
|
|
|
|
typedef lldb::SharedPtr<DWARFCompileUnit>::Type DWARFCompileUnitSP;
|
|
|
|
class DWARFDebugInfo
|
|
{
|
|
public:
|
|
typedef dw_offset_t (*Callback)(
|
|
SymbolFileDWARF* dwarf2Data,
|
|
DWARFCompileUnitSP& cu_shared_ptr,
|
|
DWARFDebugInfoEntry* die,
|
|
const dw_offset_t next_offset,
|
|
const uint32_t depth,
|
|
void* userData);
|
|
|
|
DWARFDebugInfo();
|
|
void SetDwarfData(SymbolFileDWARF* dwarf2Data);
|
|
bool BuildFunctionAddressRangeTable(DWARFDebugAranges* debug_aranges);
|
|
|
|
bool LookupAddress(
|
|
const dw_addr_t address,
|
|
const dw_offset_t cu_offset, // Can be valid (find in .debug_aranges), or DW_INVALID_OFFSET if we need to search manually
|
|
DWARFCompileUnitSP& cu_shared_ptr,
|
|
DWARFDebugInfoEntry** function_die,
|
|
DWARFDebugInfoEntry** block_die);
|
|
|
|
void AddCompileUnit(DWARFCompileUnitSP& cu);
|
|
uint32_t GetNumCompileUnits();
|
|
DWARFCompileUnit* GetCompileUnitAtIndex(uint32_t idx);
|
|
DWARFCompileUnitSP GetCompileUnit(dw_offset_t cu_offset, uint32_t* idx_ptr = NULL);
|
|
DWARFCompileUnitSP GetCompileUnitContainingDIE(dw_offset_t die_offset);
|
|
|
|
DWARFDebugInfoEntry* GetDIEPtr(dw_offset_t die_offset, DWARFCompileUnitSP* cu_sp_ptr);
|
|
DWARFDebugInfoEntry* GetDIEPtrWithCompileUnitHint (dw_offset_t die_offset, DWARFCompileUnit**cu_handle);
|
|
|
|
const DWARFDebugInfoEntry* GetDIEPtrContainingOffset(dw_offset_t die_offset, DWARFCompileUnitSP* cu_sp_ptr);
|
|
|
|
void Dump(lldb_private::Stream *s, const uint32_t die_offset, const uint32_t recurse_depth);
|
|
static void Parse(SymbolFileDWARF* parser, Callback callback, void* userData);
|
|
static void Verify(lldb_private::Stream *s, SymbolFileDWARF* dwarf2Data);
|
|
static void Dump(lldb_private::Stream *s, SymbolFileDWARF* dwarf2Data, const uint32_t die_offset, const uint32_t recurse_depth);
|
|
bool Find(const char* name, bool ignore_case, std::vector<dw_offset_t>& die_offsets) const;
|
|
bool Find(lldb_private::RegularExpression& re, std::vector<dw_offset_t>& die_offsets) const;
|
|
|
|
enum
|
|
{
|
|
eDumpFlag_Verbose = (1<<0), // Verbose dumping
|
|
eDumpFlag_ShowForm = (1<<1), // Show the DW_form type
|
|
eDumpFlag_ShowAncestors = (1<<2) // Show all parent DIEs when dumping single DIEs
|
|
};
|
|
|
|
|
|
protected:
|
|
SymbolFileDWARF* m_dwarf2Data;
|
|
typedef std::vector<DWARFCompileUnitSP> CompileUnitColl;
|
|
|
|
CompileUnitColl m_compile_units;
|
|
|
|
private:
|
|
// All parsing needs to be done partially any managed by this class as accessors are called.
|
|
void ParseCompileUnitHeadersIfNeeded();
|
|
|
|
DISALLOW_COPY_AND_ASSIGN (DWARFDebugInfo);
|
|
};
|
|
|
|
#endif // SymbolFileDWARF_DWARFDebugInfo_h_
|