[lld] r274113 - [ELF] - Check the input bitcode files for compatibility.

George Rimar via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 29 02:46:01 PDT 2016


Author: grimar
Date: Wed Jun 29 04:46:00 2016
New Revision: 274113

URL: http://llvm.org/viewvc/llvm-project?rev=274113&view=rev
Log:
[ELF] - Check the input bitcode files for compatibility.

Previously BC files were not checked for the same platform etc,
That lead to confusing error "Invalid section header entry size (e_shentsize) in ELF header" when
mixing files for different architectures.

Patch fixes PR28324.

Differential revision: http://reviews.llvm.org/D21832

Added:
    lld/trunk/test/ELF/lto/mix-platforms.ll
Modified:
    lld/trunk/ELF/SymbolTable.cpp

Modified: lld/trunk/ELF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=274113&r1=274112&r2=274113&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.cpp (original)
+++ lld/trunk/ELF/SymbolTable.cpp Wed Jun 29 04:46:00 2016
@@ -33,9 +33,8 @@ using namespace lld::elf;
 // All input object files must be for the same architecture
 // (e.g. it does not make sense to link x86 object files with
 // MIPS object files.) This function checks for that error.
-template <class ELFT> static bool isCompatible(InputFile *FileP) {
-  auto *F = dyn_cast<ELFFileBase<ELFT>>(FileP);
-  if (!F)
+template <class ELFT> static bool isCompatible(InputFile *F) {
+  if (!isa<ELFFileBase<ELFT>>(F) && !isa<BitcodeFile>(F))
     return true;
   if (F->EKind == Config->EKind && F->EMachine == Config->EMachine)
     return true;

Added: lld/trunk/test/ELF/lto/mix-platforms.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/mix-platforms.ll?rev=274113&view=auto
==============================================================================
--- lld/trunk/test/ELF/lto/mix-platforms.ll (added)
+++ lld/trunk/test/ELF/lto/mix-platforms.ll Wed Jun 29 04:46:00 2016
@@ -0,0 +1,10 @@
+; REQUIRES: x86
+; RUN: llvm-mc %p/Inputs/shared.s -o %t386.o -filetype=obj -triple=i386-pc-linux
+; RUN: ld.lld %t386.o -o %ti386.so -shared
+; RUN: llvm-as %s -o %tx64.o
+; RUN: not ld.lld %ti386.so %tx64.o -o %t 2>&1 | FileCheck %s
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+; CHECK: {{.*}}x64.o is incompatible with {{.*}}i386.so




More information about the llvm-commits mailing list