summaryrefslogtreecommitdiffstats
path: root/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
diff options
context:
space:
mode:
authorRyan Prichard <rprichard@google.com>2018-10-31 20:53:17 +0000
committerRyan Prichard <rprichard@google.com>2018-10-31 20:53:17 +0000
commite7cb0225a0882c1595f2279b0c6045a96f61b78d (patch)
treef662aacf031cdf20d6111a1c510885619bbc44d2 /llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
parent3ad0636e0a0c39dfa08b67f1a568ee08ebbd1fdc (diff)
downloadbcm5719-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
OpenPOWER on IntegriCloud