Description
After updating the Rust toolchain to nightly-2022-10-08
, attempting to build a kernel using the BIOS version of bootloader
v0.10.13 fails with a number of linker errors similar to the following (for various symbols defined by the bootloader):
rust-lld: error: undefined symbol: _rest_of_bootloader_start_addr
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot-first-stage+0x60)
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot-first-stage+0x6D)
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot-first-stage+0x89)
It seems like the rust-lld
behavior has changed somehow.
It would probably be useful to determine which nightly introduced this regression, in order to pinpoint the change in linker behavior. We could do this using the cargo bisect-rustc
tool, but, unfortunately, that tool doesn't work on my machine, so if someone else has the time to do a bisect run, that could be very helpful. I can offer nightly-2022-07-31
as a known-good nightly (it's the version my kernel is currently pinned to), but I imagine there's almost certainly a newer working nightly...
Steps to reproduce:
:; rustup toolchain install nightly-2022-10-09 \
&& cd examples/basic \
&& cargo +nightly-2022-10-09 kimage
Details
Complete output of cargo kimage
in examples/basic
kernel:
:# eliza at noctis in bootloader/examples/basic on main [$✘?] ⚙️ v1.66.0-nightly
:; cargo +nightly-2022-10-09 kimage
Compiling compiler_builtins v0.1.79
Compiling core v0.0.0 (/home/eliza/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core)
Compiling bootloader v0.10.12 (/home/eliza/Code/bootloader)
Compiling rustc-std-workspace-core v1.99.0 (/home/eliza/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/rustc-std-workspace-core)
Compiling basic_example v0.1.0 (/home/eliza/Code/bootloader/examples/basic)
Finished dev [unoptimized + debuginfo] target(s) in 7.94s
Running `cargo run --package simple_boot -- target/x86_64-custom/debug/basic_example`
Compiling json v0.12.4
Compiling bootloader-locator v0.0.4
Compiling locate-cargo-manifest v0.2.2
Compiling simple_boot v0.1.0 (/home/eliza/Code/bootloader/examples/basic/simple_boot)
Finished dev [unoptimized + debuginfo] target(s) in 0.65s
Running `target/debug/simple_boot target/x86_64-custom/debug/basic_example`
error: linking with `rust-lld` failed: exit status: 1
|
= note: "rust-lld" "-flavor" "gnu" "/run/user/1000/rustcMXO3Et/symbols.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.0.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.1.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.10.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.11.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.12.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.13.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.14.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.15.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.2.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.4.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.5.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.6.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.7.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.8.rcgu.o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.9.rcgu.o" "--as-needed" "-L" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps" "-L" "/home/eliza/Code/bootloader/examples/basic/target/release/deps" "-L" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/build/bootloader-1e7d0531e3e8bfcb/out" "-L" "/home/eliza/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-bootloader/lib" "-Bstatic" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/librsdp-f0994b510951e1cc.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libbootloader-72e232d9fbdb1766.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/liblog-edef54c6f00d1854.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libcfg_if-5d3e665bb59dc616.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libspinning_top-ed2aa1630c31090d.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/liblock_api-e44b8cbd42f4efd0.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libscopeguard-f52e6e2592823134.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libnoto_sans_mono_bitmap-d9ee7d27604ff308.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libconquer_once-9c405c840f71c06b.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libxmas_elf-8c1144fae3f3a670.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libzero-c586f84297d25602.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/librand-400a474582969ba9.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libraw_cpuid-db447fdebf7b5197.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/librand_chacha-04264d589c30f845.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libppv_lite86-37cedba29a39dd97.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/librand_core-fb604127c04776b0.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libx86_64-19c2b6e654c165ce.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libvolatile-d4f8663cc983ac90.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libbitflags-877a0c77899c9e76.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libbit_field-cc8cdf0c0596fe6e.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libusize_conversions-d85a04799a0c7be3.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/librustc_std_workspace_core-b8a2fd09bcb24600.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libcore-47af85afbcb706fe.rlib" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/libcompiler_builtins-1d57e3c7f4a6f9fd.rlib" "-Bdynamic" "--eh-frame-hdr" "-znoexecstack" "-L" "/home/eliza/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-bootloader/lib" "-o" "/home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb" "--gc-sections"
= note: rust-lld: error: undefined symbol: _rest_of_bootloader_start_addr
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot-first-stage+0x60)
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot-first-stage+0x6D)
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot-first-stage+0x89)
rust-lld: error: undefined symbol: _rest_of_bootloader_end_addr
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot-first-stage+0x92)
rust-lld: error: undefined symbol: _kernel_buffer
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot+0x59)
rust-lld: error: undefined symbol: _memory_map
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot+0xCA)
>>> referenced by lib.rs:230 (/home/eliza/.cargo/registry/src/github.com-1ecc6299db9ec823/bit_field-0.10.1/src/lib.rs:230)
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(x86_64::addr::VirtAddr::new::h1cdf102f8e2a4251)
>>> referenced by lib.rs:230 (/home/eliza/.cargo/registry/src/github.com-1ecc6299db9ec823/bit_field-0.10.1/src/lib.rs:230)
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(x86_64::addr::VirtAddr::new::h1cdf102f8e2a4251)
>>> referenced 2 more times
rust-lld: error: undefined symbol: __page_table_start
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot+0x784)
rust-lld: error: undefined symbol: __page_table_end
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot+0x789)
rust-lld: error: undefined symbol: _p3
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot+0x797)
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot+0x7AC)
rust-lld: error: undefined symbol: _p4
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot+0x79F)
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot+0x7D7)
rust-lld: error: undefined symbol: _p2
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot+0x7A4)
>>> referenced by bios.98c44c40-cgu.3
>>> /home/eliza/Code/bootloader/examples/basic/target/x86_64-bootloader/release/deps/bios-f9dd4f582be5a1cb.bios.98c44c40-cgu.3.rcgu.o:(.boot+0x7BD)
error: could not compile `bootloader` due to previous error
thread 'main' panicked at 'assertion failed: cmd.status()?.success()', src/bin/builder.rs:182:9
stack backtrace:
0: rust_begin_unwind
at /rustc/8796e7a9cfd4c5c4f1de15ec1c53994ddf288665/library/std/src/panicking.rs:556:5
1: core::panicking::panic_fmt
at /rustc/8796e7a9cfd4c5c4f1de15ec1c53994ddf288665/library/core/src/panicking.rs:142:14
2: core::panicking::panic
at /rustc/8796e7a9cfd4c5c4f1de15ec1c53994ddf288665/library/core/src/panicking.rs:48:5
3: builder::main
at ./src/bin/builder.rs:182:9
4: core::ops::function::FnOnce::call_once
at /rustc/8796e7a9cfd4c5c4f1de15ec1c53994ddf288665/library/core/src/ops/function.rs:251:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
thread 'main' panicked at 'build failed', simple_boot/src/main.rs:63:9
stack backtrace:
0: std::panicking::begin_panic
at /rustc/8796e7a9cfd4c5c4f1de15ec1c53994ddf288665/library/std/src/panicking.rs:588:12
1: simple_boot::create_disk_images
at ./simple_boot/src/main.rs:63:9
2: simple_boot::main
at ./simple_boot/src/main.rs:24:16
3: core::ops::function::FnOnce::call_once
at /rustc/8796e7a9cfd4c5c4f1de15ec1c53994ddf288665/library/core/src/ops/function.rs:251:5
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
rustc --version
output:
:# eliza at noctis in bootloader/examples/basic on main [$✘?] ⚙️ v1.66.0-nightly
:; rustc --version
rustc 1.66.0-nightly (8796e7a9c 2022-10-08)