[ELF] Simplify GnuHashSection::write. NFC
authorFangrui Song <i@maskray.me>
Thu, 25 Nov 2021 22:23:25 +0000 (14:23 -0800)
committerFangrui Song <i@maskray.me>
Thu, 25 Nov 2021 22:23:25 +0000 (14:23 -0800)
lld/ELF/SyntheticSections.cpp
lld/ELF/SyntheticSections.h

index d251419cd73daa6f3af18db07bbc2c64d9ffedd4..3936f0f0d74f5a3b4e6e580d218d704032ce7663 100644 (file)
@@ -2380,21 +2380,8 @@ void GnuHashTableSection::writeTo(uint8_t *buf) {
   write32(buf + 12, Shift2);
   buf += 16;
 
-  // Write a bloom filter and a hash table.
-  writeBloomFilter(buf);
-  buf += config->wordsize * maskWords;
-  writeHashTable(buf);
-}
-
-// This function writes a 2-bit bloom filter. This bloom filter alone
-// usually filters out 80% or more of all symbol lookups [1].
-// The dynamic linker uses the hash table only when a symbol is not
-// filtered out by a bloom filter.
-//
-// [1] Ulrich Drepper (2011), "How To Write Shared Libraries" (Ver. 4.1.2),
-//     p.9, https://www.akkadia.org/drepper/dsohowto.pdf
-void GnuHashTableSection::writeBloomFilter(uint8_t *buf) {
-  unsigned c = config->is64 ? 64 : 32;
+  // Write the 2-bit bloom filter.
+  const unsigned c = config->is64 ? 64 : 32;
   for (const Entry &sym : symbols) {
     // When C = 64, we choose a word with bits [6:...] and set 1 to two bits in
     // the word using bits [0:5] and [26:31].
@@ -2404,9 +2391,9 @@ void GnuHashTableSection::writeBloomFilter(uint8_t *buf) {
     val |= uint64_t(1) << ((sym.hash >> Shift2) % c);
     writeUint(buf + i * config->wordsize, val);
   }
-}
+  buf += config->wordsize * maskWords;
 
-void GnuHashTableSection::writeHashTable(uint8_t *buf) {
+  // Write the hash table.
   uint32_t *buckets = reinterpret_cast<uint32_t *>(buf);
   uint32_t oldBucket = -1;
   uint32_t *values = buckets + nBuckets;
index 2bc9b5bf9c31093172e8668f48c9884f09a773ba..3d2e73071d099fd3b3413bcb86145d2e6a5fa233 100644 (file)
@@ -675,9 +675,6 @@ private:
   // See the comment in writeBloomFilter.
   enum { Shift2 = 26 };
 
-  void writeBloomFilter(uint8_t *buf);
-  void writeHashTable(uint8_t *buf);
-
   struct Entry {
     Symbol *sym;
     size_t strTabOffset;