[lld] r248730 - Add support for got/ptl referring to symbols defined in .o files.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 28 12:48:34 PDT 2015


Author: rafael
Date: Mon Sep 28 14:48:34 2015
New Revision: 248730

URL: http://llvm.org/viewvc/llvm-project?rev=248730&view=rev
Log:
 Add support for got/ptl referring to symbols defined in .o files.

Modified:
    lld/trunk/ELF/InputSection.cpp
    lld/trunk/ELF/Writer.cpp
    lld/trunk/test/elf2/plt.s

Modified: lld/trunk/ELF/InputSection.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/InputSection.cpp?rev=248730&r1=248729&r2=248730&view=diff
==============================================================================
--- lld/trunk/ELF/InputSection.cpp (original)
+++ lld/trunk/ELF/InputSection.cpp Mon Sep 28 14:48:34 2015
@@ -51,18 +51,12 @@ void InputSection<ELFT>::relocate(
       const auto &Body =
           *cast<ELFSymbolBody<ELFT>>(File.getSymbolBody(SymIndex));
       SymVA = getSymVA<ELFT>(Body, BssSec);
-      if (Target->relocNeedsPlt(Type))
+      if (Target->relocNeedsPlt(Type)) {
         SymVA = PltSec.getEntryAddr(Body);
-      else if (Target->relocNeedsGot(Type))
+        Type = Target->getPCRelReloc();
+      } else if (Target->relocNeedsGot(Type)) {
         SymVA = GotSec.getEntryAddr(Body);
-
-      if (Body.kind() == SymbolBody::SharedKind) {
-        if (Target->relocNeedsPlt(Type))
-          Type = Target->getPCRelReloc();
-        else if (Target->relocNeedsGot(Type))
-          Type = Target->getPCRelReloc();
-        else
-          continue;
+        Type = Target->getPCRelReloc();
       }
     }
 

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=248730&r1=248729&r2=248730&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Mon Sep 28 14:48:34 2015
@@ -244,8 +244,6 @@ void Writer<ELFT>::scanRelocs(
         continue;
       GotSec.addEntry(Body);
     }
-    if (!isa<SharedSymbol<ELFT>>(Body))
-      continue;
     Body->setUsedInDynamicReloc();
     RelaDynSec.addReloc({C, RI});
   }

Modified: lld/trunk/test/elf2/plt.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/plt.s?rev=248730&r1=248729&r2=248730&view=diff
==============================================================================
--- lld/trunk/test/elf2/plt.s (original)
+++ lld/trunk/test/elf2/plt.s Mon Sep 28 14:48:34 2015
@@ -14,7 +14,7 @@
 // CHECK-NEXT: ]
 // CHECK-NEXT: Address: 0x16000
 // CHECK-NEXT: Offset:
-// CHECK-NEXT: Size: 16
+// CHECK-NEXT: Size: 24
 // CHECK-NEXT: Link: 0
 // CHECK-NEXT: Info: 0
 // CHECK-NEXT: AddressAlignment: 16
@@ -23,6 +23,7 @@
 // CHECK-NEXT:   Section ({{.*}}) .rela.dyn {
 // CHECK-NEXT:     0x15000 R_X86_64_GLOB_DAT bar 0x0
 // CHECK-NEXT:     0x15008 R_X86_64_GLOB_DAT zed 0x0
+// CHECK-NEXT:     0x15010 R_X86_64_GLOB_DAT _start 0x0
 // CHECK-NEXT:   }
 // CHECK-NEXT: ]
 
@@ -55,3 +56,4 @@ _start:
   jmp bar at PLT
   jmp bar at PLT
   jmp zed at PLT
+  jmp _start at plt




More information about the llvm-commits mailing list