[Lldb-commits] [lldb] r138620 - in /lldb/trunk/source/Plugins/SymbolFile/DWARF: NameToDIE.cpp NameToDIE.h
Greg Clayton
gclayton at apple.com
Thu Aug 25 19:44:58 PDT 2011
Author: gclayton
Date: Thu Aug 25 21:44:58 2011
New Revision: 138620
URL: http://llvm.org/viewvc/llvm-project?rev=138620&view=rev
Log:
Added code to test hash bucket sizes for an DWARF index that we can write
to a file.
Modified:
lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp
lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.h
Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp?rev=138620&r1=138619&r2=138620&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.cpp Thu Aug 25 21:44:58 2011
@@ -66,3 +66,77 @@
s->Printf("%p: 0x%8.8x 0x%8.8x \"%s\"\n", pos->first, pos->second.cu_idx, pos->second.die_idx, pos->first);
}
}
+
+
+static uint32_t
+dl_new_hash (const char *s)
+{
+ uint32_t h = 5381;
+
+ for (unsigned char c = *s; c; c = *++s)
+ h = ((h << 5) + h) + c;
+
+ return h;
+}
+
+struct HashEntry
+{
+ uint32_t hash;
+ uint32_t cu_idx;
+ uint32_t die_idx;
+ const char *name;
+};
+
+typedef struct HashEntry HashEntryType;
+
+void
+NameToDIE::Hash (lldb_private::Stream *s)
+{
+ typedef std::vector<HashEntryType> hash_collection;
+ hash_collection hash_entries;
+ collection::const_iterator pos, end = m_collection.end();
+ for (pos = m_collection.begin(); pos != end; ++pos)
+ {
+ HashEntry entry = { dl_new_hash (pos->first), pos->second.cu_idx, pos->second.die_idx, pos->first };
+ hash_entries.push_back (entry);
+ }
+
+
+ const uint32_t hash_entries_size = hash_entries.size();
+
+ uint32_t i;
+
+ for (uint32_t power_2 = 0x10; power_2 <= hash_entries_size; power_2 <<= 1)
+ {
+ const uint32_t size = power_2 - 1;
+ if (size > 0x10 && size > hash_entries_size)
+ break;
+
+ s->Printf ("\nTrying size of %u for %u items:\n", size, hash_entries_size);
+ std::vector<uint32_t> indexes(size, 0);
+ for (i=0; i<hash_entries_size; ++i)
+ {
+ indexes[hash_entries[i].hash % size]++;
+ }
+ const uint32_t indexes_size = indexes.size();
+ uint32_t empties = 0;
+ uint32_t good = 0;
+ uint32_t collisions = 0;
+ uint64_t total = 0;
+ for (i=0; i<indexes_size; ++i)
+ {
+ uint32_t c = indexes[i];
+ total += c;
+ if (c == 0)
+ ++empties;
+ else if (c == 1)
+ ++good;
+ else
+ ++collisions;
+ }
+ s->Printf ("good = %u\n", good);
+ s->Printf ("empties = %u\n", empties);
+ s->Printf ("collisions = %u\n", collisions);
+ s->Printf ("avg count = %llu\n", total / indexes_size);
+ }
+}
Modified: lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.h?rev=138620&r1=138619&r2=138620&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.h (original)
+++ lldb/trunk/source/Plugins/SymbolFile/DWARF/NameToDIE.h Thu Aug 25 21:44:58 2011
@@ -51,6 +51,9 @@
FindAllEntriesForCompileUnitWithIndex (const uint32_t cu_idx,
std::vector<Info> &info_array) const;
+ void
+ Hash (lldb_private::Stream *s);
+
protected:
typedef std::multimap<const char *, Info> collection;
More information about the lldb-commits
mailing list