<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sun, Nov 24, 2013 at 8:14 PM, Shankar Easwaran <span dir="ltr"><<a href="mailto:shankare@codeaurora.org" target="_blank">shankare@codeaurora.org</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: shankare<br>
Date: Sun Nov 24 22:14:38 2013<br>
New Revision: 195596<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=195596&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=195596&view=rev</a><br>
Log:<br>
[Gnu] Set the type of binary that lld would generate.<br>
<br>
This is needed before any of the search paths are searched for.<br>
<br>
Added:<br>
    lld/trunk/test/elf/X86_64/staticlib-search.test<br>
Modified:<br>
    lld/trunk/lib/Driver/GnuLdDriver.cpp<br>
<br>
Modified: lld/trunk/lib/Driver/GnuLdDriver.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdDriver.cpp?rev=195596&r1=195595&r2=195596&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdDriver.cpp?rev=195596&r1=195595&r2=195596&view=diff</a><br>


==============================================================================<br>
--- lld/trunk/lib/Driver/GnuLdDriver.cpp (original)<br>
+++ lld/trunk/lib/Driver/GnuLdDriver.cpp Sun Nov 24 22:14:38 2013<br>
@@ -158,12 +158,6 @@ bool GnuLdDriver::parse(int argc, const<br>
   bool asNeeded = false;<br>
   bool _outputOptionSet = false;<br>
<br>
-  // Create a dynamic executable by default<br>
-  ctx->setOutputELFType(llvm::ELF::ET_EXEC);<br>
-  ctx->setIsStaticExecutable(false);<br>
-  ctx->setAllowShlibUndefines(false);<br>
-  ctx->setUseShlibUndefines(true);<br>
-<br>
   int index = 0;<br>
<br>
   // Set sys root path.<br>
@@ -176,17 +170,23 @@ bool GnuLdDriver::parse(int argc, const<br>
        it != ie; ++it)<br>
     ctx->addSearchPath((*it)->getValue());<br>
<br>
-  // Process all the arguments and create Input Elements<br>
-  for (auto inputArg : *parsedArgs) {<br>
-    switch (inputArg->getOption().getID()) {<br>
-    case OPT_mllvm:<br>
-      ctx->appendLLVMOption(inputArg->getValue());<br>
-      break;<br>
+  // Create a dynamic executable by default<br>
+  ctx->setOutputELFType(llvm::ELF::ET_EXEC);<br>
+  ctx->setIsStaticExecutable(false);<br>
+  ctx->setAllowShlibUndefines(false);<br>
+  ctx->setUseShlibUndefines(true);</blockquote><div><br></div><div>You might want to move this to ELFLinkingContext as default values, so that you don't need to explicitly set them in the driver by hand. I'd think making the linking context to have a reasonable set of default value would make sense (and for other attributes we do that).</div>

<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">+  // Figure out output kind ( -r, -static, -shared)<br>
+  if ( llvm::opt::Arg *kind = parsedArgs->getLastArg(OPT_relocatable, OPT_static,<br>
+                                      OPT_shared, OPT_nmagic,<br>
+                                      OPT_omagic, OPT_no_omagic)) {<br>
+    switch (kind->getOption().getID()) {<br>
     case OPT_relocatable:<br>
       ctx->setOutputELFType(llvm::ELF::ET_REL);<br>
       ctx->setPrintRemainingUndefines(false);<br>
       ctx->setAllowRemainingUndefines(true);<br>
       break;<br>
+<br>
     case OPT_static:<br>
       ctx->setOutputELFType(llvm::ELF::ET_EXEC);<br>
       ctx->setIsStaticExecutable(true);<br>
@@ -196,6 +196,36 @@ bool GnuLdDriver::parse(int argc, const<br>
       ctx->setAllowShlibUndefines(true);<br>
       ctx->setUseShlibUndefines(false);<br>
       break;<br>
+    }<br>
+  }<br>
+<br>
+  // Figure out if the output type is nmagic/omagic<br>
+  if ( llvm::opt::Arg *kind = parsedArgs->getLastArg(OPT_nmagic, OPT_omagic,<br>
+                                                     OPT_no_omagic)) {<br>
+    switch (kind->getOption().getID()) {<br>
+    case OPT_nmagic:<br>
+      ctx->setOutputMagic(ELFLinkingContext::OutputMagic::NMAGIC);<br>
+      ctx->setIsStaticExecutable(true);<br>
+      break;<br>
+<br>
+    case OPT_omagic:<br>
+      ctx->setOutputMagic(ELFLinkingContext::OutputMagic::OMAGIC);<br>
+      ctx->setIsStaticExecutable(true);<br>
+      break;<br>
+<br>
+    case OPT_no_omagic:<br>
+      ctx->setOutputMagic(ELFLinkingContext::OutputMagic::DEFAULT);<br>
+      ctx->setNoAllowDynamicLibraries();<br>
+      break;<br>
+    }<br>
+  }<br>
+<br>
+  // Process all the arguments and create Input Elements<br>
+  for (auto inputArg : *parsedArgs) {<br>
+    switch (inputArg->getOption().getID()) {<br>
+    case OPT_mllvm:<br>
+      ctx->appendLLVMOption(inputArg->getValue());<br>
+      break;<br>
     case OPT_e:<br>
       ctx->setEntrySymbolName(inputArg->getValue());<br>
       break;<br>
@@ -233,21 +263,6 @@ bool GnuLdDriver::parse(int argc, const<br>
       ctx->setInterpreter(inputArg->getValue());<br>
       break;<br>
<br>
-    case OPT_nmagic:<br>
-      ctx->setOutputMagic(ELFLinkingContext::OutputMagic::NMAGIC);<br>
-      ctx->setIsStaticExecutable(true);<br>
-      break;<br>
-<br>
-    case OPT_omagic:<br>
-      ctx->setOutputMagic(ELFLinkingContext::OutputMagic::OMAGIC);<br>
-      ctx->setIsStaticExecutable(true);<br>
-      break;<br>
-<br>
-    case OPT_no_omagic:<br>
-      ctx->setOutputMagic(ELFLinkingContext::OutputMagic::DEFAULT);<br>
-      ctx->setNoAllowDynamicLibraries();<br>
-      break;<br>
-<br>
     case OPT_u:<br>
       ctx->addInitialUndefinedSymbol(inputArg->getValue());<br>
       break;<br>
<br>
Added: lld/trunk/test/elf/X86_64/staticlib-search.test<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/staticlib-search.test?rev=195596&view=auto" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/X86_64/staticlib-search.test?rev=195596&view=auto</a><br>


==============================================================================<br>
--- lld/trunk/test/elf/X86_64/staticlib-search.test (added)<br>
+++ lld/trunk/test/elf/X86_64/staticlib-search.test Sun Nov 24 22:14:38 2013<br>
@@ -0,0 +1,6 @@<br>
+# This tests the functionality for finding the static library libfn.a for ELF<br>
+RUN: lld -flavor gnu -target x86_64 %p/Inputs/main.o -L%p/Inputs/ -lfn -o %t \<br>
+RUN: --noinhibit-exec -static -t 2> %t1<br>
+RUN: FileCheck %s < %t1<br>
+<br>
+CHECK: {{[\/0-9A-Za-z_]+}}libfn.a<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div><br></div></div>