diff --git a/lld/ELF/CallGraphSort.cpp b/lld/ELF/CallGraphSort.cpp index 3d9558c27e10ef885c0c25975a2450f2002aef7b..33ac159a6e26110ee97ec8573b05bd51c7841ad6 100644 --- a/lld/ELF/CallGraphSort.cpp +++ b/lld/ELF/CallGraphSort.cpp @@ -219,10 +219,10 @@ void CallGraphSort::groupClusters() { }); // Sort by density. - std::sort(Clusters.begin(), Clusters.end(), - [](const Cluster &A, const Cluster &B) { - return A.getDensity() > B.getDensity(); - }); + std::stable_sort(Clusters.begin(), Clusters.end(), + [](const Cluster &A, const Cluster &B) { + return A.getDensity() > B.getDensity(); + }); } DenseMap CallGraphSort::run() { diff --git a/lld/ELF/MapFile.cpp b/lld/ELF/MapFile.cpp index b7886fe0c3af6aa9aa5e5d513a4ccdc518a2452d..4e8e045783ef062b03c30804671c960d8233210a 100644 --- a/lld/ELF/MapFile.cpp +++ b/lld/ELF/MapFile.cpp @@ -90,8 +90,9 @@ static SymbolMapTy getSectionSyms(ArrayRef Syms) { // in the input files. for (auto &It : Ret) { SmallVectorImpl &V = It.second; - std::sort(V.begin(), V.end(), - [](Symbol *A, Symbol *B) { return A->getVA() < B->getVA(); }); + std::stable_sort(V.begin(), V.end(), [](Symbol *A, Symbol *B) { + return A->getVA() < B->getVA(); + }); } return Ret; } diff --git a/lld/ELF/SyntheticSections.cpp b/lld/ELF/SyntheticSections.cpp index c534cfd4e1677d04d3ad4c462f4c8c398c4eb5ec..08c91424940177f2dd4663b39dd590e01fe4b052 100644 --- a/lld/ELF/SyntheticSections.cpp +++ b/lld/ELF/SyntheticSections.cpp @@ -1393,10 +1393,10 @@ bool AndroidPackedRelocationSection::updateAllocSize() { NonRelatives.push_back(R); } - std::sort(Relatives.begin(), Relatives.end(), - [](const Elf_Rel &A, const Elf_Rel &B) { - return A.r_offset < B.r_offset; - }); + llvm::sort(Relatives.begin(), Relatives.end(), + [](const Elf_Rel &A, const Elf_Rel &B) { + return A.r_offset < B.r_offset; + }); // Try to find groups of relative relocations which are spaced one word // apart from one another. These generally correspond to vtable entries. The @@ -1474,10 +1474,10 @@ bool AndroidPackedRelocationSection::updateAllocSize() { } // Finally the non-relative relocations. - std::sort(NonRelatives.begin(), NonRelatives.end(), - [](const Elf_Rela &A, const Elf_Rela &B) { - return A.r_offset < B.r_offset; - }); + llvm::sort(NonRelatives.begin(), NonRelatives.end(), + [](const Elf_Rela &A, const Elf_Rela &B) { + return A.r_offset < B.r_offset; + }); if (!NonRelatives.empty()) { Add(NonRelatives.size()); Add(HasAddendIfRela); diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp index ae5b580cc9b6d8b6cf2e7d0ea889ef28bbc0570e..e4a0e6143e90050570d90da850be33cc7cce14c5 100644 --- a/lld/ELF/Writer.cpp +++ b/lld/ELF/Writer.cpp @@ -1106,7 +1106,7 @@ sortISDBySectionOrder(InputSectionDescription *ISD, } OrderedSections.push_back({IS, I->second}); } - std::sort( + llvm::sort( OrderedSections.begin(), OrderedSections.end(), [&](std::pair A, std::pair B) { return A.second < B.second; @@ -2056,10 +2056,10 @@ struct SectionOffset { // Check whether sections overlap for a specific address range (file offsets, // load and virtual adresses). static void checkOverlap(StringRef Name, std::vector &Sections) { - std::sort(Sections.begin(), Sections.end(), - [=](const SectionOffset &A, const SectionOffset &B) { - return A.Offset < B.Offset; - }); + llvm::sort(Sections.begin(), Sections.end(), + [=](const SectionOffset &A, const SectionOffset &B) { + return A.Offset < B.Offset; + }); // Finding overlap is easy given a vector is sorted by start position. // If an element starts before the end of the previous element, they overlap.