<p dir="ltr">Thanks! </p>
<div class="gmail_quote">On May 31, 2015 5:22 PM, "Rui Ueyama" <<a href="mailto:ruiu@google.com">ruiu@google.com</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ruiu<br>
Date: Sun May 31 16:17:10 2015<br>
New Revision: 238691<br>
<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D238691-26view-3Drev&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=UBUNqzxnz9queOo0dPcEskpdGlWfQxuaJux73l-Q5rI&s=BJ3NslrG3Zf5Wrd19GjlZB0uXA66jrsqQYdYaiy2roQ&e=" target="_blank">http://llvm.org/viewvc/llvm-project?rev=238691&view=rev</a><br>
Log:<br>
COFF: Detect file type by file magic.<br>
<br>
Added:<br>
    lld/trunk/test/COFF/filetype.test<br>
Modified:<br>
    lld/trunk/COFF/Driver.cpp<br>
    lld/trunk/COFF/Driver.h<br>
    lld/trunk/COFF/DriverUtils.cpp<br>
<br>
Modified: lld/trunk/COFF/Driver.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_COFF_Driver.cpp-3Frev-3D238691-26r1-3D238690-26r2-3D238691-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=UBUNqzxnz9queOo0dPcEskpdGlWfQxuaJux73l-Q5rI&s=SkcqER_lxdKOZGgX8o0Ml2YkZQyzAkRrAvBNN2I_0qg&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=238691&r1=238690&r2=238691&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/COFF/Driver.cpp (original)<br>
+++ lld/trunk/COFF/Driver.cpp Sun May 31 16:17:10 2015<br>
@@ -32,6 +32,8 @@ using llvm::COFF::IMAGE_SUBSYSTEM_UNKNOW<br>
 using llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI;<br>
 using llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_GUI;<br>
 using llvm::sys::Process;<br>
+using llvm::sys::fs::file_magic;<br>
+using llvm::sys::fs::identify_magic;<br>
<br>
 namespace lld {<br>
 namespace coff {<br>
@@ -62,14 +64,17 @@ static std::string getOutputPath(llvm::o<br>
<br>
 // Opens a file. Path has to be resolved already.<br>
 // Newly created memory buffers are owned by this driver.<br>
-ErrorOr<std::unique_ptr<InputFile>> LinkerDriver::createFile(StringRef Path) {<br>
+ErrorOr<std::unique_ptr<InputFile>> LinkerDriver::openFile(StringRef Path) {<br>
   auto MBOrErr = MemoryBuffer::getFile(Path);<br>
   if (auto EC = MBOrErr.getError())<br>
     return EC;<br>
   std::unique_ptr<MemoryBuffer> MB = std::move(MBOrErr.get());<br>
   MemoryBufferRef MBRef = MB->getMemBufferRef();<br>
   OwningMBs.push_back(std::move(MB)); // take ownership<br>
-  if (StringRef(Path).endswith_lower(".lib"))<br>
+<br>
+  // File type is detected by contents, not by file extension.<br>
+  file_magic Magic = identify_magic(MBRef.getBuffer());<br>
+  if (Magic == file_magic::archive)<br>
     return std::unique_ptr<InputFile>(new ArchiveFile(MBRef));<br>
   return std::unique_ptr<InputFile>(new ObjectFile(MBRef));<br>
 }<br>
@@ -105,7 +110,7 @@ LinkerDriver::parseDirectives(StringRef<br>
<br>
   for (auto *Arg : Args->filtered(OPT_defaultlib)) {<br>
     if (Optional<StringRef> Path = findLib(Arg->getValue())) {<br>
-      auto FileOrErr = createFile(*Path);<br>
+      auto FileOrErr = openFile(*Path);<br>
       if (auto EC = FileOrErr.getError())<br>
         return EC;<br>
       std::unique_ptr<InputFile> File = std::move(FileOrErr.get());<br>
@@ -303,7 +308,7 @@ bool LinkerDriver::link(int Argc, const<br>
   // Parse all input files and put all symbols to the symbol table.<br>
   // The symbol table will take care of name resolution.<br>
   for (StringRef Path : Inputs) {<br>
-    auto FileOrErr = createFile(Path);<br>
+    auto FileOrErr = openFile(Path);<br>
     if (auto EC = FileOrErr.getError()) {<br>
       llvm::errs() << Path << ": " << EC.message() << "\n";<br>
       return false;<br>
<br>
Modified: lld/trunk/COFF/Driver.h<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_COFF_Driver.h-3Frev-3D238691-26r1-3D238690-26r2-3D238691-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=UBUNqzxnz9queOo0dPcEskpdGlWfQxuaJux73l-Q5rI&s=UnT6Wz5eakXBB8aW9wPJfEgpfjDGFPYJYuZB7stAvCQ&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.h?rev=238691&r1=238690&r2=238691&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/COFF/Driver.h (original)<br>
+++ lld/trunk/COFF/Driver.h Sun May 31 16:17:10 2015<br>
@@ -48,7 +48,7 @@ private:<br>
   StringAllocator Alloc;<br>
<br>
   // Opens a file. Path has to be resolved already.<br>
-  ErrorOr<std::unique_ptr<InputFile>> createFile(StringRef Path);<br>
+  ErrorOr<std::unique_ptr<InputFile>> openFile(StringRef Path);<br>
<br>
   // Searches a file from search paths.<br>
   Optional<StringRef> findFile(StringRef Filename);<br>
<br>
Modified: lld/trunk/COFF/DriverUtils.cpp<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_COFF_DriverUtils.cpp-3Frev-3D238691-26r1-3D238690-26r2-3D238691-26view-3Ddiff&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=UBUNqzxnz9queOo0dPcEskpdGlWfQxuaJux73l-Q5rI&s=28ylg9Grhgm267n31IQjo_nsZa5BR2mNAWgYZvMuvzs&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/DriverUtils.cpp?rev=238691&r1=238690&r2=238691&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/COFF/DriverUtils.cpp (original)<br>
+++ lld/trunk/COFF/DriverUtils.cpp Sun May 31 16:17:10 2015<br>
@@ -33,8 +33,6 @@<br>
 using namespace llvm::COFF;<br>
 using namespace llvm;<br>
 using llvm::sys::Process;<br>
-using llvm::sys::fs::file_magic;<br>
-using llvm::sys::fs::identify_magic;<br>
<br>
 namespace lld {<br>
 namespace coff {<br>
<br>
Added: lld/trunk/test/COFF/filetype.test<br>
URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_lld_trunk_test_COFF_filetype.test-3Frev-3D238691-26view-3Dauto&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=UBUNqzxnz9queOo0dPcEskpdGlWfQxuaJux73l-Q5rI&s=lZEHeCRovKsIiwoi54wFzNKMDTvBIpuMlDXzPJ7KZtU&e=" target="_blank">http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/filetype.test?rev=238691&view=auto</a><br>
==============================================================================<br>
--- lld/trunk/test/COFF/filetype.test (added)<br>
+++ lld/trunk/test/COFF/filetype.test Sun May 31 16:17:10 2015<br>
@@ -0,0 +1,4 @@<br>
+# Make sure input file type is detected by file magic and not by extension.<br>
+<br>
+# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.lib<br>
+# RUN: lld -flavor link2 /out:%t.exe %t.lib<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>