diff options
author | Ryan Prichard <rprichard@google.com> | 2018-10-31 20:53:17 +0000 |
---|---|---|
committer | Ryan Prichard <rprichard@google.com> | 2018-10-31 20:53:17 +0000 |
commit | e7cb0225a0882c1595f2279b0c6045a96f61b78d (patch) | |
tree | f662aacf031cdf20d6111a1c510885619bbc44d2 /llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp | |
parent | 3ad0636e0a0c39dfa08b67f1a568ee08ebbd1fdc (diff) | |
download | bcm5719-llvm-e7cb0225a0882c1595f2279b0c6045a96f61b78d.tar.gz bcm5719-llvm-e7cb0225a0882c1595f2279b0c6045a96f61b78d.zip |
[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::elf::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
Diffstat (limited to 'llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp')
0 files changed, 0 insertions, 0 deletions