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