[lld] 846dccc - [LLD][COFF] Validate import library machine type. (#102738)

via llvm-commits llvm-commits at lists.llvm.org
Sun Aug 11 10:03:12 PDT 2024


Author: Jacek Caban
Date: 2024-08-11T19:03:09+02:00
New Revision: 846dccce9cd030a1984a4d4336267cd2850e6bd8

URL: https://github.com/llvm/llvm-project/commit/846dccce9cd030a1984a4d4336267cd2850e6bd8
DIFF: https://github.com/llvm/llvm-project/commit/846dccce9cd030a1984a4d4336267cd2850e6bd8.diff

LOG: [LLD][COFF] Validate import library machine type. (#102738)

Added: 
    lld/test/COFF/implib-machine.s

Modified: 
    lld/COFF/InputFiles.cpp
    lld/COFF/InputFiles.h

Removed: 
    


################################################################################
diff  --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index 8b21e12152f4b5..f9a22b0a7a5f0f 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<const coff_import_header *>(mb.getBufferStart())
+          ->Machine;
+  return MachineTypes(machine);
+}
+
 void ImportFile::parse() {
   const auto *hdr =
       reinterpret_cast<const coff_import_header *>(mb.getBufferStart());

diff  --git a/lld/COFF/InputFiles.h b/lld/COFF/InputFiles.h
index dd034e5cb43ee7..a332ac87b265e6 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 00000000000000..32deff0fc25f89
--- /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
+ at feat.00 = 1
+        .data
+        .rva __imp__test
+
+#--- test32.def
+NAME test.dll
+EXPORTS
+         test DATA
+
+#--- test64.def
+NAME test.dll
+EXPORTS
+         _test DATA


        


More information about the llvm-commits mailing list