[lld] r288803 - Don't crash trying to write an 0 addend.
Rafael Espindola via llvm-commits
llvm-commits at lists.llvm.org
Tue Dec 6 04:19:24 PST 2016
Author: rafael
Date: Tue Dec 6 06:19:24 2016
New Revision: 288803
URL: http://llvm.org/viewvc/llvm-project?rev=288803&view=rev
Log:
Don't crash trying to write an 0 addend.
For preemptable symbols the dynamic linker does all the work. Trying
to compute the addend is at best wasteful and can also lead to crashes
in cases of programs that uses tls but doesn't define any tls
variables.
Added:
lld/trunk/test/ELF/Inputs/i386-tls-got.s
lld/trunk/test/ELF/i386-tls-got.s
Modified:
lld/trunk/ELF/Relocations.cpp
Modified: lld/trunk/ELF/Relocations.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Relocations.cpp?rev=288803&r1=288802&r2=288803&view=diff
==============================================================================
--- lld/trunk/ELF/Relocations.cpp (original)
+++ lld/trunk/ELF/Relocations.cpp Tue Dec 6 06:19:24 2016
@@ -764,7 +764,7 @@ static void scanRelocs(InputSectionBase<
bool Constant = !Preemptible && !(Config->Pic && !isAbsolute<ELFT>(Body));
if (!Constant)
AddDyn({DynType, In<ELFT>::Got, Off, !Preemptible, &Body, 0});
- if (Constant || !RelTy::IsRela)
+ if (Constant || (!RelTy::IsRela && !Preemptible))
In<ELFT>::Got->Relocations.push_back({GotRE, DynType, Off, 0, &Body});
continue;
}
Added: lld/trunk/test/ELF/Inputs/i386-tls-got.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/Inputs/i386-tls-got.s?rev=288803&view=auto
==============================================================================
--- lld/trunk/test/ELF/Inputs/i386-tls-got.s (added)
+++ lld/trunk/test/ELF/Inputs/i386-tls-got.s Tue Dec 6 06:19:24 2016
@@ -0,0 +1,5 @@
+ .type foobar, at object
+ .section .tdata,"awT", at progbits
+ .globl foobar
+foobar:
+ .long 42
Added: lld/trunk/test/ELF/i386-tls-got.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/i386-tls-got.s?rev=288803&view=auto
==============================================================================
--- lld/trunk/test/ELF/i386-tls-got.s (added)
+++ lld/trunk/test/ELF/i386-tls-got.s Tue Dec 6 06:19:24 2016
@@ -0,0 +1,7 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux %S/Inputs/i386-tls-got.s -o %t1.o
+# RUN: ld.lld %t1.o -o %t1.so -shared
+# RUN: llvm-mc -filetype=obj -triple=i386-pc-linux %s -o %t2.o
+# RUN: ld.lld %t2.o %t1.so -o %t
+
+ addl foobar at INDNTPOFF, %eax
More information about the llvm-commits
mailing list