[lld][MachO] Sort symbols in parallel in -map
authorXuanda Yang <th3charlie@gmail.com>
Thu, 17 Jun 2021 02:13:15 +0000 (10:13 +0800)
committerXuanda Yang <th3charlie@gmail.com>
Thu, 17 Jun 2021 02:19:59 +0000 (10:19 +0800)
source: https://bugs.llvm.org/show_bug.cgi?id=50689

When writing a map file, sort symbols in parallel using parallelSort.
Use address name to break ties if two symbols have the same address.

Reviewed By: thakis, int3

Differential Revision: https://reviews.llvm.org/D104346

lld/MachO/MapFile.cpp

index 26db02d..79471ee 100644 (file)
@@ -52,9 +52,11 @@ static SymbolMapTy getSectionSyms(ArrayRef<Defined *> syms) {
   // appear in the output file rather than the order they appeared in the input
   // files.
   for (auto &it : ret)
-    llvm::stable_sort(it.second, [](Defined *a, Defined *b) {
-      return a->getVA() < b->getVA();
-    });
+    parallelSort(
+        it.second.begin(), it.second.end(), [](Defined *a, Defined *b) {
+          return a->getVA() != b->getVA() ? a->getVA() < b->getVA()
+                                          : a->getName() < b->getName();
+        });
   return ret;
 }