<div dir="ltr">Thank you for doing this. We could alternatively add "-z now" to make this switch available to the user, but I prefer removing options rather than adding ones.</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 18, 2016 at 2:03 PM, Rafael Espindola via llvm-commits <span dir="ltr"><<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: rafael<br>
Date: Wed May 18 16:03:36 2016<br>
New Revision: 269982<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=269982&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=269982&view=rev</a><br>
Log:<br>
Drop vestigial support for UseLazyBinding=false.<br>
<br>
Lazy binding is quite important for use case like a shared build of<br>
llvm. Also, if someone wants to disable it, it is better done in the<br>
compiler (disable plt generation).<br>
<br>
The only reason to keep it is to make it easier to add a new<br>
architecture. But it doesn't really help much as it is possible to start<br>
with non lazy relocation and plt code but still let the generic part<br>
create a dedicated .got.plt and .rela.plt.<br>
<br>
Modified:<br>
    lld/trunk/ELF/OutputSections.cpp<br>
    lld/trunk/ELF/Target.cpp<br>
    lld/trunk/ELF/Target.h<br>
    lld/trunk/ELF/Writer.cpp<br>
    lld/trunk/test/ELF/ppc64-toc-restore.s<br>
<br>
Modified: lld/trunk/ELF/OutputSections.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=269982&r1=269981&r2=269982&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/OutputSections.cpp?rev=269982&r1=269981&r2=269982&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/OutputSections.cpp (original)<br>
+++ lld/trunk/ELF/OutputSections.cpp Wed May 18 16:03:36 2016<br>
@@ -270,17 +270,14 @@ PltSection<ELFT>::PltSection()<br>
<br>
 template <class ELFT> void PltSection<ELFT>::writeTo(uint8_t *Buf) {<br>
   size_t Off = 0;<br>
-  if (Target->UseLazyBinding) {<br>
-    // At beginning of PLT, we have code to call the dynamic linker<br>
-    // to resolve dynsyms at runtime. Write such code.<br>
-    Target->writePltZero(Buf);<br>
-    Off += Target->PltZeroSize;<br>
-  }<br>
+  // At beginning of PLT, we have code to call the dynamic linker<br>
+  // to resolve dynsyms at runtime. Write such code.<br>
+  Target->writePltZero(Buf);<br>
+  Off += Target->PltZeroSize;<br>
   for (auto &I : Entries) {<br>
     const SymbolBody *B = I.first;<br>
     unsigned RelOff = I.second;<br>
-    uint64_t Got =<br>
-        Target->UseLazyBinding ? B->getGotPltVA<ELFT>() : B->getGotVA<ELFT>();<br>
+    uint64_t Got = B->getGotPltVA<ELFT>();<br>
     uint64_t Plt = this->getVA() + Off;<br>
     Target->writePlt(Buf + Off, Got, Plt, B->PltIndex, RelOff);<br>
     Off += Target->PltEntrySize;<br>
@@ -289,9 +286,7 @@ template <class ELFT> void PltSection<EL<br>
<br>
 template <class ELFT> void PltSection<ELFT>::addEntry(SymbolBody &Sym) {<br>
   Sym.PltIndex = Entries.size();<br>
-  unsigned RelOff = Target->UseLazyBinding<br>
-                        ? Out<ELFT>::RelaPlt->getRelocOffset()<br>
-                        : Out<ELFT>::RelaDyn->getRelocOffset();<br>
+  unsigned RelOff = Out<ELFT>::RelaPlt->getRelocOffset();<br>
   Entries.push_back(std::make_pair(&Sym, RelOff));<br>
 }<br>
<br>
<br>
Modified: lld/trunk/ELF/Target.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=269982&r1=269981&r2=269982&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.cpp?rev=269982&r1=269981&r2=269982&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/Target.cpp (original)<br>
+++ lld/trunk/ELF/Target.cpp Wed May 18 16:03:36 2016<br>
@@ -264,7 +264,6 @@ X86TargetInfo::X86TargetInfo() {<br>
   TlsGotRel = R_386_TLS_TPOFF;<br>
   TlsModuleIndexRel = R_386_TLS_DTPMOD32;<br>
   TlsOffsetRel = R_386_TLS_DTPOFF32;<br>
-  UseLazyBinding = true;<br>
   PltEntrySize = 16;<br>
   PltZeroSize = 16;<br>
   TlsGdToLeSkip = 2;<br>
@@ -495,7 +494,6 @@ X86_64TargetInfo::X86_64TargetInfo() {<br>
   TlsGotRel = R_X86_64_TPOFF64;<br>
   TlsModuleIndexRel = R_X86_64_DTPMOD64;<br>
   TlsOffsetRel = R_X86_64_DTPOFF64;<br>
-  UseLazyBinding = true;<br>
   PltEntrySize = 16;<br>
   PltZeroSize = 16;<br>
   TlsGdToLeSkip = 2;<br>
@@ -760,7 +758,7 @@ RelExpr PPCTargetInfo::getRelExpr(uint32<br>
 }<br>
<br>
 PPC64TargetInfo::PPC64TargetInfo() {<br>
-  GotRel = R_PPC64_GLOB_DAT;<br>
+  PltRel = GotRel = R_PPC64_GLOB_DAT;<br>
   RelativeRel = R_PPC64_RELATIVE;<br>
   PltEntrySize = 32;<br>
<br>
@@ -936,7 +934,6 @@ AArch64TargetInfo::AArch64TargetInfo() {<br>
   TlsGotRel = R_AARCH64_TLS_TPREL64;<br>
   TlsModuleIndexRel = R_AARCH64_TLS_DTPMOD64;<br>
   TlsOffsetRel = R_AARCH64_TLS_DTPREL64;<br>
-  UseLazyBinding = true;<br>
   PltEntrySize = 16;<br>
   PltZeroSize = 32;<br>
 }<br>
@@ -1235,7 +1232,6 @@ template <class ELFT> MipsTargetInfo<ELF<br>
   PltEntrySize = 16;<br>
   PltZeroSize = 32;<br>
   ThunkSize = 16;<br>
-  UseLazyBinding = true;<br>
   CopyRel = R_MIPS_COPY;<br>
   PltRel = R_MIPS_JUMP_SLOT;<br>
   if (ELFT::Is64Bits)<br>
<br>
Modified: lld/trunk/ELF/Target.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.h?rev=269982&r1=269981&r2=269982&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Target.h?rev=269982&r1=269981&r2=269982&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/Target.h (original)<br>
+++ lld/trunk/ELF/Target.h Wed May 18 16:03:36 2016<br>
@@ -84,7 +84,6 @@ public:<br>
   unsigned GotPltHeaderEntriesNum = 3;<br>
<br>
   uint32_t ThunkSize = 0;<br>
-  bool UseLazyBinding = false;<br>
<br>
   virtual void relaxTlsGdToIe(uint8_t *Loc, uint32_t Type, uint64_t Val) const;<br>
   virtual void relaxTlsGdToLe(uint8_t *Loc, uint32_t Type, uint64_t Val) const;<br>
<br>
Modified: lld/trunk/ELF/Writer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=269982&r1=269981&r2=269982&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=269982&r1=269981&r2=269982&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/ELF/Writer.cpp (original)<br>
+++ lld/trunk/ELF/Writer.cpp Wed May 18 16:03:36 2016<br>
@@ -170,11 +170,9 @@ template <class ELFT> void elf::writeRes<br>
     GnuHashTab.reset(new GnuHashTableSection<ELFT>);<br>
   if (Config->SysvHash)<br>
     HashTab.reset(new HashTableSection<ELFT>);<br>
-  if (Target->UseLazyBinding) {<br>
-    StringRef S = Config->Rela ? ".rela.plt" : ".rel.plt";<br>
-    GotPlt.reset(new GotPltSection<ELFT>);<br>
-    RelaPlt.reset(new RelocationSection<ELFT>(S, false /*Sort*/));<br>
-  }<br>
+  StringRef S = Config->Rela ? ".rela.plt" : ".rel.plt";<br>
+  GotPlt.reset(new GotPltSection<ELFT>);<br>
+  RelaPlt.reset(new RelocationSection<ELFT>(S, false /*Sort*/));<br>
   if (!Config->StripAll) {<br>
     StrTab.reset(new StringTableSection<ELFT>(".strtab", false));<br>
     SymTabSec.reset(new SymbolTableSection<ELFT>(*Symtab, *StrTab));<br>
@@ -733,20 +731,12 @@ void Writer<ELFT>::scanRelocs(InputSecti<br>
       if (Body.isGnuIFunc())<br>
         Rel = Preemptible ? Target->PltRel : Target->IRelativeRel;<br>
       else<br>
-        Rel = Target->UseLazyBinding ? Target->PltRel : Target->GotRel;<br>
+        Rel = Target->PltRel;<br>
<br>
-      if (Target->UseLazyBinding) {<br>
-        Out<ELFT>::GotPlt->addEntry(Body);<br>
-        Out<ELFT>::RelaPlt->addReloc({Rel, Out<ELFT>::GotPlt,<br>
-                                      Body.getGotPltOffset<ELFT>(),<br>
-                                      !Preemptible, &Body, 0});<br>
-      } else {<br>
-        if (Body.isInGot())<br>
-          continue;<br>
-        Out<ELFT>::Got->addEntry(Body);<br>
-        AddDyn({Rel, Out<ELFT>::Got, Body.getGotOffset<ELFT>(), !Preemptible,<br>
-                &Body, 0});<br>
-      }<br>
+      Out<ELFT>::GotPlt->addEntry(Body);<br>
+      Out<ELFT>::RelaPlt->addReloc({Rel, Out<ELFT>::GotPlt,<br>
+                                    Body.getGotPltOffset<ELFT>(), !Preemptible,<br>
+                                    &Body, 0});<br>
       continue;<br>
     }<br>
<br>
<br>
Modified: lld/trunk/test/ELF/ppc64-toc-restore.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/ppc64-toc-restore.s?rev=269982&r1=269981&r2=269982&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/ppc64-toc-restore.s?rev=269982&r1=269981&r2=269982&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/test/ELF/ppc64-toc-restore.s (original)<br>
+++ lld/trunk/test/ELF/ppc64-toc-restore.s Wed May 18 16:03:36 2016<br>
@@ -53,8 +53,8 @@ last:<br>
 // CHECK: Disassembly of section .plt:<br>
 // CHECK: .plt:<br>
 // CHECK: 10010020:       f8 41 00 28     std 2, 40(1)<br>
-// CHECK: 10010024:       3d 62 00 00     addis 11, 2, 0<br>
-// CHECK: 10010028:       e9 8b 80 00     ld 12, -32768(11)<br>
+// CHECK: 10010024:       3d 62 10 03     addis 11, 2, 4099<br>
+// CHECK: 10010028:       e9 8b 80 18     ld 12, -32744(11)<br>
 // CHECK: 1001002c:       e9 6c 00 00     ld 11, 0(12)<br>
 // CHECK: 10010030:       7d 69 03 a6     mtctr 11<br>
 // CHECK: 10010034:       e8 4c 00 08     ld 2, 8(12)<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>