]> granicus.if.org Git - llvm/commitdiff
Merging r356982:
authorTom Stellard <tstellar@redhat.com>
Wed, 15 May 2019 04:59:27 +0000 (04:59 +0000)
committerTom Stellard <tstellar@redhat.com>
Wed, 15 May 2019 04:59:27 +0000 (04:59 +0000)
------------------------------------------------------------------------
r356982 | mstorsjo | 2019-03-26 02:02:44 -0700 (Tue, 26 Mar 2019) | 12 lines

[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
------------------------------------------------------------------------

git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_80@360750 91177308-0d34-0410-b5e6-96231b3b80d8

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

index dc11cc4bcffe64b7157d187a4dea675adcb7a080..e7c7efe436764c42f43246b0b81fcf70f35239bc 100644 (file)
@@ -496,7 +496,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