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_
17 #include "SymbolFileDWARF.h"
18 #include "lldb/Core/STLUtils.h"
19 #include "lldb/lldb-private.h"
21 typedef std::multimap<const char *, dw_offset_t, CStringCompareFunctionObject>
23 typedef CStringToDIEMap::iterator CStringToDIEMapIter;
24 typedef CStringToDIEMap::const_iterator CStringToDIEMapConstIter;
26 class DWARFDebugInfo {
28 typedef dw_offset_t (*Callback)(SymbolFileDWARF *dwarf2Data,
30 DWARFDebugInfoEntry *die,
31 const dw_offset_t next_offset,
32 const uint32_t depth, void *userData);
35 void SetDwarfData(SymbolFileDWARF *dwarf2Data);
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);
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;
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
65 DWARFDebugAranges &GetCompileUnitAranges();
68 typedef std::shared_ptr<DWARFCompileUnit> DWARFCompileUnitSP;
70 static bool OffsetLessThanCompileUnitOffset(dw_offset_t offset,
71 const DWARFCompileUnitSP &cu_sp);
73 typedef std::vector<DWARFCompileUnitSP> CompileUnitColl;
75 //----------------------------------------------------------------------
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
84 // All parsing needs to be done partially any managed by this class as
85 // accessors are called.
86 void ParseCompileUnitHeadersIfNeeded();
88 DISALLOW_COPY_AND_ASSIGN(DWARFDebugInfo);
91 #endif // SymbolFileDWARF_DWARFDebugInfo_h_