[PATCH] Path: Recognize COFF import library file magic.

Rafael EspĂ­ndola rafael.espindola at gmail.com
Wed Nov 13 20:01:02 PST 2013


you are not using coff_import_library anywhere in the test. You should
also be able to add a more complete test, no? Can't you, for example,
run llvm-readobj in a "import library"?

On 13 November 2013 17:02, Rui Ueyama <ruiu at google.com> wrote:
>   - added a test
>
> Hi Bigcheese,
>
> http://llvm-reviews.chandlerc.com/D2165
>
> CHANGE SINCE LAST DIFF
>   http://llvm-reviews.chandlerc.com/D2165?vs=5497&id=5518#toc
>
> Files:
>   include/llvm/Support/FileSystem.h
>   lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
>   lib/Object/Binary.cpp
>   lib/Object/ObjectFile.cpp
>   lib/Support/Path.cpp
>   unittests/Support/Path.cpp
>
> Index: include/llvm/Support/FileSystem.h
> ===================================================================
> --- include/llvm/Support/FileSystem.h
> +++ include/llvm/Support/FileSystem.h
> @@ -238,6 +238,7 @@
>      macho_dsym_companion,     ///< Mach-O dSYM companion file
>      macho_universal_binary,   ///< Mach-O universal binary
>      coff_object,              ///< COFF object file
> +    coff_import_library,      ///< COFF import library
>      pecoff_executable,        ///< PECOFF executable file
>      windows_resource          ///< Windows compiled resource file (.rc)
>    };
> Index: lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
> ===================================================================
> --- lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
> +++ lib/ExecutionEngine/RuntimeDyld/RuntimeDyld.cpp
> @@ -584,6 +584,7 @@
>      case sys::fs::file_magic::bitcode:
>      case sys::fs::file_magic::archive:
>      case sys::fs::file_magic::coff_object:
> +    case sys::fs::file_magic::coff_import_library:
>      case sys::fs::file_magic::pecoff_executable:
>      case sys::fs::file_magic::macho_universal_binary:
>      case sys::fs::file_magic::windows_resource:
> Index: lib/Object/Binary.cpp
> ===================================================================
> --- lib/Object/Binary.cpp
> +++ lib/Object/Binary.cpp
> @@ -91,6 +91,7 @@
>        return object_error::success;
>      }
>      case sys::fs::file_magic::coff_object:
> +    case sys::fs::file_magic::coff_import_library:
>      case sys::fs::file_magic::pecoff_executable: {
>        OwningPtr<Binary> ret(
>            ObjectFile::createCOFFObjectFile(scopedSource.take()));
> Index: lib/Object/ObjectFile.cpp
> ===================================================================
> --- lib/Object/ObjectFile.cpp
> +++ lib/Object/ObjectFile.cpp
> @@ -69,6 +69,7 @@
>    case sys::fs::file_magic::macho_dsym_companion:
>      return createMachOObjectFile(Object);
>    case sys::fs::file_magic::coff_object:
> +  case sys::fs::file_magic::coff_import_library:
>    case sys::fs::file_magic::pecoff_executable:
>      return createCOFFObjectFile(Object);
>    }
> Index: lib/Support/Path.cpp
> ===================================================================
> --- lib/Support/Path.cpp
> +++ lib/Support/Path.cpp
> @@ -848,6 +848,10 @@
>      return file_magic::unknown;
>    switch ((unsigned char)Magic[0]) {
>      case 0x00: {
> +      // COFF short import library file
> +      if (Magic[1] == (char)0x00 && Magic[2] == (char)0xff &&
> +          Magic[3] == (char)0xff)
> +        return file_magic::coff_import_library;
>        // Windows resource file
>        const char Expected[] = { 0, 0, 0, 0, '\x20', 0, 0, 0, '\xff' };
>        if (Magic.size() >= sizeof(Expected) &&
> Index: unittests/Support/Path.cpp
> ===================================================================
> --- unittests/Support/Path.cpp
> +++ unittests/Support/Path.cpp
> @@ -418,6 +418,7 @@
>
>  const char archive[] = "!<arch>\x0A";
>  const char bitcode[] = "\xde\xc0\x17\x0b";
> +const char coff_import_library[] = "\x00\x00\xff\xff";
>  const char elf_relocatable[] = { 0x7f, 'E', 'L', 'F', 1, 2, 1, 0, 0,
>                                   0,    0,   0,   0,   0, 0, 0, 0, 1 };
>  const char macho_universal_binary[] = "\xca\xfe\xba\xbe...\0x00";



More information about the llvm-commits mailing list