Skip to content

Commit

Permalink
[ELF] Fix TP offset of TLS Variant I after D62059
Browse files Browse the repository at this point in the history
As Ryan Prichard pointed out, after D62059, the TP offset is incorrect.

Add x86-64-tls-le-align.s to check this.  Better formulae for both
variants should take p_vaddr%p_align into account (offset%p_align =
p_vaddr%p_align is a basic ELF requirement), but I can't find a way to
test the behavior.

llvm-svn: 361084
  • Loading branch information
MaskRay committed May 18, 2019
1 parent f9399de commit 348731a
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion lld/ELF/InputSection.cpp
Expand Up @@ -598,7 +598,7 @@ static int64_t getTlsTpOffset() {
case EM_386:
case EM_X86_64:
// Variant 2. The TLS segment is located just before the thread pointer.
return -Out::TlsPhdr->p_memsz;
return -alignTo(Out::TlsPhdr->p_memsz, Out::TlsPhdr->p_align);
case EM_PPC64:
// The thread pointer points to a fixed offset from the start of the
// executable's TLS segment. An offset of 0x7000 allows a signed 16-bit
Expand Down

0 comments on commit 348731a

Please sign in to comment.