]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - contrib/llvm-project/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h
Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
[FreeBSD/FreeBSD.git] / contrib / llvm-project / lldb / source / Plugins / SymbolFile / DWARF / DWARFDebugInfo.h
1 //===-- DWARFDebugInfo.h ----------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #ifndef SymbolFileDWARF_DWARFDebugInfo_h_
10 #define SymbolFileDWARF_DWARFDebugInfo_h_
11
12 #include <map>
13 #include <vector>
14
15 #include "DWARFDIE.h"
16 #include "DWARFTypeUnit.h"
17 #include "DWARFUnit.h"
18 #include "SymbolFileDWARF.h"
19 #include "lldb/lldb-private.h"
20 #include "llvm/Support/Error.h"
21
22 namespace lldb_private {
23 class DWARFContext;
24 }
25
26 class DWARFDebugInfo {
27 public:
28   typedef dw_offset_t (*Callback)(SymbolFileDWARF *dwarf2Data,
29                                   DWARFUnit *cu,
30                                   DWARFDebugInfoEntry *die,
31                                   const dw_offset_t next_offset,
32                                   const uint32_t depth, void *userData);
33
34   explicit DWARFDebugInfo(SymbolFileDWARF &dwarf,
35                           lldb_private::DWARFContext &context);
36
37   size_t GetNumUnits();
38   DWARFUnit *GetUnitAtIndex(lldb::user_id_t idx);
39   DWARFUnit *GetUnitAtOffset(DIERef::Section section, dw_offset_t cu_offset,
40                              uint32_t *idx_ptr = nullptr);
41   DWARFUnit *GetUnitContainingDIEOffset(DIERef::Section section,
42                                         dw_offset_t die_offset);
43   DWARFUnit *GetUnit(const DIERef &die_ref);
44   DWARFTypeUnit *GetTypeUnitForHash(uint64_t hash);
45   bool ContainsTypeUnits();
46   DWARFDIE GetDIEForDIEOffset(DIERef::Section section,
47                               dw_offset_t die_offset);
48   DWARFDIE GetDIE(const DIERef &die_ref);
49
50   enum {
51     eDumpFlag_Verbose = (1 << 0),  // Verbose dumping
52     eDumpFlag_ShowForm = (1 << 1), // Show the DW_form type
53     eDumpFlag_ShowAncestors =
54         (1 << 2) // Show all parent DIEs when dumping single DIEs
55   };
56
57   llvm::Expected<DWARFDebugAranges &> GetCompileUnitAranges();
58
59 protected:
60   typedef std::vector<DWARFUnitSP> UnitColl;
61
62   SymbolFileDWARF &m_dwarf;
63   lldb_private::DWARFContext &m_context;
64   UnitColl m_units;
65   std::unique_ptr<DWARFDebugAranges>
66       m_cu_aranges_up; // A quick address to compile unit table
67
68   std::vector<std::pair<uint64_t, uint32_t>> m_type_hash_to_unit_index;
69
70 private:
71   // All parsing needs to be done partially any managed by this class as
72   // accessors are called.
73   void ParseUnitHeadersIfNeeded();
74
75   void ParseUnitsFor(DIERef::Section section);
76
77   uint32_t FindUnitIndex(DIERef::Section section, dw_offset_t offset);
78
79   DISALLOW_COPY_AND_ASSIGN(DWARFDebugInfo);
80 };
81
82 #endif // SymbolFileDWARF_DWARFDebugInfo_h_