Closed
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
Area: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.Area: linking into static, shared libraries and binariesCategory: This is a bug.Call for participation: This issue has a repro, but needs a Minimal Complete and Verifiable ExampleHelping to "clean up" bugs with minimal examples and bisectionsHigh priorityRelevant to the compiler team, which will review and decide on the PR/issue.Performance or correctness regression from one stable version to another.