summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Storsjo <martin@martin.st>2019-03-26 09:02:44 +0000
committerMartin Storsjo <martin@martin.st>2019-03-26 09:02:44 +0000
commit146db4405c15a9da34d2164f34d87ebe5388783d (patch)
treecfa97acb26fcab45c14109689da092f2874b06d2
parente41a74e8d288be21855e7adc32a2f69a98eb2877 (diff)
downloadbcm5719-llvm-146db4405c15a9da34d2164f34d87ebe5388783d.tar.gz
bcm5719-llvm-146db4405c15a9da34d2164f34d87ebe5388783d.zip
[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 llvm-svn: 356982
-rw-r--r--llvm/lib/Object/COFFImportFile.cpp2
-rw-r--r--llvm/test/tools/llvm-dlltool/coff-weak-exports.def3
2 files changed, 4 insertions, 1 deletions
diff --git a/llvm/lib/Object/COFFImportFile.cpp b/llvm/lib/Object/COFFImportFile.cpp
index e8d2edd2d2b..f821b51a9e1 100644
--- a/llvm/lib/Object/COFFImportFile.cpp
+++ b/llvm/lib/Object/COFFImportFile.cpp
@@ -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))),
diff --git a/llvm/test/tools/llvm-dlltool/coff-weak-exports.def b/llvm/test/tools/llvm-dlltool/coff-weak-exports.def
index dbc59be8ae1..60f835233a5 100644
--- a/llvm/test/tools/llvm-dlltool/coff-weak-exports.def
+++ b/llvm/test/tools/llvm-dlltool/coff-weak-exports.def
@@ -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
OpenPOWER on IntegriCloud