1 //===-- DWARFDebugInfo.h ----------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef SymbolFileDWARF_DWARFDebugInfo_h_
11 #define SymbolFileDWARF_DWARFDebugInfo_h_
16 #include "lldb/lldb-private.h"
17 #include "lldb/lldb-private.h"
18 #include "SymbolFileDWARF.h"
20 typedef std::multimap<const char*, dw_offset_t, CStringCompareFunctionObject> CStringToDIEMap;
21 typedef CStringToDIEMap::iterator CStringToDIEMapIter;
22 typedef CStringToDIEMap::const_iterator CStringToDIEMapConstIter;
24 typedef std::shared_ptr<DWARFCompileUnit> DWARFCompileUnitSP;
29 typedef dw_offset_t (*Callback)(
30 SymbolFileDWARF* dwarf2Data,
31 DWARFCompileUnitSP& cu_shared_ptr,
32 DWARFDebugInfoEntry* die,
33 const dw_offset_t next_offset,
38 void SetDwarfData(SymbolFileDWARF* dwarf2Data);
41 const dw_addr_t address,
42 const dw_offset_t cu_offset, // Can be valid (find in .debug_aranges), or DW_INVALID_OFFSET if we need to search manually
43 DWARFCompileUnitSP& cu_shared_ptr,
44 DWARFDebugInfoEntry** function_die,
45 DWARFDebugInfoEntry** block_die);
47 void AddCompileUnit(DWARFCompileUnitSP& cu);
48 size_t GetNumCompileUnits();
49 bool ContainsCompileUnit (const DWARFCompileUnit *cu) const;
50 DWARFCompileUnit* GetCompileUnitAtIndex(uint32_t idx);
51 DWARFCompileUnitSP GetCompileUnit(dw_offset_t cu_offset, uint32_t* idx_ptr = NULL);
52 DWARFCompileUnitSP GetCompileUnitContainingDIE(dw_offset_t die_offset);
54 DWARFDebugInfoEntry* GetDIEPtr(dw_offset_t die_offset, DWARFCompileUnitSP* cu_sp_ptr);
55 DWARFDebugInfoEntry* GetDIEPtrWithCompileUnitHint (dw_offset_t die_offset, DWARFCompileUnit**cu_handle);
57 const DWARFDebugInfoEntry* GetDIEPtrContainingOffset(dw_offset_t die_offset, DWARFCompileUnitSP* cu_sp_ptr);
59 void Dump(lldb_private::Stream *s, const uint32_t die_offset, const uint32_t recurse_depth);
60 static void Parse(SymbolFileDWARF* parser, Callback callback, void* userData);
61 static void Verify(lldb_private::Stream *s, SymbolFileDWARF* dwarf2Data);
62 static void Dump(lldb_private::Stream *s, SymbolFileDWARF* dwarf2Data, const uint32_t die_offset, const uint32_t recurse_depth);
63 bool Find(const char* name, bool ignore_case, std::vector<dw_offset_t>& die_offsets) const;
64 bool Find(lldb_private::RegularExpression& re, std::vector<dw_offset_t>& die_offsets) const;
68 eDumpFlag_Verbose = (1<<0), // Verbose dumping
69 eDumpFlag_ShowForm = (1<<1), // Show the DW_form type
70 eDumpFlag_ShowAncestors = (1<<2) // Show all parent DIEs when dumping single DIEs
74 GetCompileUnitAranges ();
77 SymbolFileDWARF* m_dwarf2Data;
78 typedef std::vector<DWARFCompileUnitSP> CompileUnitColl;
79 CompileUnitColl m_compile_units;
80 std::unique_ptr<DWARFDebugAranges> m_cu_aranges_ap; // A quick address to compile unit table
83 // All parsing needs to be done partially any managed by this class as accessors are called.
84 void ParseCompileUnitHeadersIfNeeded();
86 DISALLOW_COPY_AND_ASSIGN (DWARFDebugInfo);
89 #endif // SymbolFileDWARF_DWARFDebugInfo_h_