Open
Description
The following code compiles fine without linker-plugin-lto
, but fails to compile when it is enabled:
#![no_std]
#![no_main]
use core::sync::atomic::{AtomicUsize, Ordering};
static MM_HANDLE_COUNT: AtomicUsize = AtomicUsize::new(0);
#[no_mangle]
pub extern "C" fn _start() -> ! {
let _count = MM_HANDLE_COUNT.fetch_add(1, Ordering::SeqCst);
loop {}
}
use core::panic::PanicInfo;
#[panic_handler]
fn handle_panic(_arg: &PanicInfo) -> ! {
loop {}
}
#[no_mangle]
pub extern "C" fn abort() -> ! {
loop {}
}
This code should compile cleanly with:
$ rustc +nightly main.rs --target riscv64gc-unknown-none-elf
$
However, with the lto plugin, it doesn't compile:
$ rustc +nightly -C linker-plugin-lto main.rs --target riscv64gc-unknown-none-elf error: linking with `rust-lld` failed: exit code: 1
|
= note: "rust-lld" "-flavor" "gnu" "-plugin-opt=O0" "-plugin-opt=mcpu=generic-rv64" "-L" "/home/user/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-none-elf/lib" "main.main.7rcbfp3g-cgu.0.rcgu.o" "main.main.7rcbfp3g-cgu.1.rcgu.o" "main.main.7rcbfp3g-cgu.2.rcgu.o" "-o" "main" "--gc-sections" "-L" "/home/user/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-none-elf/lib" "-Bstatic" "/home/user/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-none-elf/lib/librustc_std_workspace_core-a43e904133f39ebe.rlib" "/home/user/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-none-elf/lib/libcore-de86a0d6e9117873.rlib" "/home/user/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/riscv64gc-unknown-none-elf/lib/libcompiler_builtins-980292810b049237.rlib" "-Bdynamic"
= note: rust-lld: error: undefined symbol: __atomic_fetch_add_8
>>> referenced by main.7rcbfp3g-cgu.2
>>> lto.tmp:(core::sync::atomic::AtomicUsize::fetch_add::h6aa949cc8cd90341)
error: aborting due to previous error
$
Meta
rustc --version --verbose
:
rustc 1.43.0-nightly (4ad624882 2020-03-03)
binary: rustc
commit-hash: 4ad62488258972bdb0e2df225d100f99ef58dbad
commit-date: 2020-03-03
host: x86_64-unknown-linux-gnu
release: 1.43.0-nightly
LLVM version: 9.0
This occurs on both riscv64gc-unknown-none-elf
and riscv32imac-unknown-none-elf
.