<div dir="ltr">This is interesting. I was thinking that in that case linkers should report an error, but GNU linkers actually report just a warning. Maybe we should report a warning, too.</div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Sep 20, 2016 at 10:14 AM, 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: Tue Sep 20 12:14:16 2016<br>
New Revision: 281989<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=281989&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project?rev=281989&view=rev</a><br>
Log:<br>
Don't produce an error for undefined entry symbol.<br>
<br>
This is particularly important when the symbol comes from a linker<br>
script. It is common to use the same linker script for shared<br>
libraries and executables. Without this we would always fail to link<br>
shared libraries with -z,defs and a linker script with an ENTRY<br>
directive.<br>
<br>
Modified:<br>
    lld/trunk/ELF/Driver.cpp<br>
    lld/trunk/test/ELF/<wbr>linkerscript/linkerscript.s<br>
<br>
Modified: lld/trunk/ELF/Driver.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=281989&r1=281988&r2=281989&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/ELF/Driver.<wbr>cpp?rev=281989&r1=281988&r2=<wbr>281989&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/ELF/Driver.cpp (original)<br>
+++ lld/trunk/ELF/Driver.cpp Tue Sep 20 12:14:16 2016<br>
@@ -667,16 +667,15 @@ template <class ELFT> void LinkerDriver:<br>
   // Note that AMDGPU binaries have no entries.<br>
   if (!Config->Entry.empty()) {<br>
     // It is either "-e <addr>" or "-e <symbol>".<br>
-    if (Config->Entry.getAsInteger(0, Config->EntryAddr))<br>
-      Config->EntrySym = Symtab.addUndefined(Config-><wbr>Entry);<br>
+    Config->Entry.getAsInteger(0, Config->EntryAddr);<br>
   } else if (!Config->Shared && !Config->Relocatable &&<br>
              Config->EMachine != EM_AMDGPU) {<br>
     // -e was not specified. Use the default start symbol name<br>
     // if it is resolvable.<br>
     Config->Entry = (Config->EMachine == EM_MIPS) ? "__start" : "_start";<br>
-    if (Symtab.find(Config->Entry))<br>
-      Config->EntrySym = Symtab.addUndefined(Config-><wbr>Entry);<br>
   }<br>
+  if (Symtab.find(Config->Entry))<br>
+    Config->EntrySym = Symtab.addUndefined(Config-><wbr>Entry);<br>
<br>
   if (HasError)<br>
     return; // There were duplicate symbols or incompatible files<br>
<br>
Modified: lld/trunk/test/ELF/<wbr>linkerscript/linkerscript.s<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/linkerscript/linkerscript.s?rev=281989&r1=281988&r2=281989&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-<wbr>project/lld/trunk/test/ELF/<wbr>linkerscript/linkerscript.s?<wbr>rev=281989&r1=281988&r2=<wbr>281989&view=diff</a><br>
==============================<wbr>==============================<wbr>==================<br>
--- lld/trunk/test/ELF/<wbr>linkerscript/linkerscript.s (original)<br>
+++ lld/trunk/test/ELF/<wbr>linkerscript/linkerscript.s Tue Sep 20 12:14:16 2016<br>
@@ -60,11 +60,10 @@<br>
 # RUN: ld.lld -o %t2 %t.script %t<br>
 # RUN: llvm-readobj %t2 > /dev/null<br>
<br>
+# The entry symbol should not cause an undefined error.<br>
 # RUN: echo "ENTRY(_wrong_label)" > %t.script<br>
-# RUN: not ld.lld -o %t2 %t.script %t > %t.log 2>&1<br>
-# RUN: FileCheck -check-prefix=ERR-ENTRY %s < %t.log<br>
-<br>
-# ERR-ENTRY: undefined symbol: _wrong_label<br>
+# RUN: ld.lld -o %t2 %t.script %t<br>
+# RUN: ld.lld --entry=abc -o %t2 %t<br>
<br>
 # -e has precedence over linker script's ENTRY.<br>
 # RUN: echo "ENTRY(_label)" > %t.script<br>
<br>
<br>
______________________________<wbr>_________________<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/<wbr>mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div>