[lld] r265139 - Avoid creating duplicated relocations.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 1 05:54:27 PDT 2016


Author: rafael
Date: Fri Apr  1 07:54:27 2016
New Revision: 265139

URL: http://llvm.org/viewvc/llvm-project?rev=265139&view=rev
Log:
Avoid creating duplicated relocations.

Added:
    lld/trunk/test/ELF/Inputs/tls-got-entry.s
    lld/trunk/test/ELF/tls-got-entry.s
Modified:
    lld/trunk/ELF/Writer.cpp

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=265139&r1=265138&r2=265139&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Fri Apr  1 07:54:27 2016
@@ -295,9 +295,11 @@ static unsigned handleTlsRelocation(uint
     }
     if (!Body.isPreemptible())
       return 1;
-    Out<ELFT>::Got->addEntry(Body);
-    Out<ELFT>::RelaDyn->addReloc(
-        {Target->TlsGotRel, DynamicReloc<ELFT>::Off_Got, false, &Body});
+    if (!Body.isInGot()) {
+      Out<ELFT>::Got->addEntry(Body);
+      Out<ELFT>::RelaDyn->addReloc(
+          {Target->TlsGotRel, DynamicReloc<ELFT>::Off_Got, false, &Body});
+    }
     return 2;
   }
   return 0;

Added: lld/trunk/test/ELF/Inputs/tls-got-entry.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/Inputs/tls-got-entry.s?rev=265139&view=auto
==============================================================================
--- lld/trunk/test/ELF/Inputs/tls-got-entry.s (added)
+++ lld/trunk/test/ELF/Inputs/tls-got-entry.s Fri Apr  1 07:54:27 2016
@@ -0,0 +1,13 @@
+.globl __tls_get_addr
+.align 16, 0x90
+.type __tls_get_addr, at function
+__tls_get_addr:
+
+.type tlsshared0, at object
+.section .tbss,"awT", at nobits
+.globl tlsshared0
+.align 4
+tlsshared0:
+ .long 0
+ .size tlsshared0, 4
+

Added: lld/trunk/test/ELF/tls-got-entry.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/tls-got-entry.s?rev=265139&view=auto
==============================================================================
--- lld/trunk/test/ELF/tls-got-entry.s (added)
+++ lld/trunk/test/ELF/tls-got-entry.s Fri Apr  1 07:54:27 2016
@@ -0,0 +1,25 @@
+// REQUIRES: x86
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %s -o %t.o
+// RUN: llvm-mc -filetype=obj -triple=x86_64-unknown-linux %p/Inputs/tls-got-entry.s -o %tso.o
+// RUN: ld.lld -shared %tso.o -o %t.so
+// RUN: ld.lld %t.o %t.so -o %t1
+// RUN: llvm-readobj -r %t1 | FileCheck %s
+
+// CHECK:      Relocations [
+// CHECK-NEXT:   Section ({{.*}}) .rela.dyn {
+// CHECK-NEXT:     R_X86_64_TPOFF64 tlsshared0 0x0
+// CHECK-NEXT:   }
+// CHECK-NEXT: ]
+
+.globl _start
+_start:
+ .byte 0x66
+ leaq tlsshared0 at tlsgd(%rip),%rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr at plt
+ .byte 0x66
+ leaq tlsshared0 at tlsgd(%rip),%rdi
+ .word 0x6666
+ rex64
+ call __tls_get_addr at plt




More information about the llvm-commits mailing list