llvm-readobj: handle import libraries with -coff-exports
authorSaleem Abdulrasool <compnerd@compnerd.org>
Thu, 18 Aug 2016 14:32:11 +0000 (14:32 +0000)
committerSaleem Abdulrasool <compnerd@compnerd.org>
Thu, 18 Aug 2016 14:32:11 +0000 (14:32 +0000)
`link -dump -exports` lists exported symbols from import libraries as well as
normal dlls.  Ensure that we can handle import libraries as well in
llvm-readobj.

llvm-svn: 279069

llvm/test/tools/llvm-readobj/Inputs/library.lib [new file with mode: 0755]
llvm/test/tools/llvm-readobj/coff-exports-implib.test [new file with mode: 0644]
llvm/tools/llvm-readobj/llvm-readobj.cpp

diff --git a/llvm/test/tools/llvm-readobj/Inputs/library.lib b/llvm/test/tools/llvm-readobj/Inputs/library.lib
new file mode 100755 (executable)
index 0000000..193380d
Binary files /dev/null and b/llvm/test/tools/llvm-readobj/Inputs/library.lib differ
diff --git a/llvm/test/tools/llvm-readobj/coff-exports-implib.test b/llvm/test/tools/llvm-readobj/coff-exports-implib.test
new file mode 100644 (file)
index 0000000..9715109
--- /dev/null
@@ -0,0 +1,22 @@
+RUN: llvm-readobj -coff-exports %p/Inputs/library.lib | FileCheck %s
+
+CHECK: File: library.dll
+CHECK: Format: COFF-import-file
+CHECK: Type: const
+CHECK: Symbol: __imp__constant
+
+CHECK: File: library.dll
+CHECK: Format: COFF-import-file
+CHECK: Type: data
+CHECK: Symbol: __imp__data
+
+CHECK: File: library.dll
+CHECK: Format: COFF-import-file
+CHECK: Type: code
+CHECK: Symbol: __imp__function
+
+CHECK: File: library.dll
+CHECK: Format: COFF-import-file
+CHECK: Type: code
+CHECK: Symbol: __imp__ordinal
+
index 14178b9..d811ea9 100644 (file)
@@ -460,6 +460,8 @@ static void dumpArchive(const Archive *Arc) {
     }
     if (ObjectFile *Obj = dyn_cast<ObjectFile>(&*ChildOrErr.get()))
       dumpObject(Obj);
+    else if (COFFImportFile *Imp = dyn_cast<COFFImportFile>(&*ChildOrErr.get()))
+      dumpCOFFImportFile(Imp);
     else
       reportError(Arc->getFileName(), readobj_error::unrecognized_file_format);
   }