[all-commits] [llvm/llvm-project] aed0a0: [lld/mac] Make symbol table order deterministic

Nico Weber via All-commits all-commits at lists.llvm.org
Tue Jun 29 06:30:09 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: aed0a08c69cfb274a1e005e3bd9865ac15c2dfb7
      https://github.com/llvm/llvm-project/commit/aed0a08c69cfb274a1e005e3bd9865ac15c2dfb7
  Author: Nico Weber <thakis at chromium.org>
  Date:   2021-06-29 (Tue, 29 Jun 2021)

  Changed paths:
    M lld/MachO/InputFiles.cpp
    M lld/test/MachO/stabs.s

  Log Message:
  -----------
  [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




More information about the All-commits mailing list