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" 15 #include "lldb/Core/UniqueCStringMap.h" 16 #include "lldb/Core/dwarf.h" 17 #include "lldb/lldb-defines.h" 18 19 namespace lldb_private::plugin { 20 namespace dwarf { 21 class DWARFUnit; 22 23 class NameToDIE { 24 public: 25 NameToDIE() : m_map() {} 26 27 ~NameToDIE() = default; 28 29 void Dump(Stream *s); 30 31 void Insert(ConstString name, const DIERef &die_ref); 32 33 void Append(const NameToDIE &other); 34 35 void Finalize(); 36 37 bool Find(ConstString name, 38 llvm::function_ref<bool(DIERef ref)> callback) const; 39 40 bool Find(const RegularExpression ®ex, 41 llvm::function_ref<bool(DIERef ref)> callback) const; 42 43 /// \a unit must be the skeleton unit if possible, not GetNonSkeletonUnit(). 44 void 45 FindAllEntriesForUnit(DWARFUnit &unit, 46 llvm::function_ref<bool(DIERef ref)> callback) const; 47 48 void 49 ForEach(std::function<bool(ConstString name, const DIERef &die_ref)> const 50 &callback) const; 51 52 /// Decode a serialized version of this object from data. 53 /// 54 /// \param data 55 /// The decoder object that references the serialized data. 56 /// 57 /// \param offset_ptr 58 /// A pointer that contains the offset from which the data will be decoded 59 /// from that gets updated as data gets decoded. 60 /// 61 /// \param strtab 62 /// All strings in cache files are put into string tables for efficiency 63 /// and cache file size reduction. Strings are stored as uint32_t string 64 /// table offsets in the cache data. 65 bool Decode(const DataExtractor &data, lldb::offset_t *offset_ptr, 66 const 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(DataEncoder &encoder, ConstStringTable &strtab) const; 80 81 /// Used for unit testing the encoding and decoding. 82 bool operator==(const NameToDIE &rhs) const; 83 84 bool IsEmpty() const { return m_map.IsEmpty(); } 85 86 void Clear() { m_map.Clear(); } 87 88 protected: 89 UniqueCStringMap<DIERef> m_map; 90 }; 91 } // namespace dwarf 92 } // namespace lldb_private::plugin 93 94 #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_NAMETODIE_H 95