summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShoaib Meenai <smeenai@fb.com>2017-04-24 18:02:11 +0000
committerShoaib Meenai <smeenai@fb.com>2017-04-24 18:02:11 +0000
commitb573b4b04d0471af4297a296206d7bdd0cd1955b (patch)
treef4d063a44ff936f7cbb07d1925e4cae2a2de2083
parent3e02538a02ca356886fc5766caee151401068c5f (diff)
downloadbcm5719-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.cpp1
-rw-r--r--lld/test/ELF/tls-dynamic-i686.s6
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
OpenPOWER on IntegriCloud