[PATCH] D116995: [gold] Ignore bitcode from sections inside object files

Tom Stellard via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 11 00:02:57 PST 2022


tstellar created this revision.
tstellar added reviewers: tejohnson, jyknight, pcc.
tstellar requested review of this revision.
Herald added a project: LLVM.

-fembed-bitcode will put bitcode into special sections within object
files, but this is not meant to be used by LTO, so the gold plugin
should ignore it.

https://github.com/llvm/llvm-project/issues/47216


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D116995

Files:
  llvm/test/tools/gold/X86/bcsection.ll
  llvm/tools/gold/gold-plugin.cpp


Index: llvm/tools/gold/gold-plugin.cpp
===================================================================
--- llvm/tools/gold/gold-plugin.cpp
+++ llvm/tools/gold/gold-plugin.cpp
@@ -540,6 +540,14 @@
     BufferRef = Buffer->getMemBufferRef();
   }
 
+  // Only use bitcode files for LTO.  InputFile::create() will load bitcode
+  // from special sections within a binary object, this bitcode is typically
+  // generated by -fembed-bitcode and is not meant for LTO use.
+  if (identify_magic(BufferRef.getBuffer()) != file_magic::bitcode) {
+    *claimed = 0;
+    return LDPS_OK;
+  }
+
   *claimed = 1;
 
   Expected<std::unique_ptr<InputFile>> ObjOrErr = InputFile::create(BufferRef);
Index: llvm/test/tools/gold/X86/bcsection.ll
===================================================================
--- llvm/test/tools/gold/X86/bcsection.ll
+++ /dev/null
@@ -1,17 +0,0 @@
-; RUN: rm -rf %t && mkdir -p %t
-; RUN: llvm-as -o %t/bcsection.bc %s
-
-; RUN: llvm-mc -I=%t -filetype=obj -triple=x86_64-unknown-unknown -o %t/bcsection.bco %p/Inputs/bcsection.s
-; RUN: llvm-nm --no-llvm-bc %t/bcsection.bco 2>&1 | FileCheck %s -check-prefix=NO-SYMBOLS
-; NO-SYMBOLS: no symbols
-
-; RUN: %gold -r -o %t/bcsection.o -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext %t/bcsection.bco
-; RUN: llvm-nm --no-llvm-bc %t/bcsection.o | FileCheck %s
-
-target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-unknown-unknown"
-
-; CHECK: main
-define i32 @main() {
-  ret i32 0
-}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D116995.398858.patch
Type: text/x-patch
Size: 1501 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220111/e64100a3/attachment.bin>


More information about the llvm-commits mailing list