diff options
author | Shoaib Meenai <smeenai@fb.com> | 2017-04-24 18:02:11 +0000 |
---|---|---|
committer | Shoaib Meenai <smeenai@fb.com> | 2017-04-24 18:02:11 +0000 |
commit | b573b4b04d0471af4297a296206d7bdd0cd1955b (patch) | |
tree | f4d063a44ff936f7cbb07d1925e4cae2a2de2083 | |
parent | 3e02538a02ca356886fc5766caee151401068c5f (diff) | |
download | bcm5719-llvm-b573b4b04d0471af4297a296206d7bdd0cd1955b.tar.gz bcm5719-llvm-b573b4b04d0471af4297a296206d7bdd0cd1955b.zip |
[ELF] Account for R_386_TLS_LDO_32 addend
This relocation type has an implicit addend. Account for it when
processing the relocation. Add an offset to an existing test to ensure
it gets processed correctly.
Fixes PR32634.
Differential Revision: https://reviews.llvm.org/D32336
llvm-svn: 301207
-rw-r--r-- | lld/ELF/Target.cpp | 1 | ||||
-rw-r--r-- | lld/test/ELF/tls-dynamic-i686.s | 6 |
2 files changed, 4 insertions, 3 deletions
diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index 664dcd1ed44..c6c8207a793 100644 --- a/lld/ELF/Target.cpp +++ b/lld/ELF/Target.cpp @@ -532,6 +532,7 @@ int64_t X86TargetInfo::getImplicitAddend(const uint8_t *Buf, case R_386_GOTPC: case R_386_PC32: case R_386_PLT32: + case R_386_TLS_LDO_32: case R_386_TLS_LE: return SignExtend64<32>(read32le(Buf)); } diff --git a/lld/test/ELF/tls-dynamic-i686.s b/lld/test/ELF/tls-dynamic-i686.s index 6732483e9e1..ac88e6eaed3 100644 --- a/lld/test/ELF/tls-dynamic-i686.s +++ b/lld/test/ELF/tls-dynamic-i686.s @@ -25,7 +25,7 @@ tls1: .align 4 tls2: .long 0 - .size tls2, 4 + .size tls2, 8 .section .text .globl _start @@ -42,7 +42,7 @@ leal tls2@dtpoff(%eax),%edx leal tls2@tlsldm(%ebx),%eax call __tls_get_addr@plt -leal tls2@dtpoff(%eax),%edx +leal tls2@dtpoff+4(%eax),%edx movl %gs:0,%eax addl tls0@gotntpoff(%ebx),%eax @@ -91,7 +91,7 @@ addl tls1@gotntpoff(%ebx),%eax // DIS-NEXT: 1023: 8d 90 08 00 00 00 leal 8(%eax), %edx // DIS-NEXT: 1029: 8d 83 f0 ff ff ff leal -16(%ebx), %eax // DIS-NEXT: 102f: e8 3c 00 00 00 calll 60 -// DIS-NEXT: 1034: 8d 90 08 00 00 00 leal 8(%eax), %edx +// DIS-NEXT: 1034: 8d 90 0c 00 00 00 leal 12(%eax), %edx // Initial exec model: // DIS-NEXT: 103a: 65 a1 00 00 00 00 movl %gs:0, %eax // DIS-NEXT: 1040: 03 83 f8 ff ff ff addl -8(%ebx), %eax |