llvm-project/lld
Ryan Prichard e7cb0225a0 [ELF] Refactor per-target TLS layout configuration. NFC.
Summary:
There are really three different kinds of TLS layouts:

 * A fixed TLS-to-TP offset. On architectures like PowerPC, MIPS, and
   RISC-V, the thread pointer points to a fixed offset from the start
   of the executable's TLS segment. The offset is 0x7000 for PowerPC
   and MIPS, which allows a signed 16-bit offset to reach 0x1000 of
   per-thread implementation data and 0xf000 of the application's TLS
   segment. The size and layout of the TCB isn't relevant to the static
   linker and might not be known.

 * A fixed TCB size. This is the format documented as "variant 1" in
   Ulrich Drepper's TLS spec. The thread pointer points to a 2-word TCB
   followed by the executable's TLS segment. The first word is always
   the DTV pointer. Used on ARM. The thread pointer must be aligned to
   the TLS segment's alignment, possibly creating alignment padding.

 * Variant 2. This format predates variant 1 and is also documented in
   Drepper's TLS spec. It allocates the executable's TLS segment before
   the thread pointer, apparently for backwards-compatibility. It's
   used on x86 and SPARC.

Factor out an lld:🧝:getTlsTpOffset() function for use in a
follow-up patch for Android. The TcbSize/TlsTpOffset fields are only used
in getTlsTpOffset, so replace them with a switch on Config->EMachine.

Reviewers: espindola, ruiu, PkmX, jrtc27

Reviewed By: ruiu, PkmX, jrtc27

Subscribers: jyknight, emaste, sdardis, nemanjai, javed.absar, arichardson, kristof.beyls, kbarton, fedor.sergeev, atanasyan, PkmX, jsji, llvm-commits

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

llvm-svn: 345775
2018-10-31 20:53:17 +00:00
..
COFF [MinGW] Support for multiarch runtimes layout 2018-10-24 07:42:10 +00:00
Common Allow later -z name=<int> args to override earlier args 2018-09-26 20:50:39 +00:00
ELF [ELF] Refactor per-target TLS layout configuration. NFC. 2018-10-31 20:53:17 +00:00
MinGW [MinGW] Pass libpath to the COFF linker 2018-10-10 09:00:03 +00:00
cmake/modules [CMake] Properly conditionalize installation of lld libraries 2018-03-09 13:09:36 +00:00
docs Add an entry to the release notes. 2018-10-09 17:53:33 +00:00
include/lld Use llvm::arrayRefFromStringRef 2018-10-22 08:35:39 +00:00
lib Eliminate dependency to formatv(). NFC. 2018-10-10 20:29:29 +00:00
test [WedAssembly] Add -s and -S alias for --strip-all and --strip-debug 2018-10-31 19:30:43 +00:00
tools/lld Fix typo in error message. NFC. 2018-09-13 15:37:13 +00:00
unittests [Darwin] Use errorHandler from liblldCommon 2018-06-12 02:34:04 +00:00
utils Add a script to run various benchmarks and send the result to lnt. 2017-11-14 16:40:30 +00:00
wasm [WedAssembly] Add -s and -S alias for --strip-all and --strip-debug 2018-10-31 19:30:43 +00:00
.arcconfig [lld] Set up .arcconfig to point to new Diffusion LLD repository 2017-12-06 20:56:23 +00:00
.clang-format
.gitignore
CMakeLists.txt [WebAssembly] Initial wasm linker implementation 2017-11-17 18:14:09 +00:00
CODE_OWNERS.TXT [WebAssembly] Initial wasm linker implementation 2017-11-17 18:14:09 +00:00
LICENSE.TXT Update copyright year to 2018. 2018-06-18 12:22:17 +00:00
README.md Note that the test .tar.xz has been updated. 2017-12-22 19:37:32 +00:00

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.