[lld] r320070 - Simplify .gnu.hash writing. NFC.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 7 10:51:19 PST 2017


Author: rafael
Date: Thu Dec  7 10:51:19 2017
New Revision: 320070

URL: http://llvm.org/viewvc/llvm-project?rev=320070&view=rev
Log:
Simplify .gnu.hash writing. NFC.

Modified:
    lld/trunk/ELF/SyntheticSections.cpp

Modified: lld/trunk/ELF/SyntheticSections.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SyntheticSections.cpp?rev=320070&r1=320069&r2=320070&view=diff
==============================================================================
--- lld/trunk/ELF/SyntheticSections.cpp (original)
+++ lld/trunk/ELF/SyntheticSections.cpp Thu Dec  7 10:51:19 2017
@@ -1750,15 +1750,12 @@ void GnuHashTableSection::writeHashTable
   // Write hash buckets. Hash buckets contain indices in the following
   // hash value table.
   uint32_t *Buckets = reinterpret_cast<uint32_t *>(Buf);
-  auto SymI = Symbols.begin();
-  for (size_t I = 0; I < NBuckets; ++I) {
-    auto NewI = std::find_if(SymI, Symbols.end(), [=](const Entry &Ent) {
-      return Ent.BucketIdx == I;
-    });
-    if (NewI != Symbols.end()) {
-      write32(Buckets + I, NewI->Sym->DynsymIndex);
-      SymI = NewI;
-    }
+  uint32_t OldBucket = -1;
+  for (auto I = Symbols.begin(), E = Symbols.end(); I != E; ++I) {
+    if (I->BucketIdx == OldBucket)
+      continue;
+    OldBucket = I->BucketIdx;
+    write32(Buckets + OldBucket, I->Sym->DynsymIndex);
   }
 
   // Write a hash value table. It represents a sequence of chains that




More information about the llvm-commits mailing list