diff --git a/lld/ELF/GdbIndex.cpp b/lld/ELF/GdbIndex.cpp index 5cca07a328b2..940313dc0ed1 100644 --- a/lld/ELF/GdbIndex.cpp +++ b/lld/ELF/GdbIndex.cpp @@ -77,22 +77,17 @@ std::pair GdbHashTab::add(uint32_t Hash, size_t Offset) { } void GdbHashTab::finalizeContents() { - Table.resize(std::max(1024, NextPowerOf2(Map.size() * 4 / 3))); + uint32_t Size = std::max(1024, NextPowerOf2(Map.size() * 4 / 3)); + uint32_t Mask = Size - 1; + Table.resize(Size); for (auto &P : Map) { GdbSymbol *Sym = P.second; + uint32_t I = Sym->NameHash & Mask; + uint32_t Step = ((Sym->NameHash * 17) & Mask) | 1; - uint32_t I = Sym->NameHash & (Table.size() - 1); - uint32_t Step = ((Sym->NameHash * 17) & (Table.size() - 1)) | 1; - - for (;;) { - if (Table[I]) { - I = (I + Step) & (Table.size() - 1); - continue; - } - - Table[I] = Sym; - break; - } + while (Table[I]) + I = (I + Step) & Mask; + Table[I] = Sym; } }