]> granicus.if.org Git - llvm/commitdiff
[llvm-dlltool] Set a proper machine type for weak symbol object files
authorMartin Storsjo <martin@martin.st>
Tue, 26 Mar 2019 09:02:44 +0000 (09:02 +0000)
committerMartin Storsjo <martin@martin.st>
Tue, 26 Mar 2019 09:02:44 +0000 (09:02 +0000)
This makes GNU binutils not reject the libraries outright.

GNU ld handles weak externals slightly differently though, so it
can't use them for aliases in import libraries, but this makes GNU
ld able to use the rest of the import libraries.

LLD accepted object files with machine type 0 aka
IMAGE_FILE_MACHINE_UNKNOWN.

Differential Revision: https://reviews.llvm.org/D59742

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356982 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Object/COFFImportFile.cpp
test/tools/llvm-dlltool/coff-weak-exports.def

index e8d2edd2d2b42f80a8656efb3b3059866e57f6d3..f821b51a9e1aff930347881fba77fcf8d09b116a 100644 (file)
@@ -495,7 +495,7 @@ NewArchiveMember ObjectFactory::createWeakExternal(StringRef Sym,
 
   // COFF Header
   coff_file_header Header{
-      u16(0),
+      u16(Machine),
       u16(NumberOfSections),
       u32(0),
       u32(sizeof(Header) + (NumberOfSections * sizeof(coff_section))),
index dbc59be8ae189e6462fb356adaf80145bb6179b3..60f835233a5558b35e876526fa9a91c38412cefd 100644 (file)
@@ -1,5 +1,6 @@
 ; RUN: llvm-dlltool -m i386:x86-64 --input-def %s --output-lib %t.a
 ; RUN: llvm-nm %t.a | FileCheck %s
+; RUN: llvm-readobj %t.a | FileCheck -check-prefix=ARCH %s
 
 LIBRARY test.dll
 EXPORTS
@@ -26,3 +27,5 @@ ImpLibName3 = kernel32.Sleep
 ; CHECK-NEXT: W __imp_ImpLibName2
 ; CHECK:      T ImpLibName3
 ; CHECK-NEXT: T __imp_ImpLibName3
+
+; ARCH-NOT: unknown arch