[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 15:21:27 PST 2022
tstellar updated this revision to Diff 399097.
tstellar added a comment.
Add test case.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D116995/new/
https://reviews.llvm.org/D116995
Files:
llvm/test/tools/gold/X86/Inputs/bcsection-lib.ll
llvm/test/tools/gold/X86/Inputs/bcsection.s
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
+++ llvm/test/tools/gold/X86/bcsection.ll
@@ -2,16 +2,29 @@
; 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: llc -filetype=obj -mtriple=x86_64-unknown-unknown -o %t/bcsection-lib.o %p/Inputs/bcsection-lib.ll
-; 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
+; RUN: %gold -shared --no-undefined -o %t/bcsection.so -m elf_x86_64 -plugin %llvmshlibdir/LLVMgold%shlibext %t/bcsection.bco %t/bcsection-lib.o
+
+; This test checks that the gold plugin does not attempt to use the bitcode
+; in the .llvmbc section for LTO. bcsection-lib.o calls a function that is
+; present the symbol table of bcsection.bco, but not included in the embedded
+; bitcode. If the linker were to use the bitcode, then the symbols in the
+; symbol table of bcsection.bco will be ignored and the link will fail.
+;
+; bcsection.bco:
+; .text:
+; elf_func
+; .llvmbc:
+; bitcode_func
+;
+; bcsection-lib.o:
+; calls elf_func()
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() {
+define i32 @bitcode_func() {
ret i32 0
}
Index: llvm/test/tools/gold/X86/Inputs/bcsection.s
===================================================================
--- llvm/test/tools/gold/X86/Inputs/bcsection.s
+++ llvm/test/tools/gold/X86/Inputs/bcsection.s
@@ -1,2 +1,7 @@
+.global elf_func
+
+elf_func:
+ ret
+
.section .llvmbc
.incbin "bcsection.bc"
Index: llvm/test/tools/gold/X86/Inputs/bcsection-lib.ll
===================================================================
--- /dev/null
+++ llvm/test/tools/gold/X86/Inputs/bcsection-lib.ll
@@ -0,0 +1,6 @@
+declare void @elf_func()
+
+define i32 @lib_func() {
+ call void @elf_func()
+ ret i32 0
+}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D116995.399097.patch
Type: text/x-patch
Size: 2904 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220111/fa6fcdb7/attachment.bin>
More information about the llvm-commits
mailing list