diff --git a/llvm/lib/Object/ObjectFile.cpp b/llvm/lib/Object/ObjectFile.cpp --- a/llvm/lib/Object/ObjectFile.cpp +++ b/llvm/lib/Object/ObjectFile.cpp @@ -79,7 +79,7 @@ bool ObjectFile::isSectionBitcode(DataRefImpl Sec) const { Expected NameOrErr = getSectionName(Sec); if (NameOrErr) - return *NameOrErr == ".llvmbc" || *NameOrErr == ".llvm.lto"; + return *NameOrErr == ".llvm.lto"; consumeError(NameOrErr.takeError()); return false; } diff --git a/llvm/test/LTO/X86/Inputs/bcsection.macho.s b/llvm/test/LTO/X86/Inputs/bcsection.macho.s --- a/llvm/test/LTO/X86/Inputs/bcsection.macho.s +++ b/llvm/test/LTO/X86/Inputs/bcsection.macho.s @@ -2,4 +2,4 @@ .asciz "Wrong Section" .section __LLVM,__bitcode -.incbin "bcsection.bc" +.incbin "llvm.lto.section.bc" diff --git a/llvm/test/LTO/X86/Inputs/llvm.lto.section.s b/llvm/test/LTO/X86/Inputs/llvm.lto.section.s new file mode 100644 --- /dev/null +++ b/llvm/test/LTO/X86/Inputs/llvm.lto.section.s @@ -0,0 +1,2 @@ +.section .llvm.lto +.incbin "llvm.lto.section.bc" diff --git a/llvm/test/LTO/X86/bcsection.ll b/llvm/test/LTO/X86/bcsection.ll --- a/llvm/test/LTO/X86/bcsection.ll +++ b/llvm/test/LTO/X86/bcsection.ll @@ -2,23 +2,17 @@ ; RUN: llvm-as -o %t/bcsection.bc %s ; RUN: llvm-mc -I=%t -filetype=obj -triple=x86_64-pc-win32 -o %t/bcsection.coff.bco %p/Inputs/bcsection.s -; RUN: llvm-nm %t/bcsection.coff.bco | FileCheck %s -; RUN: llvm-lto -exported-symbol=main -exported-symbol=_main -o %t/bcsection.coff.o %t/bcsection.coff.bco -; RUN: llvm-nm %t/bcsection.coff.o | FileCheck %s +; RUN: llvm-nm %t/bcsection.coff.bco | FileCheck %s --allow-empty +; RUN: not llvm-lto -exported-symbol=main -exported-symbol=_main -o %t/bcsection.coff.o %t/bcsection.coff.bco ; RUN: llvm-mc -I=%t -filetype=obj -triple=x86_64-unknown-linux-gnu -o %t/bcsection.elf.bco %p/Inputs/bcsection.s -; RUN: llvm-nm %t/bcsection.elf.bco | FileCheck %s -; RUN: llvm-lto -exported-symbol=main -exported-symbol=_main -o %t/bcsection.elf.o %t/bcsection.elf.bco -; RUN: llvm-nm %t/bcsection.elf.o | FileCheck %s - -; RUN: llvm-mc -I=%t -filetype=obj -triple=x86_64-apple-darwin11 -o %t/bcsection.macho.bco %p/Inputs/bcsection.macho.s -; RUN: llvm-nm %t/bcsection.macho.bco | FileCheck %s -; RUN: llvm-lto -exported-symbol=main -exported-symbol=_main -o %t/bcsection.macho.o %t/bcsection.macho.bco -; RUN: llvm-nm %t/bcsection.macho.o | FileCheck %s +; RUN: llvm-nm %t/bcsection.elf.bco | FileCheck %s --allow-empty +; RUN: not llvm-lto -exported-symbol=main -exported-symbol=_main -o %t/bcsection.elf.o %t/bcsection.elf.bco target triple = "x86_64-unknown-linux-gnu" -; CHECK: main +;; The .llvmbc section is not intended for use with LTO, so there should be nothing here +; CHECK-NOT: main define i32 @main() { ret i32 0 } diff --git a/llvm/test/LTO/X86/bcsection.ll b/llvm/test/LTO/X86/llvm.lto.section.ll copy from llvm/test/LTO/X86/bcsection.ll copy to llvm/test/LTO/X86/llvm.lto.section.ll --- a/llvm/test/LTO/X86/bcsection.ll +++ b/llvm/test/LTO/X86/llvm.lto.section.ll @@ -1,15 +1,16 @@ ; RUN: rm -rf %t && mkdir -p %t -; RUN: llvm-as -o %t/bcsection.bc %s +; RUN: llvm-as -o %t/llvm.lto.section.bc %s -; RUN: llvm-mc -I=%t -filetype=obj -triple=x86_64-pc-win32 -o %t/bcsection.coff.bco %p/Inputs/bcsection.s -; RUN: llvm-nm %t/bcsection.coff.bco | FileCheck %s -; RUN: llvm-lto -exported-symbol=main -exported-symbol=_main -o %t/bcsection.coff.o %t/bcsection.coff.bco -; RUN: llvm-nm %t/bcsection.coff.o | FileCheck %s +; RUN: llvm-mc -I=%t -filetype=obj -triple=x86_64-pc-win32 -o %t/llvm.lto.section.coff.bco %p/Inputs/llvm.lto.section.s +; RUN: llvm-nm %t/llvm.lto.section.coff.bco | FileCheck %s +; RUN: llvm-lto -exported-symbol=main -exported-symbol=_main -o %t/llvm.lto.section.coff.o %t/llvm.lto.section.coff.bco +; RUN: llvm-nm %t/llvm.lto.section.coff.o | FileCheck %s + +; RUN: llvm-mc -I=%t -filetype=obj -triple=x86_64-unknown-linux-gnu -o %t/llvm.lto.section.elf.bco %p/Inputs/llvm.lto.section.s +; RUN: llvm-nm %t/llvm.lto.section.elf.bco | FileCheck %s +; RUN: llvm-lto -exported-symbol=main -exported-symbol=_main -o %t/llvm.lto.section.elf.o %t/llvm.lto.section.elf.bco +; RUN: llvm-nm %t/llvm.lto.section.elf.o | FileCheck %s -; RUN: llvm-mc -I=%t -filetype=obj -triple=x86_64-unknown-linux-gnu -o %t/bcsection.elf.bco %p/Inputs/bcsection.s -; RUN: llvm-nm %t/bcsection.elf.bco | FileCheck %s -; RUN: llvm-lto -exported-symbol=main -exported-symbol=_main -o %t/bcsection.elf.o %t/bcsection.elf.bco -; RUN: llvm-nm %t/bcsection.elf.o | FileCheck %s ; RUN: llvm-mc -I=%t -filetype=obj -triple=x86_64-apple-darwin11 -o %t/bcsection.macho.bco %p/Inputs/bcsection.macho.s ; RUN: llvm-nm %t/bcsection.macho.bco | FileCheck %s diff --git a/llvm/tools/gold/gold-plugin.cpp b/llvm/tools/gold/gold-plugin.cpp --- a/llvm/tools/gold/gold-plugin.cpp +++ b/llvm/tools/gold/gold-plugin.cpp @@ -538,14 +538,6 @@ BufferRef = Buffer->getMemBufferRef(); } - // Only use bitcode files for LTO. InputFile::create() will load bitcode - // from the .llvmbc section within a binary object, this bitcode is typically - // generated by -fembed-bitcode and is not to be used by LLVMgold.so for LTO. - if (identify_magic(BufferRef.getBuffer()) != file_magic::bitcode) { - *claimed = 0; - return LDPS_OK; - } - *claimed = 1; Expected> ObjOrErr = InputFile::create(BufferRef);