Skip to content

linking fails on Rust nightly-2022-10-08  #271

Closed
@hawkw

Description

@hawkw

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions