summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.h')
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.h b/lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.h
new file mode 100644
index 00000000000..d84bf223ccd
--- /dev/null
+++ b/lldb/source/Plugins/SymbolFile/DWARF/HashedNameToDIE.h
@@ -0,0 +1,99 @@
+//===-- HashedNameToDIE.h ---------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef SymbolFileDWARF_HashedNameToDIE_h_
+#define SymbolFileDWARF_HashedNameToDIE_h_
+
+#include <vector>
+#include "lldb/lldb-defines.h"
+#include "lldb/Core/dwarf.h"
+
+class SymbolFileDWARF;
+
+typedef std::vector<dw_offset_t> DIEArray;
+
+class HashedNameToDIE
+{
+public:
+ struct Header
+ {
+ uint16_t version;
+ uint8_t hash_type;
+ uint8_t hash_index_bitsize;
+ uint32_t num_buckets;
+ uint32_t num_hashes;
+ uint32_t die_offset_base;
+
+ Header() :
+ version(1),
+ hash_type (0),
+ hash_index_bitsize (0),
+ num_buckets(0),
+ num_hashes (0),
+ die_offset_base(0)
+ {
+ }
+ };
+
+
+ HashedNameToDIE (SymbolFileDWARF *dwarf,
+ const lldb_private::DataExtractor &data);
+
+ ~HashedNameToDIE ()
+ {
+ }
+
+ uint32_t
+ GetHashIndexMask () const
+ {
+ return (1u << m_header.hash_index_bitsize) - 1u;
+ }
+
+ uint32_t
+ GetOffsetForBucket (uint32_t idx) const
+ {
+ if (idx < m_header.num_buckets)
+ return sizeof(Header) + 4 * idx;
+ return UINT32_MAX;
+ }
+
+ uint32_t
+ GetOffsetForHash (uint32_t idx) const
+ {
+ if (idx < m_header.num_hashes)
+ return sizeof(Header) + 4 * m_header.num_buckets + 4 * idx;
+ return UINT32_MAX;
+ }
+
+ uint32_t
+ GetOffsetForOffset (uint32_t idx) const
+ {
+ if (idx < m_header.num_hashes)
+ return sizeof(Header) + 4 * m_header.num_buckets + 4 * m_header.num_hashes + 4 * idx;
+ return UINT32_MAX;
+ }
+
+ void
+ Dump (lldb_private::Stream *s);
+
+ size_t
+ Find (const lldb_private::ConstString &name,
+ DIEArray &die_ofsets) const;
+
+ size_t
+ Find (const lldb_private::RegularExpression& regex,
+ DIEArray &die_ofsets) const;
+
+protected:
+ SymbolFileDWARF *m_dwarf;
+ const lldb_private::DataExtractor &m_data;
+ Header m_header;
+};
+
+#endif // SymbolFileDWARF_HashedNameToDIE_h_
OpenPOWER on IntegriCloud