[lld] r238691 - COFF: Detect file type by file magic.
Rafael EspĂndola
rafael.espindola at gmail.com
Mon Jun 1 11:38:02 PDT 2015
Thanks!
On May 31, 2015 5:22 PM, "Rui Ueyama" <ruiu at google.com> wrote:
> Author: ruiu
> Date: Sun May 31 16:17:10 2015
> New Revision: 238691
>
> URL: http://llvm.org/viewvc/llvm-project?rev=238691&view=rev
> Log:
> COFF: Detect file type by file magic.
>
> Added:
> lld/trunk/test/COFF/filetype.test
> Modified:
> lld/trunk/COFF/Driver.cpp
> lld/trunk/COFF/Driver.h
> lld/trunk/COFF/DriverUtils.cpp
>
> Modified: lld/trunk/COFF/Driver.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=238691&r1=238690&r2=238691&view=diff
>
> ==============================================================================
> --- lld/trunk/COFF/Driver.cpp (original)
> +++ lld/trunk/COFF/Driver.cpp Sun May 31 16:17:10 2015
> @@ -32,6 +32,8 @@ using llvm::COFF::IMAGE_SUBSYSTEM_UNKNOW
> using llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_CUI;
> using llvm::COFF::IMAGE_SUBSYSTEM_WINDOWS_GUI;
> using llvm::sys::Process;
> +using llvm::sys::fs::file_magic;
> +using llvm::sys::fs::identify_magic;
>
> namespace lld {
> namespace coff {
> @@ -62,14 +64,17 @@ static std::string getOutputPath(llvm::o
>
> // Opens a file. Path has to be resolved already.
> // Newly created memory buffers are owned by this driver.
> -ErrorOr<std::unique_ptr<InputFile>> LinkerDriver::createFile(StringRef
> Path) {
> +ErrorOr<std::unique_ptr<InputFile>> LinkerDriver::openFile(StringRef
> Path) {
> auto MBOrErr = MemoryBuffer::getFile(Path);
> if (auto EC = MBOrErr.getError())
> return EC;
> std::unique_ptr<MemoryBuffer> MB = std::move(MBOrErr.get());
> MemoryBufferRef MBRef = MB->getMemBufferRef();
> OwningMBs.push_back(std::move(MB)); // take ownership
> - if (StringRef(Path).endswith_lower(".lib"))
> +
> + // File type is detected by contents, not by file extension.
> + file_magic Magic = identify_magic(MBRef.getBuffer());
> + if (Magic == file_magic::archive)
> return std::unique_ptr<InputFile>(new ArchiveFile(MBRef));
> return std::unique_ptr<InputFile>(new ObjectFile(MBRef));
> }
> @@ -105,7 +110,7 @@ LinkerDriver::parseDirectives(StringRef
>
> for (auto *Arg : Args->filtered(OPT_defaultlib)) {
> if (Optional<StringRef> Path = findLib(Arg->getValue())) {
> - auto FileOrErr = createFile(*Path);
> + auto FileOrErr = openFile(*Path);
> if (auto EC = FileOrErr.getError())
> return EC;
> std::unique_ptr<InputFile> File = std::move(FileOrErr.get());
> @@ -303,7 +308,7 @@ bool LinkerDriver::link(int Argc, const
> // Parse all input files and put all symbols to the symbol table.
> // The symbol table will take care of name resolution.
> for (StringRef Path : Inputs) {
> - auto FileOrErr = createFile(Path);
> + auto FileOrErr = openFile(Path);
> if (auto EC = FileOrErr.getError()) {
> llvm::errs() << Path << ": " << EC.message() << "\n";
> return false;
>
> Modified: lld/trunk/COFF/Driver.h
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.h?rev=238691&r1=238690&r2=238691&view=diff
>
> ==============================================================================
> --- lld/trunk/COFF/Driver.h (original)
> +++ lld/trunk/COFF/Driver.h Sun May 31 16:17:10 2015
> @@ -48,7 +48,7 @@ private:
> StringAllocator Alloc;
>
> // Opens a file. Path has to be resolved already.
> - ErrorOr<std::unique_ptr<InputFile>> createFile(StringRef Path);
> + ErrorOr<std::unique_ptr<InputFile>> openFile(StringRef Path);
>
> // Searches a file from search paths.
> Optional<StringRef> findFile(StringRef Filename);
>
> Modified: lld/trunk/COFF/DriverUtils.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/DriverUtils.cpp?rev=238691&r1=238690&r2=238691&view=diff
>
> ==============================================================================
> --- lld/trunk/COFF/DriverUtils.cpp (original)
> +++ lld/trunk/COFF/DriverUtils.cpp Sun May 31 16:17:10 2015
> @@ -33,8 +33,6 @@
> using namespace llvm::COFF;
> using namespace llvm;
> using llvm::sys::Process;
> -using llvm::sys::fs::file_magic;
> -using llvm::sys::fs::identify_magic;
>
> namespace lld {
> namespace coff {
>
> Added: lld/trunk/test/COFF/filetype.test
> URL:
> http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/filetype.test?rev=238691&view=auto
>
> ==============================================================================
> --- lld/trunk/test/COFF/filetype.test (added)
> +++ lld/trunk/test/COFF/filetype.test Sun May 31 16:17:10 2015
> @@ -0,0 +1,4 @@
> +# Make sure input file type is detected by file magic and not by
> extension.
> +
> +# RUN: yaml2obj < %p/Inputs/ret42.yaml > %t.lib
> +# RUN: lld -flavor link2 /out:%t.exe %t.lib
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150601/ee5cf3ba/attachment.html>
More information about the llvm-commits
mailing list