From 21483f56366aec1ed5abd2961601680a77ac3b12 Mon Sep 17 00:00:00 2001 From: Ed Schouten Date: Sat, 20 Aug 2016 10:54:51 +0000 Subject: [PATCH] Add R_386_TLS_LE as a relocation having an implicit addend. TLS on i386 in non-PIE/PIC code seems broken right now, because we don't properly add the addend encoded in the instruction to the resulting offset when processing R_386_TLS_LE relocations. Extend one of the existing tests for TLS on i686 to use an addend. PR: https://llvm.org/bugs/show_bug.cgi?id=29068 Reviewed by: ruiu Differential Revision: https://reviews.llvm.org/D23741 llvm-svn: 279368 --- lld/ELF/Target.cpp | 1 + lld/test/ELF/tls-i686.s | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index 5404325..cef32ab 100644 --- a/lld/ELF/Target.cpp +++ b/lld/ELF/Target.cpp @@ -440,6 +440,7 @@ uint64_t X86TargetInfo::getImplicitAddend(const uint8_t *Buf, case R_386_GOTPC: case R_386_PC32: case R_386_PLT32: + case R_386_TLS_LE: return read32le(Buf); } } diff --git a/lld/test/ELF/tls-i686.s b/lld/test/ELF/tls-i686.s index e0a1007..2a04a55 100644 --- a/lld/test/ELF/tls-i686.s +++ b/lld/test/ELF/tls-i686.s @@ -28,7 +28,7 @@ _start: movl %gs:0, %ecx leal var@ntpoff(%ecx), %eax movl %gs:0, %ecx - leal var1@ntpoff(%ecx), %eax + leal var1@ntpoff+123(%ecx), %eax // DIS: Disassembly of section test: // DIS-NEXT: _start: @@ -41,7 +41,7 @@ _start: // DIS-NEXT: 1201c: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx // DIS-NEXT: 12023: 8d 81 f8 ff ff ff leal -8(%ecx), %eax // DIS-NEXT: 12029: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx -// DIS-NEXT: 12030: 8d 81 fc ff ff ff leal -4(%ecx), %eax +// DIS-NEXT: 12030: 8d 81 77 00 00 00 leal 119(%ecx), %eax // RELOC: Relocations [ // RELOC-NEXT: ] @@ -57,7 +57,7 @@ _start: // DISSHARED-NEXT: 201c: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx // DISSHARED-NEXT: 2023: 8d 81 00 00 00 00 leal (%ecx), %eax // DISSHARED-NEXT: 2029: 65 8b 0d 00 00 00 00 movl %gs:0, %ecx -// DISSHARED-NEXT: 2030: 8d 81 00 00 00 00 leal (%ecx), %eax +// DISSHARED-NEXT: 2030: 8d 81 7b 00 00 00 leal 123(%ecx), %eax // RELOCSHARED: Relocations [ // RELOCSHARED-NEXT: Section (4) .rel.dyn { -- 2.7.4