LLDB
mainline
llvm-project
lldb
source
Plugins
SymbolFile
DWARF
DWARFDebugInfo.h
Go to the documentation of this file.
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 LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGINFO_H
10
#define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_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::plugin
{
23
namespace
dwarf
{
24
class
DWARFContext
;
25
26
class
DWARFDebugInfo
{
27
public
:
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);
32
33
explicit
DWARFDebugInfo
(
SymbolFileDWARF
&
dwarf
,
DWARFContext
&context);
34
35
size_t
GetNumUnits
();
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);
45
46
enum
{
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
51
};
52
53
const
DWARFDebugAranges
&
GetCompileUnitAranges
();
54
55
const
std::shared_ptr<SymbolFileDWARFDwo> &
GetDwpSymbolFile
();
56
57
protected
:
58
typedef
std::vector<DWARFUnitSP>
UnitColl
;
59
60
SymbolFileDWARF
&
m_dwarf
;
61
DWARFContext
&
m_context
;
62
63
llvm::once_flag
m_units_once_flag
;
64
UnitColl
m_units
;
65
66
std::unique_ptr<DWARFDebugAranges>
67
m_cu_aranges_up
;
// A quick address to compile unit table
68
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
;
73
74
private
:
75
// All parsing needs to be done partially any managed by this class as
76
// accessors are called.
77
void
ParseUnitHeadersIfNeeded
();
78
79
void
ParseUnitsFor
(
DIERef::Section
section);
80
81
uint32_t
FindUnitIndex
(
DIERef::Section
section,
dw_offset_t
offset);
82
83
DWARFDebugInfo
(
const
DWARFDebugInfo
&) =
delete
;
84
const
DWARFDebugInfo
&
operator=
(
const
DWARFDebugInfo
&) =
delete
;
85
};
86
}
// namespace dwarf
87
}
// namespace lldb_private::plugin
88
89
#endif
// LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFDEBUGINFO_H
DWARFDIE.h
DWARFTypeUnit.h
DWARFUnit.h
SymbolFileDWARF.h
lldb_private::plugin::dwarf::DIERef::Section
Section
Definition
DIERef.h:33
lldb_private::plugin::dwarf::DWARFContext
Definition
DWARFContext.h:21
lldb_private::plugin::dwarf::DWARFDIE
Definition
DWARFDIE.h:19
lldb_private::plugin::dwarf::DWARFDebugAranges
Definition
DWARFDebugAranges.h:18
lldb_private::plugin::dwarf::DWARFDebugInfoEntry
DWARFDebugInfoEntry objects assume that they are living in one big vector and do pointer arithmetic o...
Definition
DWARFDebugInfoEntry.h:34
lldb_private::plugin::dwarf::DWARFDebugInfo::ContainsTypeUnits
bool ContainsTypeUnits()
Definition
DWARFDebugInfo.cpp:247
lldb_private::plugin::dwarf::DWARFDebugInfo::GetDwpSymbolFile
const std::shared_ptr< SymbolFileDWARFDwo > & GetDwpSymbolFile()
Definition
DWARFDebugInfo.cpp:235
lldb_private::plugin::dwarf::DWARFDebugInfo::GetSkeletonUnit
DWARFUnit * GetSkeletonUnit(DWARFUnit *dwo_unit)
Definition
DWARFDebugInfo.cpp:124
lldb_private::plugin::dwarf::DWARFDebugInfo::DWARFDebugInfo
DWARFDebugInfo(SymbolFileDWARF &dwarf, DWARFContext &context)
Definition
DWARFDebugInfo.cpp:34
lldb_private::plugin::dwarf::DWARFDebugInfo::m_dwarf
SymbolFileDWARF & m_dwarf
Definition
DWARFDebugInfo.h:60
lldb_private::plugin::dwarf::DWARFDebugInfo::m_dwarf4_dwo_id_to_skeleton_unit_once_flag
llvm::once_flag m_dwarf4_dwo_id_to_skeleton_unit_once_flag
Definition
DWARFDebugInfo.h:72
lldb_private::plugin::dwarf::DWARFDebugInfo::GetTypeUnitForHash
DWARFTypeUnit * GetTypeUnitForHash(uint64_t hash)
Definition
DWARFDebugInfo.cpp:239
lldb_private::plugin::dwarf::DWARFDebugInfo::GetUnitAtOffset
DWARFUnit * GetUnitAtOffset(DIERef::Section section, dw_offset_t cu_offset, uint32_t *idx_ptr=nullptr)
Definition
DWARFDebugInfo.cpp:211
lldb_private::plugin::dwarf::DWARFDebugInfo::FindUnitIndex
uint32_t FindUnitIndex(DIERef::Section section, dw_offset_t offset)
Definition
DWARFDebugInfo.cpp:193
lldb_private::plugin::dwarf::DWARFDebugInfo::GetCompileUnitAranges
const DWARFDebugAranges & GetCompileUnitAranges()
Definition
DWARFDebugInfo.cpp:37
lldb_private::plugin::dwarf::DWARFDebugInfo::ParseUnitsFor
void ParseUnitsFor(DIERef::Section section)
Definition
DWARFDebugInfo.cpp:79
lldb_private::plugin::dwarf::DWARFDebugInfo::m_dwarf4_dwo_id_to_skeleton_unit
llvm::DenseMap< uint64_t, DWARFUnit * > m_dwarf4_dwo_id_to_skeleton_unit
Definition
DWARFDebugInfo.h:71
lldb_private::plugin::dwarf::DWARFDebugInfo::m_dwarf5_dwo_id_to_skeleton_unit
llvm::DenseMap< uint64_t, DWARFUnit * > m_dwarf5_dwo_id_to_skeleton_unit
Definition
DWARFDebugInfo.h:70
lldb_private::plugin::dwarf::DWARFDebugInfo::m_units
UnitColl m_units
Definition
DWARFDebugInfo.h:64
lldb_private::plugin::dwarf::DWARFDebugInfo::m_units_once_flag
llvm::once_flag m_units_once_flag
Definition
DWARFDebugInfo.h:63
lldb_private::plugin::dwarf::DWARFDebugInfo::m_type_hash_to_unit_index
std::vector< std::pair< uint64_t, uint32_t > > m_type_hash_to_unit_index
Definition
DWARFDebugInfo.h:69
lldb_private::plugin::dwarf::DWARFDebugInfo::ParseUnitHeadersIfNeeded
void ParseUnitHeadersIfNeeded()
Definition
DWARFDebugInfo.cpp:173
lldb_private::plugin::dwarf::DWARFDebugInfo::GetDIE
DWARFDIE GetDIE(DIERef::Section section, dw_offset_t die_offset)
Definition
DWARFDebugInfo.cpp:256
lldb_private::plugin::dwarf::DWARFDebugInfo::UnitColl
std::vector< DWARFUnitSP > UnitColl
Definition
DWARFDebugInfo.h:58
lldb_private::plugin::dwarf::DWARFDebugInfo::operator=
const DWARFDebugInfo & operator=(const DWARFDebugInfo &)=delete
lldb_private::plugin::dwarf::DWARFDebugInfo::m_cu_aranges_up
std::unique_ptr< DWARFDebugAranges > m_cu_aranges_up
Definition
DWARFDebugInfo.h:67
lldb_private::plugin::dwarf::DWARFDebugInfo::m_context
DWARFContext & m_context
Definition
DWARFDebugInfo.h:61
lldb_private::plugin::dwarf::DWARFDebugInfo::GetUnitContainingDIEOffset
DWARFUnit * GetUnitContainingDIEOffset(DIERef::Section section, dw_offset_t die_offset)
Definition
DWARFDebugInfo.cpp:226
lldb_private::plugin::dwarf::DWARFDebugInfo::GetUnitAtIndex
DWARFUnit * GetUnitAtIndex(size_t idx)
Definition
DWARFDebugInfo.cpp:186
lldb_private::plugin::dwarf::DWARFDebugInfo::Callback
dw_offset_t(* Callback)(SymbolFileDWARF *dwarf2Data, DWARFUnit *cu, DWARFDebugInfoEntry *die, const dw_offset_t next_offset, const uint32_t depth, void *userData)
Definition
DWARFDebugInfo.h:28
lldb_private::plugin::dwarf::DWARFDebugInfo::DWARFDebugInfo
DWARFDebugInfo(const DWARFDebugInfo &)=delete
lldb_private::plugin::dwarf::DWARFDebugInfo::eDumpFlag_ShowForm
@ eDumpFlag_ShowForm
Definition
DWARFDebugInfo.h:48
lldb_private::plugin::dwarf::DWARFDebugInfo::eDumpFlag_Verbose
@ eDumpFlag_Verbose
Definition
DWARFDebugInfo.h:47
lldb_private::plugin::dwarf::DWARFDebugInfo::eDumpFlag_ShowAncestors
@ eDumpFlag_ShowAncestors
Definition
DWARFDebugInfo.h:49
lldb_private::plugin::dwarf::DWARFDebugInfo::GetNumUnits
size_t GetNumUnits()
Definition
DWARFDebugInfo.cpp:181
lldb_private::plugin::dwarf::DWARFTypeUnit
Definition
DWARFTypeUnit.h:21
lldb_private::plugin::dwarf::DWARFUnit
Definition
DWARFUnit.h:43
lldb_private::plugin::dwarf::SymbolFileDWARF
Definition
SymbolFileDWARF.h:66
dw_offset_t
uint64_t dw_offset_t
Definition
dwarf.h:24
lldb-private.h
dwarf
Definition
ABISysV_arc.cpp:61
lldb_private::plugin::dwarf
Definition
TypeSystem.h:40
lldb_private::plugin
Definition
TypeSystem.h:39
Generated on
for LLDB by
1.14.0