LLDB  mainline
NameToDIE.h
Go to the documentation of this file.
1 //===-- NameToDIE.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_NAMETODIE_H
10 #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_NAMETODIE_H
11 
12 #include <functional>
13 
14 #include "DIERef.h"
16 #include "lldb/Core/dwarf.h"
17 #include "lldb/lldb-defines.h"
18 
19 class DWARFUnit;
20 
21 class NameToDIE {
22 public:
23  NameToDIE() : m_map() {}
24 
25  ~NameToDIE() = default;
26 
27  void Dump(lldb_private::Stream *s);
28 
29  void Insert(lldb_private::ConstString name, const DIERef &die_ref);
30 
31  void Append(const NameToDIE &other);
32 
33  void Finalize();
34 
36  llvm::function_ref<bool(DIERef ref)> callback) const;
37 
38  bool Find(const lldb_private::RegularExpression &regex,
39  llvm::function_ref<bool(DIERef ref)> callback) const;
40 
41  /// \a unit must be the skeleton unit if possible, not GetNonSkeletonUnit().
42  void
44  llvm::function_ref<bool(DIERef ref)> callback) const;
45 
46  void
47  ForEach(std::function<bool(lldb_private::ConstString name,
48  const DIERef &die_ref)> const
49  &callback) const;
50 
51  /// Decode a serialized version of this object from data.
52  ///
53  /// \param data
54  /// The decoder object that references the serialized data.
55  ///
56  /// \param offset_ptr
57  /// A pointer that contains the offset from which the data will be decoded
58  /// from that gets updated as data gets decoded.
59  ///
60  /// \param strtab
61  /// All strings in cache files are put into string tables for efficiency
62  /// and cache file size reduction. Strings are stored as uint32_t string
63  /// table offsets in the cache data.
64  bool Decode(const lldb_private::DataExtractor &data,
65  lldb::offset_t *offset_ptr,
66  const lldb_private::StringTableReader &strtab);
67 
68  /// Encode this object into a data encoder object.
69  ///
70  /// This allows this object to be serialized to disk.
71  ///
72  /// \param encoder
73  /// A data encoder object that serialized bytes will be encoded into.
74  ///
75  /// \param strtab
76  /// All strings in cache files are put into string tables for efficiency
77  /// and cache file size reduction. Strings are stored as uint32_t string
78  /// table offsets in the cache data.
79  void Encode(lldb_private::DataEncoder &encoder,
80  lldb_private::ConstStringTable &strtab) const;
81 
82  /// Used for unit testing the encoding and decoding.
83  bool operator==(const NameToDIE &rhs) const;
84 
85  bool IsEmpty() const { return m_map.IsEmpty(); }
86 
87  void Clear() { m_map.Clear(); }
88 
89 protected:
91 };
92 
93 #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_NAMETODIE_H
DIERef
Identifies a DWARF debug info entry within a given Module.
Definition: DIERef.h:26
DIERef.h
lldb_private::RegularExpression
Definition: RegularExpression.h:18
lldb_private::StringTableReader
Many cache files require string tables to store data efficiently.
Definition: DataFileCache.h:202
NameToDIE::Encode
void Encode(lldb_private::DataEncoder &encoder, lldb_private::ConstStringTable &strtab) const
Encode this object into a data encoder object.
Definition: NameToDIE.cpp:127
lldb-defines.h
lldb_private::ConstStringTable
Many cache files require string tables to store data efficiently.
Definition: DataFileCache.h:170
lldb::offset_t
uint64_t offset_t
Definition: lldb-types.h:87
lldb_private::Stream
Definition: Stream.h:28
UniqueCStringMap.h
lldb_private::UniqueCStringMap::IsEmpty
bool IsEmpty() const
Definition: UniqueCStringMap.h:151
DWARFUnit
Definition: DWARFUnit.h:83
lldb_private::DataExtractor
Definition: DataExtractor.h:48
NameToDIE::IsEmpty
bool IsEmpty() const
Definition: NameToDIE.h:85
lldb_private::ConstString
Definition: ConstString.h:40
NameToDIE::~NameToDIE
~NameToDIE()=default
NameToDIE::NameToDIE
NameToDIE()
Definition: NameToDIE.h:23
NameToDIE::FindAllEntriesForUnit
void FindAllEntriesForUnit(DWARFUnit &unit, llvm::function_ref< bool(DIERef ref)> callback) const
unit must be the skeleton unit if possible, not GetNonSkeletonUnit().
Definition: NameToDIE.cpp:50
NameToDIE::Insert
void Insert(lldb_private::ConstString name, const DIERef &die_ref)
Definition: NameToDIE.cpp:28
lldb_private::UniqueCStringMap< DIERef >
NameToDIE::Find
bool Find(lldb_private::ConstString name, llvm::function_ref< bool(DIERef ref)> callback) const
Definition: NameToDIE.cpp:32
NameToDIE::Clear
void Clear()
Definition: NameToDIE.h:87
dwarf.h
NameToDIE::Decode
bool Decode(const lldb_private::DataExtractor &data, lldb::offset_t *offset_ptr, const lldb_private::StringTableReader &strtab)
Decode a serialized version of this object from data.
Definition: NameToDIE.cpp:96
NameToDIE::Append
void Append(const NameToDIE &other)
Definition: NameToDIE.cpp:86
NameToDIE::m_map
lldb_private::UniqueCStringMap< DIERef > m_map
Definition: NameToDIE.h:90
NameToDIE::operator==
bool operator==(const NameToDIE &rhs) const
Used for unit testing the encoding and decoding.
Definition: NameToDIE.cpp:138
NameToDIE::Dump
void Dump(lldb_private::Stream *s)
Definition: NameToDIE.cpp:67
lldb_private::UniqueCStringMap::Clear
void Clear()
Definition: UniqueCStringMap.h:48
NameToDIE::Finalize
void Finalize()
Definition: NameToDIE.cpp:23
NameToDIE
Definition: NameToDIE.h:21
NameToDIE::ForEach
void ForEach(std::function< bool(lldb_private::ConstString name, const DIERef &die_ref)> const &callback) const
Definition: NameToDIE.cpp:75