llvm-project/lld
Daniel Bertalan 025a5b22c8
[lld-macho] Sort data-in-code entries
Previously, we would add entries to DataInCodeSection in the order they
appeared in input files. Because of this, entries would not be sorted if
sections were reordered due to e.g. `-order_file` or call graph profile
sorting. ld64 always keeps data-in-code information sorted.

This commit also fixes an incorrect assertion. The original assertion
from D103006 used to check that data-in-code entries are sorted in the
input objects -- likely because we use binary search on that data. In
D115556, the assertion was moved into `collectDataInCodeEntries`, but
the checked variable's name was not changed, so it ended up checking the
final contents of the DataInCodeSection.

We no longer crash when building LLVM with PGO using an asserts build of
LLD as the linker.

Fixes https://bugs.chromium.org/p/chromium/issues/detail?id=1265937

Numbers for linking the Chromium Framework reproducer from #48001, which
has 6829 data-in-code entries:

  x before
  + after
      N           Min           Max        Median           Avg        Stddev
  x  20     2.1076453     2.3059683     2.1132485     2.1350302   0.049905767
  +  20     2.1069031     2.3915262       2.14465     2.1728429   0.084065898
  No difference proven at 95.0% confidence

Differential Revision: https://reviews.llvm.org/D133581
2022-09-13 19:08:35 +02:00
..
COFF [lld] Use std::size instead of llvm::array_lengthof 2022-09-09 15:28:30 -06:00
Common [lld] Change vector to SmallVector. NFC 2022-07-30 18:11:21 -07:00
ELF [ELF] Cache compute_thread_count. NFC 2022-09-12 19:09:08 -07:00
MachO [lld-macho] Sort data-in-code entries 2022-09-13 19:08:35 +02:00
MinGW [LLD][MinGW] Add --[no-]guard-cf and --[no-]guard-longjmp 2022-09-09 09:55:40 +03:00
cmake/modules Revert "[CMake] Avoid `LLVM_BINARY_DIR` when other more specific variable are better-suited" 2022-08-25 11:13:46 -04:00
docs [lld-macho][docs] Cosmetic changes 2022-09-12 15:52:20 -04:00
include/lld/Common [ELF] Add makeThreadLocal/makeThreadLocalN and remove InputFile::localSymStorage 2022-08-04 11:09:40 -07:00
test [lld-macho] Sort data-in-code entries 2022-09-13 19:08:35 +02:00
tools/lld [LLD][ELF] Add FORCE_LLD_DIAGNOSTICS_CRASH to force LLD to crash 2022-07-05 09:43:09 +01:00
utils
wasm Use llvm::count_if (NFC) 2022-09-03 11:17:35 -07:00
.clang-format
.clang-tidy NFC: .clang-tidy: Inherit configs from parents to improve maintainability 2021-06-08 08:25:59 -07:00
.gitignore
CMakeLists.txt Revert "[cmake] Use `CMAKE_INSTALL_LIBDIR` too" 2022-08-18 22:46:32 -04:00
CODE_OWNERS.TXT
LICENSE.TXT
README.md

README.md

LLVM Linker (lld)

This directory and its subdirectories contain source code for the LLVM Linker, a modular cross platform linker which is built as part of the LLVM compiler infrastructure project.

lld is open source software. You may freely distribute it under the terms of the license agreement found in LICENSE.txt.

Benchmarking

In order to make sure various developers can evaluate patches over the same tests, we create a collection of self contained programs.

It is hosted at https://s3-us-west-2.amazonaws.com/linker-tests/lld-speed-test.tar.xz

The current sha256 is 10eec685463d5a8bbf08d77f4ca96282161d396c65bd97dc99dbde644a31610f.