[lld] r266427 - Don't create relocations for absolute got entries.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Fri Apr 15 05:44:43 PDT 2016


Author: rafael
Date: Fri Apr 15 07:44:43 2016
New Revision: 266427

URL: http://llvm.org/viewvc/llvm-project?rev=266427&view=rev
Log:
Don't create relocations for absolute got entries.

Modified:
    lld/trunk/ELF/Writer.cpp
    lld/trunk/test/ELF/abs-hidden.s

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=266427&r1=266426&r2=266427&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Fri Apr 15 07:44:43 2016
@@ -588,16 +588,12 @@ void Writer<ELFT>::scanRelocs(InputSecti
         // ftp://www.linux-mips.org/pub/linux/mips/doc/ABI/mipsabi.pdf
         continue;
 
-      if (Preemptible || Config->Pic) {
+      if (Preemptible || (Config->Pic && !isAbsolute<ELFT>(Body))) {
         uint32_t DynType;
         if (Body.isTls())
           DynType = Target->TlsGotRel;
         else if (Preemptible)
           DynType = Target->GotRel;
-        else if (Body.isUndefined())
-          // Weak undefined symbols evaluate to zero, so don't create
-          // relocations for them.
-          continue;
         else
           DynType = Target->RelativeRel;
         AddDyn({DynType, Out<ELFT>::Got, Body.getGotOffset<ELFT>(),

Modified: lld/trunk/test/ELF/abs-hidden.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/abs-hidden.s?rev=266427&r1=266426&r2=266427&view=diff
==============================================================================
--- lld/trunk/test/ELF/abs-hidden.s (original)
+++ lld/trunk/test/ELF/abs-hidden.s Fri Apr 15 07:44:43 2016
@@ -5,6 +5,7 @@
 // RUN: llvm-readobj -r -s -section-data %t.so | FileCheck %s
 
         .quad foo
+        .long foo at gotpcrel
 
 // CHECK:      Name: .text
 // CHECK-NEXT: Type: SHT_PROGBITS
@@ -12,14 +13,32 @@
 // CHECK-NEXT:   SHF_ALLOC
 // CHECK-NEXT:   SHF_EXECINSTR
 // CHECK-NEXT: ]
-// CHECK-NEXT: Address:
+// CHECK-NEXT: Address: 0x1000
 // CHECK-NEXT: Offset:
-// CHECK-NEXT: Size: 8
+// CHECK-NEXT: Size: 12
 // CHECK-NEXT: Link: 0
 // CHECK-NEXT: Info: 0
 // CHECK-NEXT: AddressAlignment: 4
 // CHECK-NEXT: EntrySize: 0
 // CHECK-NEXT: SectionData (
+// CHECK-NEXT:   0000: 42000000 00000000 58100000
+//                                       0x2060 - (0x1000 + 8) = 1058
+// CHECK-NEXT: )
+
+// CHECK:      Name: .got (38)
+// CHECK-NEXT: Type: SHT_PROGBITS
+// CHECK-NEXT: Flags [
+// CHECK-NEXT:   SHF_ALLOC
+// CHECK-NEXT:   SHF_WRITE
+// CHECK-NEXT: ]
+// CHECK-NEXT: Address: 0x2060
+// CHECK-NEXT: Offset:
+// CHECK-NEXT: Size: 8
+// CHECK-NEXT: Link: 0
+// CHECK-NEXT: Info: 0
+// CHECK-NEXT: AddressAlignment: 8
+// CHECK-NEXT: EntrySize: 0
+// CHECK-NEXT: SectionData (
 // CHECK-NEXT:   0000: 42000000 00000000
 // CHECK-NEXT: )
 




More information about the llvm-commits mailing list