diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp index 8b21e12152f4b..f9a22b0a7a5f0 100644 --- a/lld/COFF/InputFiles.cpp +++ b/lld/COFF/InputFiles.cpp @@ -987,6 +987,13 @@ void ObjFile::enqueuePdbFile(StringRef path, ObjFile *fromFile) { ImportFile::ImportFile(COFFLinkerContext &ctx, MemoryBufferRef m) : InputFile(ctx, ImportKind, m), live(!ctx.config.doGC), thunkLive(live) {} +MachineTypes ImportFile::getMachineType() const { + uint16_t machine = + reinterpret_cast(mb.getBufferStart()) + ->Machine; + return MachineTypes(machine); +} + void ImportFile::parse() { const auto *hdr = reinterpret_cast(mb.getBufferStart()); diff --git a/lld/COFF/InputFiles.h b/lld/COFF/InputFiles.h index dd034e5cb43ee..a332ac87b265e 100644 --- a/lld/COFF/InputFiles.h +++ b/lld/COFF/InputFiles.h @@ -344,6 +344,7 @@ class ImportFile : public InputFile { explicit ImportFile(COFFLinkerContext &ctx, MemoryBufferRef m); static bool classof(const InputFile *f) { return f->kind() == ImportKind; } + MachineTypes getMachineType() const override; Symbol *impSym = nullptr; Symbol *thunkSym = nullptr; diff --git a/lld/test/COFF/implib-machine.s b/lld/test/COFF/implib-machine.s new file mode 100644 index 0000000000000..32deff0fc25f8 --- /dev/null +++ b/lld/test/COFF/implib-machine.s @@ -0,0 +1,32 @@ +# REQUIRES: x86 +# RUN: split-file %s %t.dir +# RUN: llvm-lib -machine:i386 -out:%t.dir/test32.lib -def:%t.dir/test32.def +# RUN: llvm-lib -machine:amd64 -out:%t.dir/test64.lib -def:%t.dir/test64.def +# RUN: llvm-mc -triple i686-windows-msvc %t.dir/test.s -filetype=obj -o %t.dir/test32.obj +# RUN: llvm-mc -triple x86_64-windows-msvc %t.dir/test.s -filetype=obj -o %t.dir/test64.obj + +# RUN: not lld-link -dll -noentry -out:%t32.dll %t.dir/test32.obj %t.dir/test64.lib 2>&1 | FileCheck --check-prefix=ERR32 %s +# ERR32: error: test.dll: machine type x64 conflicts with x86 + +# RUN: not lld-link -dll -noentry -out:%t64.dll %t.dir/test64.obj %t.dir/test32.lib 2>&1 | FileCheck --check-prefix=ERR64 %s +# ERR64: error: test.dll: machine type x86 conflicts with x64 + +#--- test.s + .def @feat.00; + .scl 3; + .type 0; + .endef + .globl @feat.00 +@feat.00 = 1 + .data + .rva __imp__test + +#--- test32.def +NAME test.dll +EXPORTS + test DATA + +#--- test64.def +NAME test.dll +EXPORTS + _test DATA