]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm/tools/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h
MFV r316454,316455:
[FreeBSD/FreeBSD.git] / contrib / llvm / tools / lldb / source / Plugins / SymbolFile / DWARF / DWARFDebugInfo.h
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_