diff options
Diffstat (limited to 'lld/ELF/Writer.cpp')
-rw-r--r-- | lld/ELF/Writer.cpp | 21 |
1 files changed, 1 insertions, 20 deletions
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index 186f4fa74a3..e140e0a2819 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -872,27 +872,8 @@ template <class ELFT> static void sortBySymbolsOrder() { if (Config->SymbolOrderingFile.empty()) return; - // Build a map from symbols to their priorities. Symbols that didn't - // appear in the symbol ordering file have the lowest priority 0. - // All explicitly mentioned symbols have negative (higher) priorities. - DenseMap<StringRef, int> SymbolOrder; - int Priority = -Config->SymbolOrderingFile.size(); - for (StringRef S : Config->SymbolOrderingFile) - SymbolOrder.insert({S, Priority++}); - - // Build a map from sections to their priorities. - DenseMap<SectionBase *, int> SectionOrder; - for (ObjFile<ELFT> *File : ObjFile<ELFT>::Instances) { - for (SymbolBody *Body : File->getSymbols()) { - auto *D = dyn_cast<DefinedRegular>(Body); - if (!D || !D->Section) - continue; - int &Priority = SectionOrder[D->Section]; - Priority = std::min(Priority, SymbolOrder.lookup(D->getName())); - } - } - // Sort sections by priority. + DenseMap<SectionBase *, int> SectionOrder = buildSectionOrder<ELFT>(); for (BaseCommand *Base : Script->Opt.Commands) if (auto *Sec = dyn_cast<OutputSection>(Base)) Sec->sort([&](InputSectionBase *S) { return SectionOrder.lookup(S); }); |