llvm-project/lld
Adhemerval Zanella 86513f06be ELF/AArch64: Fix dynamic relocation against local symbol in shared objects
AArch64 TLSDESC for local symbol in shared objects are implemented in a
arch specific manner where the TLSDESC dynamic relocation addend is the
symbol VM inside the TLS block. For instance, with a shared library
created from the code:

--
static __thread int32_t x1;
static __thread int64_t x2;

int32_t foo1 (int32_t x)
{
  x1 += x;
  return x;
}

int64_t foo2 (int64_t x)
{
  x2 += x;
  return x;
}
--

The dynamic relocation should be create as:

Relocations [
  Section (N) .rela.dyn {
    <Address1> R_AARCH64_TLSDESC - 0x0
    <Address2> R_AARCH64_TLSDESC - 0x8
  }
]

Where 0x0 addend in first dynamic relocation is the address of 'x1'
in TLS block and '0x8' is the address of 'x2'.

Checked against test-suite on aarch64-linux-gnu.

llvm-svn: 290099
2016-12-19 11:58:01 +00:00
..
COFF Remove lld/Support/Memory.h. 2016-12-18 14:06:06 +00:00
ELF ELF/AArch64: Fix dynamic relocation against local symbol in shared objects 2016-12-19 11:58:01 +00:00
cmake/modules
docs Partially revert r287009: Remove trailing whitespace. 2016-11-15 19:09:13 +00:00
include/lld Remove lld/Support/Memory.h. 2016-12-18 14:06:06 +00:00
lib Remove lld/Support/Memory.h. 2016-12-18 14:06:06 +00:00
test ELF/AArch64: Fix dynamic relocation against local symbol in shared objects 2016-12-19 11:58:01 +00:00
tools/lld Call _exit. 2016-10-26 18:59:00 +00:00
unittests [Cmake] Use Cmake's default RPATH for unittest. 2016-09-12 20:44:53 +00:00
.arcconfig Upgrade all the .arcconfigs to https. 2016-07-14 13:15:37 +00:00
.clang-format
.gitignore
CMakeLists.txt build: add support for standalone lld build 2016-12-12 05:47:40 +00:00
CODE_OWNERS.TXT Add initial CODE_OWNERS.TXT file 2015-07-25 00:44:37 +00:00
LICENSE.TXT Update copyright year to 2016. 2016-03-30 22:40:59 +00:00
README.md

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.