[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