1 //===-- DWARFDebugInfo.h ----------------------------------------*- C++ -*-===//
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
7 //===----------------------------------------------------------------------===//
9 #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGINFO_H
10 #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGINFO_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"
22 namespace lldb_private::plugin
{
26 class DWARFDebugInfo
{
28 typedef dw_offset_t (*Callback
)(SymbolFileDWARF
*dwarf2Data
, DWARFUnit
*cu
,
29 DWARFDebugInfoEntry
*die
,
30 const dw_offset_t next_offset
,
31 const uint32_t depth
, void *userData
);
33 explicit DWARFDebugInfo(SymbolFileDWARF
&dwarf
, DWARFContext
&context
);
36 DWARFUnit
*GetUnitAtIndex(size_t idx
);
37 DWARFUnit
*GetUnitAtOffset(DIERef::Section section
, dw_offset_t cu_offset
,
38 uint32_t *idx_ptr
= nullptr);
39 DWARFUnit
*GetUnitContainingDIEOffset(DIERef::Section section
,
40 dw_offset_t die_offset
);
41 DWARFUnit
*GetSkeletonUnit(DWARFUnit
*dwo_unit
);
42 DWARFTypeUnit
*GetTypeUnitForHash(uint64_t hash
);
43 bool ContainsTypeUnits();
44 DWARFDIE
GetDIE(DIERef::Section section
, dw_offset_t die_offset
);
47 eDumpFlag_Verbose
= (1 << 0), // Verbose dumping
48 eDumpFlag_ShowForm
= (1 << 1), // Show the DW_form type
49 eDumpFlag_ShowAncestors
=
50 (1 << 2) // Show all parent DIEs when dumping single DIEs
53 const DWARFDebugAranges
&GetCompileUnitAranges();
55 const std::shared_ptr
<SymbolFileDWARFDwo
> &GetDwpSymbolFile();
58 typedef std::vector
<DWARFUnitSP
> UnitColl
;
60 SymbolFileDWARF
&m_dwarf
;
61 DWARFContext
&m_context
;
63 llvm::once_flag m_units_once_flag
;
66 std::unique_ptr
<DWARFDebugAranges
>
67 m_cu_aranges_up
; // A quick address to compile unit table
69 std::vector
<std::pair
<uint64_t, uint32_t>> m_type_hash_to_unit_index
;
70 llvm::DenseMap
<uint64_t, DWARFUnit
*> m_dwarf5_dwo_id_to_skeleton_unit
;
71 llvm::DenseMap
<uint64_t, DWARFUnit
*> m_dwarf4_dwo_id_to_skeleton_unit
;
72 llvm::once_flag m_dwarf4_dwo_id_to_skeleton_unit_once_flag
;
75 // All parsing needs to be done partially any managed by this class as
76 // accessors are called.
77 void ParseUnitHeadersIfNeeded();
79 void ParseUnitsFor(DIERef::Section section
);
81 uint32_t FindUnitIndex(DIERef::Section section
, dw_offset_t offset
);
83 DWARFDebugInfo(const DWARFDebugInfo
&) = delete;
84 const DWARFDebugInfo
&operator=(const DWARFDebugInfo
&) = delete;
87 } // namespace lldb_private::plugin
89 #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGINFO_H