Closed
Description
This bug occurs when I tried to build the example uefi app in a workspace of mine that enables LTO. I was able to replicate it using a standalone project:
Cargo.toml:
[package]
name = "bootloader-uefi"
version = "0.1.0"
edition = "2021"
[profile.dev]
lto = true
[dependencies]
log = "0.4"
uefi = "0.22"
uefi-services = "0.19"
main.rs:
#![no_std]
#![no_main]
use log::info;
use uefi::prelude::*;
#[entry]
fn main(_image_handle: Handle, mut system_table: SystemTable<Boot>) -> Status {
uefi_services::init(&mut system_table).unwrap();
info!("Hello, firmware!");
system_table.boot_services().stall(10_000_000);
Status::SUCCESS
}
I expected the crate to compile successfully, as it does when LTO is turned off.
Instead, the crate fails to link correctly, with many undefined symbols not only from compiler_builtins but also some from core.
I am forced to use build-std, so it could definitely be related to this issue, but it is slightly different in that even disabling share-generics doesn't help.
The full command that I am running to attempt the build is:
RUST_BACKTRACE=1 RUSTFLAGS="-Zshare-generics=n" cargo build -Zbuild-std=core,compiler_builtins -Zbuild-std-features=compiler-builtins-mem --target x86_64-unknown-uefi
Meta
rustc --version --verbose
:
rustc 1.72.0-nightly (dd5d7c729 2023-06-02)
binary: rustc
commit-hash: dd5d7c729d4e8a59708df64002e09dbcbc4005ba
commit-date: 2023-06-02
host: x86_64-unknown-linux-gnu
release: 1.72.0-nightly
LLVM version: 16.0.4
Compiler output
Compiling bootloader-uefi v0.1.0 (/home/luke/Documents/bootloader-uefi)
error: linking with rust-lld failed: exit status: 1
= note: rust-lld: error: undefined symbol: core::panicking::panic::hb163aad4ddc55c9f
>>> referenced by /home/luke/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.92/src/../libm/src/math/exp.rs:129
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.10.rcgu.o):(compiler_builtins::math::libm::exp::exp::h02a4bfd20070f07c)
>>> referenced by /home/luke/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.92/src/../libm/src/math/exp.rs:129
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.10.rcgu.o):(compiler_builtins::math::libm::exp::exp::h02a4bfd20070f07c)
>>> referenced by /home/luke/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.92/src/../libm/src/math/fmaf.rs:102
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.10.rcgu.o):(compiler_builtins::math::libm::fmaf::fmaf::h64c4fdc39a6a9200)
>>> referenced 581 more times
rust-lld: error: undefined symbol: core::panicking::panic_fmt::hda82d1e6e39651a7
>>> referenced by /home/luke/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/fmt/mod.rs:299
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.2.rcgu.o):(core::fmt::Arguments::new_const::hb12de13e127e57a4)
>>> referenced by /home/luke/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/const_ptr.rs:1567
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.0.rcgu.o):(core::ptr::const_ptr::_$LT$impl$u20$$BP$const$u20$T$GT$::is_aligned_to::h14d9509bf7aaf5c9)
>>> referenced by /home/luke/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/const_ptr.rs:1567
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.0.rcgu.o):(core::ptr::const_ptr::_$LT$impl$u20$$BP$const$u20$T$GT$::is_aligned_to::h22908f059c723326)
>>> referenced 2 more times
rust-lld: error: undefined symbol: core::panicking::panic_nounwind::h0f909d7fd0d3bd3e
>>> referenced by /home/luke/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:1539
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.7.rcgu.o):(core::ptr::read_volatile::h2a19696369700077)
>>> referenced by /home/luke/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:1539
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.7.rcgu.o):(core::ptr::read_volatile::hd1a8b1667212015d)
>>> referenced by /home/luke/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ptr/mod.rs:1175
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.7.rcgu.o):(core::ptr::read::h70c3ace9010db4c7)
>>> referenced 12 more times
rust-lld: error: undefined symbol: core::option::expect_failed::hc5188971195ae32b
>>> referenced by /home/luke/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/option.rs:898
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.12.rcgu.o):(core::option::Option$LT$T$GT$::expect::h63b03588bfa56574)
rust-lld: error: undefined symbol: core::slice::index::slice_index_order_fail::h89839b514f12b875
>>> referenced by /home/luke/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/slice/index.rs:406
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.8.rcgu.o):(_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$::index::h088287bcb6971bb6)
rust-lld: error: undefined symbol: core::slice::index::slice_end_index_len_fail::hc3c969f2bc3a976b
>>> referenced by /home/luke/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/slice/index.rs:408
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.8.rcgu.o):(_$LT$core..ops..range..Range$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$::index::h088287bcb6971bb6)
rust-lld: error: undefined symbol: core::slice::index::slice_end_index_overflow_fail::h7c1f489fb05731b4
>>> referenced by /home/luke/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/slice/index.rs:576
>>> libcompiler_builtins-0152c520d1c8b186.rlib(compiler_builtins-0152c520d1c8b186.compiler_builtins.75569f00fa09706c-cgu.8.rcgu.o):(_$LT$core..ops..range..RangeInclusive$LT$usize$GT$$u20$as$u20$core..slice..index..SliceIndex$LT$$u5b$T$u5d$$GT$$GT$::index::h981b17dba1d622a5)
error: could not compile `bootloader-uefi` (bin "bootloader-uefi") due to previous error