llvm-project/lld/MachO
Nico Weber aed0a08c69 [lld/mac] Make symbol table order deterministic
SymtabSection::emitStabs() writes the symbol table in the order
of externalSymbols, which has the order of symtab->getSymbols(),
which is just the order symbols are added to the symbol table.

In practice, symbols in the symbol files of input .o files are
sorted, but since that's not guaranteed we sort them in
ObjFile::parseSymbols(). To make sure several symbols with the same
address keep the order they're in the input file, we have to use
stable_sort().

In practice, std::sort() on already-sorted inputs won't change the order
of just adjacent elements, and while in theory std::sort() could use a
random pivot, in practice the code should be deterministic as it was
previously too.

But now lld/test/MachO/stabs.s passes with LLVM_ENABLE_EXPENSIVE_CHECKS=ON
(the last test that was failing with that set).

Fixes a regression from D99972.

While here, remove an empty section in stabs.s and move
.subsections_via_symbols to the end where it usually is (this part no
behavior change).

Differential Revision: https://reviews.llvm.org/D105071
2021-06-29 09:29:49 -04:00
..
Arch [lld-macho] Implement branch-range-extension thunks 2021-05-12 09:44:58 -07:00
CMakeLists.txt [lld-macho] Implement ICF 2021-06-17 10:07:44 -07:00
ConcatOutputSection.cpp [lld-macho] Rework mergeFlag to behave closer to what ld64 does. 2021-06-17 14:22:58 -04:00
ConcatOutputSection.h [lld-macho] Rework mergeFlag to behave closer to what ld64 does. 2021-06-17 14:22:58 -04:00
Config.h [lld-macho] Implement ICF 2021-06-17 10:07:44 -07:00
Driver.cpp [lld-macho] Extend ICF to literal sections 2021-06-28 14:49:39 -04:00
Driver.h Revert "[lld-macho] Have path-related functions return std::string, not StringRef" 2021-06-18 22:43:49 -04:00
DriverUtils.cpp [OptTable] Rename PrintHelp to printHelp 2021-06-24 14:47:03 -07:00
Dwarf.cpp [lld-macho][NFC] define more strings in section_names:: and segment_names:: 2021-04-27 17:48:45 -07:00
Dwarf.h [lld-macho] Emit STABS symbols for debugging, and drop debug sections 2020-12-01 15:05:20 -08:00
ExportTrie.cpp [lld-macho][NFC] add const to pointer/reference induction variables of range-based for loops 2021-03-10 12:07:31 -08:00
ExportTrie.h [lld-macho] Export trie addresses should be relative to the image base 2020-09-20 20:43:15 -07:00
ICF.cpp [lld-macho] Extend ICF to literal sections 2021-06-28 14:49:39 -04:00
ICF.h [lld-macho] Implement ICF 2021-06-17 10:07:44 -07:00
InputFiles.cpp [lld/mac] Make symbol table order deterministic 2021-06-29 09:29:49 -04:00
InputFiles.h [lld][MachO] Add support for LC_DATA_IN_CODE 2021-06-14 19:21:59 -07:00
InputSection.cpp [lld-macho] Preserve alignment for non-deduplicated cstrings 2021-06-28 22:26:43 -04:00
InputSection.h [lld-macho] Preserve alignment for non-deduplicated cstrings 2021-06-28 22:26:43 -04:00
LTO.cpp [lld-macho][nfc] Add accessors for commonly-used PlatformInfo fields 2021-04-21 15:43:56 -04:00
LTO.h [lld-macho] Add very basic support for LTO 2020-11-10 12:19:28 -08:00
MachOStructs.h [lld-macho] Add support for arm64_32 2021-04-15 21:16:33 -04:00
MapFile.cpp [lld][MachO] Sort symbols in parallel in -map 2021-06-17 10:19:59 +08:00
MapFile.h [lld-macho] implement options -map 2021-03-18 10:39:19 -04:00
MarkLive.cpp [lld-macho] Have dead-stripping work with literal sections 2021-06-11 19:50:09 -04:00
MarkLive.h [lld/mac] Implement -dead_strip 2021-06-02 11:09:26 -04:00
ObjC.cpp [lld-macho] De-templatize mach_header operations 2021-05-03 18:31:23 -04:00
ObjC.h [lld-macho] Implement -ObjC 2020-08-26 19:20:55 -07:00
Options.td [lld-macho] Extend ICF to literal sections 2021-06-28 14:49:39 -04:00
OutputSection.cpp [lld-macho] Refactor segment/section creation, sorting, and merging 2020-06-21 17:13:59 -07:00
OutputSection.h [lld-macho] Have inputOrder default to less than INT_MAX 2021-06-20 19:49:27 -04:00
OutputSegment.cpp [lld/mac] Fix nondeterminism in output section ordering 2021-06-28 18:41:33 -04:00
OutputSegment.h [lld-macho] Have inputOrder default to less than INT_MAX 2021-06-20 19:49:27 -04:00
Relocations.cpp [lld-macho][nfc] Remove DYSYM8 reloc attribute 2021-04-09 19:48:08 -04:00
Relocations.h [lld-macho] Add 32-bit compact unwind support 2021-04-15 21:16:33 -04:00
SymbolTable.cpp [lld-macho][nfc] Move liveness-tracking fields into ConcatInputSection 2021-06-11 19:50:08 -04:00
SymbolTable.h [lld/mac] Implement -dead_strip 2021-06-02 11:09:26 -04:00
Symbols.cpp [lld-macho] Implement ICF 2021-06-17 10:07:44 -07:00
Symbols.h [lld-macho][nfc] Remove InputSection::outSecFileOff 2021-06-13 19:51:30 -04:00
SyntheticSections.cpp [lld-macho] Preserve alignment for non-deduplicated cstrings 2021-06-28 22:26:43 -04:00
SyntheticSections.h [lld-macho] Preserve alignment for non-deduplicated cstrings 2021-06-28 22:26:43 -04:00
Target.cpp [lld-macho][nfc] Create Relocations.{h,cpp} for relocation-specific code 2021-03-11 13:28:09 -05:00
Target.h [lld-macho] Implement branch-range-extension thunks 2021-05-12 09:44:58 -07:00
UnwindInfoSection.cpp [lld-macho][nfc] Remove unnecessary dyn_cast and simplify code 2021-06-28 14:50:44 -04:00
UnwindInfoSection.h [lld-macho] Implement ICF 2021-06-17 10:07:44 -07:00
Writer.cpp [lld-macho] Preserve alignment for non-deduplicated cstrings 2021-06-28 22:26:43 -04:00
Writer.h [lld-macho] De-templatize mach_header operations 2021-05-03 18:31:23 -04:00