Closed
Description
I am trying to implement std for the UEFI targets as a part of my GSoC project. I am currently trying to build std using the #![feature(restricted_std)]
. When I try to compile std
along with panic_abort
, I get the following error:
error: linking with `rust-lld` failed: exit status: 1
|
= note: "rust-lld" "-flavor" "link" "/NOLOGO" "/entry:efi_main" "/subsystem:efi_application" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/hello_world-86b7bdb62ca4e356.1wmkhau9wf5mggc4.rcgu.o" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/hello_world-86b7bdb62ca4e356.2dbrudlb642mvcxh.rcgu.o" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/hello_world-86b7bdb62ca4e356.390rrbcz9df7m17.rcgu.o" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/hello_world-86b7bdb62ca4e356.3yl41t6ohz1j19lz.rcgu.o" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/hello_world-86b7bdb62ca4e356.4ndg5iuai60vb1e.rcgu.o" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/hello_world-86b7bdb62ca4e356.4z4woxftcrn577kv.rcgu.o" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/hello_world-86b7bdb62ca4e356.29upyblqtj4qjy9c.rcgu.o" "/LIBPATH:/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps" "/LIBPATH:/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/debug/deps" "/LIBPATH:/var/home/ayush/Documents/Programming/Rust/rust/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/x86_64-unknown-uefi/lib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/libr_efi-9860c65d670ddb26.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/libstd-818bb3edb226311d.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/libpanic_abort-b537655868a6eb10.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/librustc_demangle-fbd85641d8aabb11.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/libstd_detect-fab2f0e1b867d822.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/libhashbrown-25dd1101220abe44.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/librustc_std_workspace_alloc-e0f3f68f61f3a7ec.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/libunwind-67271849d17a208b.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/libcfg_if-6c94eec96134b1f2.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/liblibc-04c66ae9b882fddc.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/liballoc-31f22b8597517001.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/librustc_std_workspace_core-28288f540a1df2c0.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/libcore-a891fd5a4b0f6ffd.rlib" "/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/libcompiler_builtins-e1dc617638fd0a75.rlib" "/NXCOMPAT" "/LIBPATH:/var/home/ayush/Documents/Programming/Rust/rust/build/x86_64-unknown-linux-gnu/stage1/lib/rustlib/x86_64-unknown-uefi/lib" "/OUT:/var/home/ayush/Documents/Programming/Rust/uefi/hello_world/target/x86_64-unknown-uefi/debug/deps/hello_world-86b7bdb62ca4e356.efi" "/OPT:REF,NOICF" "/DEBUG" "/NODEFAULTLIB"
= note: rust-lld: error: undefined symbol: __CxxFrameHandler3
>>> referenced by libstd-818bb3edb226311d.rlib(std-818bb3edb226311d.std.d4a9d80c-cgu.2.rcgu.o):(.xdata)
>>> referenced by libstd-818bb3edb226311d.rlib(std-818bb3edb226311d.std.d4a9d80c-cgu.2.rcgu.o):(.xdata)
This error of course is caused due to the UEFI target having "is-like-msvc": true
in the target.json
.
I know it can be fixed by adding a blank implementation for __CxxFrameHandler3
:
#[no_mangle]
pub extern "C" fn __CxxFrameHandler3() {}
I wanted to ask if this is expected behavior or a bug? I thought setting panic=abort
should mean that I don't need unwinding.
Here is my .cargo/config.toml
:
[unstable]
build-std = ["compiler_builtins", "panic_abort", "std"]
build-std-features = ["compiler-builtins-mem"]
[build]
target = "x86_64-unknown-uefi"
Cargo.toml
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
r-efi = "4.0"
[profile.dev]
panic = "abort"
[profile.release]
panic = "abort"