-
Notifications
You must be signed in to change notification settings - Fork 13.6k
Closed
Labels
A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-linkageArea: linking into static, shared libraries and binariesArea: linking into static, shared libraries and binariesC-bugCategory: This is a bug.Category: This is a bug.E-needs-mcveCall for participation: This issue has a repro, but needs a Minimal Complete and Verifiable ExampleCall for participation: This issue has a repro, but needs a Minimal Complete and Verifiable ExampleICEBreaker-Cleanup-CrewHelping to "clean up" bugs with minimal examples and bisectionsHelping to "clean up" bugs with minimal examples and bisectionsP-highHigh priorityHigh priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.Performance or correctness regression from one stable version to another.
Description
After upgrading from Rust 1.44.1 to Rust 1.45.0, Firefox's LTO build failed to link a crate build script with undefined reference to '__rust_probestack'
.
The system is Arch Linux, which has binutils 2.34, GCC 10.1.0, LLVM 10.0.0, Clang 10.0.0.
Originally posted at https://bugzilla.mozilla.org/show_bug.cgi?id=1640982#c30:
I can replicate the error with rustup and the rusqlite crate (https://github.com/rusqlite/rusqlite) like this:
rusqlite> CARGO_PROFILE_RELEASE_LTO=true RUSTFLAGS="-Clinker-plugin-lto=LLVMgold.so" cargo +stable build --release
Updating crates.io index
Compiling pkg-config v0.3.18
Compiling libc v0.2.73
Compiling bitflags v1.2.1
Compiling memchr v2.3.3
Compiling linked-hash-map v0.5.3
Compiling fallible-streaming-iterator v0.1.9
Compiling smallvec v1.4.1
Compiling fallible-iterator v0.2.0
Compiling lru-cache v0.1.2
Compiling libsqlite3-sys v0.19.0 (/home/jan/vc/rusqlite/libsqlite3-sys)
Compiling time v0.1.43
error: linking with `cc` failed: exit code: 1
|
= note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-Wl,-plugin=LLVMgold.so" "-Wl,-plugin-opt=O3" "-Wl,-plugin-opt=mcpu=x86-64" "-L" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.0.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.1.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.10.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.11.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.12.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.13.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.14.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.15.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.2.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.3.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.4.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.5.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.6.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.7.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.8.rcgu.o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.build_script_build.7mwl8gcz-cgu.9.rcgu.o" "-o" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a" "/home/jan/vc/rusqlite/target/release/build/libsqlite3-sys-f447ce3cb2731b7a/build_script_build-f447ce3cb2731b7a.497gn0w79xbcp3uz.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-Wl,-O1" "-nodefaultlibs" "-L" "/home/jan/vc/rusqlite/target/release/deps" "-L" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/home/jan/vc/rusqlite/target/release/deps/libpkg_config-800dea52ae78bc9e.rlib" "-Wl,--start-group" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-c147cd9c030850ef.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-7e62a3a07bb85bc1.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-000f77165d4d2d36.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-7dc0cb59ed386ac6.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace-9248bfbd7273ac3d.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-b75363fb938de39d.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-7bbe96f555da4ad6.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-a145493c64eeb044.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-9577436fc6fce6bc.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-b3376c0a2b35415c.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-5708f6b2b59b6e0f.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-e9fd09201d99d6f4.rlib" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-914c6ef6f5cf354a.rlib" "-Wl,--end-group" "/home/jan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-1445b6c7903692a2.rlib" "-Wl,-Bdynamic" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-ldl" "-lutil"
= note: /usr/bin/ld: /tmp/lto-llvm-7519f5.o: in function `std::sys::unix::fs::copy':
/rustc/5c1f21c3b82297671ad3ae1e8c942d2ca92e84f2//src/libstd/sys/unix/fs.rs:1172: undefined reference to `__rust_probestack'
collect2: error: ld returned 1 exit status
error: aborting due to previous error
error: could not compile `libsqlite3-sys`.
To learn more, run the command again with --verbose.
warning: build failed, waiting for other jobs to finish...
error: build failed
This works with 1.44.1:
rusqlite> CARGO_PROFILE_RELEASE_LTO=true RUSTFLAGS="-Clinker-plugin-lto=LLVMgold.so" cargo +1.44.1 build --release
Compiling libc v0.2.73
Compiling pkg-config v0.3.18
Compiling memchr v2.3.3
Compiling bitflags v1.2.1
Compiling linked-hash-map v0.5.3
Compiling smallvec v1.4.1
Compiling fallible-streaming-iterator v0.1.9
Compiling fallible-iterator v0.2.0
Compiling lru-cache v0.1.2
Compiling libsqlite3-sys v0.19.0 (/home/jan/vc/rusqlite/libsqlite3-sys)
Compiling time v0.1.43
Compiling rusqlite v0.23.1 (/home/jan/vc/rusqlite)
Finished release [optimized] target(s) in 3.56s
Using clang -flto
as the linker instead of GCC with explicit LLVMgold.so
behaves analogously:
fails: CARGO_PROFILE_RELEASE_LTO=true CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=clang RUSTFLAGS="-Clinker-plugin-lto -Clink-arg=-flto" cargo +stable build --release
succeeds: CARGO_PROFILE_RELEASE_LTO=true CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=clang RUSTFLAGS="-Clinker-plugin-lto -Clink-arg=-flto" cargo +1.44.1 build --release
Using LLD or gold instead of the BFD linker also makes it work:
CARGO_PROFILE_RELEASE_LTO=true RUSTFLAGS="-Clinker-plugin-lto=LLVMgold.so -Clink-arg=-fuse-ld=gold" cargo +stable build --release
CARGO_PROFILE_RELEASE_LTO=true RUSTFLAGS="-Clinker-plugin-lto=LLVMgold.so -Clink-arg=-fuse-ld=lld" cargo +stable build --release
CARGO_PROFILE_RELEASE_LTO=true CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=clang RUSTFLAGS="-Clinker-plugin-lto -Clink-arg=-flto -Clink-arg=-fuse-ld=gold" cargo +stable build --release
CARGO_PROFILE_RELEASE_LTO=true CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=clang RUSTFLAGS="-Clinker-plugin-lto -Clink-arg=-flto -Clink-arg=-fuse-ld=lld" cargo +stable build --release
Metadata
Metadata
Assignees
Labels
A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.A-linkageArea: linking into static, shared libraries and binariesArea: linking into static, shared libraries and binariesC-bugCategory: This is a bug.Category: This is a bug.E-needs-mcveCall for participation: This issue has a repro, but needs a Minimal Complete and Verifiable ExampleCall for participation: This issue has a repro, but needs a Minimal Complete and Verifiable ExampleICEBreaker-Cleanup-CrewHelping to "clean up" bugs with minimal examples and bisectionsHelping to "clean up" bugs with minimal examples and bisectionsP-highHigh priorityHigh priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.Relevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.Performance or correctness regression from one stable version to another.