[llvm] r356982 - [llvm-dlltool] Set a proper machine type for weak symbol object files

Martin Storsjo via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 26 02:02:45 PDT 2019


Author: mstorsjo
Date: Tue Mar 26 02:02:44 2019
New Revision: 356982

URL: http://llvm.org/viewvc/llvm-project?rev=356982&view=rev
Log:
[llvm-dlltool] Set a proper machine type for weak symbol object files

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

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

Modified: llvm/trunk/lib/Object/COFFImportFile.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Object/COFFImportFile.cpp?rev=356982&r1=356981&r2=356982&view=diff
==============================================================================
--- llvm/trunk/lib/Object/COFFImportFile.cpp (original)
+++ llvm/trunk/lib/Object/COFFImportFile.cpp Tue Mar 26 02:02:44 2019
@@ -495,7 +495,7 @@ NewArchiveMember ObjectFactory::createWe
 
   // COFF Header
   coff_file_header Header{
-      u16(0),
+      u16(Machine),
       u16(NumberOfSections),
       u32(0),
       u32(sizeof(Header) + (NumberOfSections * sizeof(coff_section))),

Modified: llvm/trunk/test/tools/llvm-dlltool/coff-weak-exports.def
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/tools/llvm-dlltool/coff-weak-exports.def?rev=356982&r1=356981&r2=356982&view=diff
==============================================================================
--- llvm/trunk/test/tools/llvm-dlltool/coff-weak-exports.def (original)
+++ llvm/trunk/test/tools/llvm-dlltool/coff-weak-exports.def Tue Mar 26 02:02:44 2019
@@ -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




More information about the llvm-commits mailing list