summaryrefslogtreecommitdiffstats
path: root/lld/ELF/Target.h
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 /lld/ELF/Target.h
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 'lld/ELF/Target.h')
-rw-r--r--lld/ELF/Target.h9
1 files changed, 0 insertions, 9 deletions
diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h
index 4f310e364e3..e1e33de3d26 100644
--- a/lld/ELF/Target.h
+++ b/lld/ELF/Target.h
@@ -117,15 +117,6 @@ public:
// On PPC ELF V2 abi, the first entry in the .got is the .TOC.
unsigned GotHeaderEntriesNum = 0;
- // For TLS variant 1, the TCB is a fixed size specified by the Target.
- // For variant 2, the TCB is an unspecified size.
- // Set to 0 for variant 2.
- unsigned TcbSize = 0;
-
- // Set to the offset (in bytes) that the thread pointer is initialized to
- // point to, relative to the start of the thread local storage.
- unsigned TlsTpOffset = 0;
-
bool NeedsThunks = false;
// A 4-byte field corresponding to one or more trap instructions, used to pad
OpenPOWER on IntegriCloud