<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Sep 11, 2014 at 5:09 PM, Rui Ueyama <span dir="ltr"><<a href="mailto:ruiu@google.com" target="_blank">ruiu@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Author: ruiu<br>
Date: Thu Sep 11 16:09:57 2014<br>
New Revision: 217627<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=217627&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=217627&view=rev</a><br>
Log:<br>
Support: improve identify_magic to recognize COFF bigobj<br>
<br>
identify_magic recognized a COFF bigobj as an import library file.<br>
This patch fixes that.<br>
<br>
<br>
Modified:<br>
    llvm/trunk/lib/Support/Path.cpp<br>
    llvm/trunk/unittests/Support/Path.cpp<br>
<br>
Modified: llvm/trunk/lib/Support/Path.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Path.cpp?rev=217627&r1=217626&r2=217627&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/Path.cpp?rev=217627&r1=217626&r2=217627&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/Support/Path.cpp (original)<br>
+++ llvm/trunk/lib/Support/Path.cpp Thu Sep 11 16:09:57 2014<br>
@@ -901,10 +901,16 @@ file_magic identify_magic(StringRef Magi<br>
     return file_magic::unknown;<br>
   switch ((unsigned char)Magic[0]) {<br>
     case 0x00: {<br>
-      // COFF short import library file<br>
+      // COFF bigobj or short import library file<br>
       if (Magic[1] == (char)0x00 && Magic[2] == (char)0xff &&<br>
-          Magic[3] == (char)0xff)<br>
-        return file_magic::coff_import_library;<br>
+          Magic[3] == (char)0xff) {<br>
+         const char BigobjMagic[] =<br>
+             "\xc7\xa1\xba\xd1\xee\xba\xa9\x4b\xaf\x20\xfa\xf6\x6a\xa4\xdc\xb8";<br></blockquote><div><br></div><div>Why not use llvm::COFF::BigObjMagic instead?</div><div><br></div><div>Also, you aren't checking the version number.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
+         if (Magic.size() >= 28 &&<br>
+             memcmp(Magic.data() + 12, BigobjMagic, sizeof(BigobjMagic)) == 0)<br>
+           return file_magic::coff_object;<br>
+         return file_magic::coff_import_library;<br>
+      }<br>
       // Windows resource file<br>
       const char Expected[] = { 0, 0, 0, 0, '\x20', 0, 0, 0, '\xff' };<br>
       if (Magic.size() >= sizeof(Expected) &&<br>
<br>
Modified: llvm/trunk/unittests/Support/Path.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/Path.cpp?rev=217627&r1=217626&r2=217627&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/unittests/Support/Path.cpp?rev=217627&r1=217626&r2=217627&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/unittests/Support/Path.cpp (original)<br>
+++ llvm/trunk/unittests/Support/Path.cpp Thu Sep 11 16:09:57 2014<br>
@@ -483,6 +483,8 @@ TEST_F(FileSystemTest, DirectoryIteratio<br>
 const char archive[] = "!<arch>\x0A";<br>
 const char bitcode[] = "\xde\xc0\x17\x0b";<br>
 const char coff_object[] = "\x00\x00......";<br>
+const char coff_bigobj[] = "\x00\x00\xff\xff........"<br>
+    "\xc7\xa1\xba\xd1\xee\xba\xa9\x4b\xaf\x20\xfa\xf6\x6a\xa4\xdc\xb8";<br>
 const char coff_import_library[] = "\x00\x00\xff\xff....";<br>
 const char elf_relocatable[] = { 0x7f, 'E', 'L', 'F', 1, 2, 1, 0, 0,<br>
                                  0,    0,   0,   0,   0, 0, 0, 0, 1 };<br>
@@ -512,6 +514,7 @@ TEST_F(FileSystemTest, Magic) {<br>
     DEFINE(archive),<br>
     DEFINE(bitcode),<br>
     DEFINE(coff_object),<br>
+    { "coff_bigobj", coff_bigobj, sizeof(coff_bigobj), fs::file_magic::coff_object },<br>
     DEFINE(coff_import_library),<br>
     DEFINE(elf_relocatable),<br>
     DEFINE(macho_universal_binary),<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>