1 //===-- DWARFDebugInfo.h ----------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef SymbolFileDWARF_DWARFDebugInfo_h_ 11 #define SymbolFileDWARF_DWARFDebugInfo_h_ 12 13 #include <vector> 14 #include <map> 15 16 #include "lldb/lldb-private.h" 17 #include "lldb/lldb-private.h" 18 #include "SymbolFileDWARF.h" 19 #include "DWARFDIE.h" 20 21 typedef std::multimap<const char*, dw_offset_t, CStringCompareFunctionObject> CStringToDIEMap; 22 typedef CStringToDIEMap::iterator CStringToDIEMapIter; 23 typedef CStringToDIEMap::const_iterator CStringToDIEMapConstIter; 24 25 class DWARFDebugInfo 26 { 27 public: 28 typedef dw_offset_t (*Callback)( 29 SymbolFileDWARF* dwarf2Data, 30 DWARFCompileUnit* cu, 31 DWARFDebugInfoEntry* die, 32 const dw_offset_t next_offset, 33 const uint32_t depth, 34 void* userData); 35 36 DWARFDebugInfo(); 37 void SetDwarfData(SymbolFileDWARF* dwarf2Data); 38 39 size_t GetNumCompileUnits(); 40 bool ContainsCompileUnit (const DWARFCompileUnit *cu) const; 41 DWARFCompileUnit* GetCompileUnitAtIndex (uint32_t idx); 42 DWARFCompileUnit* GetCompileUnit(dw_offset_t cu_offset, uint32_t* idx_ptr = NULL); 43 DWARFCompileUnit* GetCompileUnitContainingDIEOffset (dw_offset_t die_offset); 44 DWARFCompileUnit* GetCompileUnit(const DIERef& die_ref); 45 DWARFDIE GetDIEForDIEOffset(dw_offset_t die_offset); 46 DWARFDIE GetDIE (const DIERef& die_ref); 47 48 void Dump(lldb_private::Stream *s, const uint32_t die_offset, const uint32_t recurse_depth); 49 static void Parse(SymbolFileDWARF* parser, Callback callback, void* userData); 50 static void Verify(lldb_private::Stream *s, SymbolFileDWARF* dwarf2Data); 51 static void Dump(lldb_private::Stream *s, SymbolFileDWARF* dwarf2Data, const uint32_t die_offset, const uint32_t recurse_depth); 52 bool Find(const char* name, bool ignore_case, std::vector<dw_offset_t>& die_offsets) const; 53 bool Find(lldb_private::RegularExpression& re, std::vector<dw_offset_t>& die_offsets) const; 54 55 enum 56 { 57 eDumpFlag_Verbose = (1<<0), // Verbose dumping 58 eDumpFlag_ShowForm = (1<<1), // Show the DW_form type 59 eDumpFlag_ShowAncestors = (1<<2) // Show all parent DIEs when dumping single DIEs 60 }; 61 62 DWARFDebugAranges & 63 GetCompileUnitAranges (); 64 65 protected: 66 typedef std::shared_ptr<DWARFCompileUnit> DWARFCompileUnitSP; 67 68 static bool 69 OffsetLessThanCompileUnitOffset (dw_offset_t offset, const DWARFCompileUnitSP& cu_sp); 70 71 typedef std::vector<DWARFCompileUnitSP> CompileUnitColl; 72 73 //---------------------------------------------------------------------- 74 // Member variables 75 //---------------------------------------------------------------------- 76 SymbolFileDWARF* m_dwarf2Data; 77 CompileUnitColl m_compile_units; 78 std::unique_ptr<DWARFDebugAranges> m_cu_aranges_ap; // A quick address to compile unit table 79 80 private: 81 // All parsing needs to be done partially any managed by this class as accessors are called. 82 void ParseCompileUnitHeadersIfNeeded(); 83 84 DISALLOW_COPY_AND_ASSIGN (DWARFDebugInfo); 85 }; 86 87 #endif // SymbolFileDWARF_DWARFDebugInfo_h_ 88