Skip to content

Linking fails for AVR: undefined reference to '__gtdf2' / '__gedf2' #139144

Closed
@karip

Description

@karip

I'm trying to build a Rust project for Arduino Mega 2560. The project was generated with avr-hal and is based on mega2560-usart.

Here's a zip package with a complete Rust project: avr-f64-fail.zip

I tried this code with f64 floating point numbers. Linking fails when cargo build is run:

    let mem = &[ 1.0f64, 2.0f64 ];
    let mut total = 0.0f64;
    for val in mem {
        total += val;
    }

I expected to see this happen: the program is linked successfully.
Instead, this happened: a linking error is given:

   Compiling avr-f64-fail v0.1.0 (/home/user.linux/rust/avr-f64-fail)
error: linking with `avr-gcc` failed: exit status: 1
  |
  = note: LC_ALL="C" PATH="/home/user.linux/.rustup/toolchains/nightly-2024-03-22-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/bin:/home/user.linux/.cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/usr/sbin:/sbin:/usr/sbin:/sbin" VSLANG="1033" "avr-gcc" "-mmcu=atmega2560" "-Wl,--as-needed,--print-memory-usage" "/tmp/rustc5qP9bC/symbols.o" "/home/user.linux/rust/avr-f64-fail/target/avr-atmega2560/debug/deps/avr_f64_fail-15b0a58a54a0cc6f.panic_halt-b1c0cfac532dc279.panic_halt.fa57cffaf2a67a43-cgu.0.rcgu.o.rcgu.o" "-Wl,--as-needed" "-L" "/home/user.linux/rust/avr-f64-fail/target/avr-atmega2560/debug/deps" "-L" "/home/user.linux/rust/avr-f64-fail/target/debug/deps" "-L" "/home/user.linux/.rustup/toolchains/nightly-2024-03-22-aarch64-unknown-linux-gnu/lib/rustlib/avr-atmega2560/lib" "-Wl,-Bstatic" "/home/user.linux/rust/avr-f64-fail/target/avr-atmega2560/debug/deps/libcompiler_builtins-89c1a6b65a32f973.rlib" "-Wl,-Bdynamic" "-lgcc" "-Wl,-z,noexecstack" "-L" "/home/user.linux/.rustup/toolchains/nightly-2024-03-22-aarch64-unknown-linux-gnu/lib/rustlib/avr-atmega2560/lib" "-o" "/home/user.linux/rust/avr-f64-fail/target/avr-atmega2560/debug/deps/avr_f64_fail-15b0a58a54a0cc6f.elf" "-Wl,--gc-sections" "-no-pie"
  = note: /home/user.linux/rust/avr-f64-fail/target/avr-atmega2560/debug/deps/avr_f64_fail-15b0a58a54a0cc6f.panic_halt-b1c0cfac532dc279.panic_halt.fa57cffaf2a67a43-cgu.0.rcgu.o.rcgu.o: In function `avr_f64_fail::__avr_device_rt_main':
          /home/user.linux/rust/avr-f64-fail/src/main.rs:22: undefined reference to `__gtdf2'
          /home/user.linux/rust/avr-f64-fail/src/main.rs:22: undefined reference to `__gedf2'
          /home/user.linux/rust/avr-f64-fail/target/avr-atmega2560/debug/deps/libcompiler_builtins-89c1a6b65a32f973.rlib(compiler_builtins-89c1a6b65a32f973.compiler_builtins.59f32f9b712396b1-cgu.0.rcgu.o): In function `<u64 as core::ops::arith::AddAssign>::add_assign':
          /home/user.linux/.rustup/toolchains/nightly-2024-03-22-aarch64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/arith.rs:761: undefined reference to `core::panicking::panic'
          /home/user.linux/.rustup/toolchains/nightly-2024-03-22-aarch64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/arith.rs:761: undefined reference to `core::panicking::panic'
          /home/user.linux/rust/avr-f64-fail/target/avr-atmega2560/debug/deps/libcompiler_builtins-89c1a6b65a32f973.rlib(compiler_builtins-89c1a6b65a32f973.compiler_builtins.59f32f9b712396b1-cgu.0.rcgu.o): In function `<u64 as core::ops::bit::Shl<u32>>::shl':
          /home/user.linux/.rustup/toolchains/nightly-2024-03-22-aarch64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/bit.rs:470: undefined reference to `core::panicking::panic'
          /home/user.linux/rust/avr-f64-fail/target/avr-atmega2560/debug/deps/libcompiler_builtins-89c1a6b65a32f973.rlib(compiler_builtins-89c1a6b65a32f973.compiler_builtins.59f32f9b712396b1-cgu.0.rcgu.o): In function `compiler_builtins::float::add::add':
          /home/user.linux/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/src/float/add.rs:149: undefined reference to `core::panicking::panic'
          /home/user.linux/.cargo/registry/src/index.crates.io-6f17d22bba15001f/compiler_builtins-0.1.108/src/float/add.rs:161: undefined reference to `core::panicking::panic'
          /home/user.linux/rust/avr-f64-fail/target/avr-atmega2560/debug/deps/libcompiler_builtins-89c1a6b65a32f973.rlib(compiler_builtins-89c1a6b65a32f973.compiler_builtins.59f32f9b712396b1-cgu.0.rcgu.o):/home/user.linux/.rustup/toolchains/nightly-2024-03-22-aarch64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/bit.rs:588: more undefined references to `core::panicking::panic' follow
          collect2: error: ld returned 1 exit status
          Memory region         Used Size  Region Size  %age Used
                      text:        6816 B       256 KB      2.60%
                      data:         809 B         8 KB      9.88%
                    eeprom:          0 GB         4 KB      0.00%
                      fuse:          0 GB          3 B      0.00%
                      lock:          0 GB         1 KB      0.00%
                 signature:          0 GB         1 KB      0.00%
           user_signatures:          0 GB         1 KB      0.00%
          
  = note: some `extern` functions couldn't be found; some native libraries may need to be installed or have their path specified
  = note: use the `-l` flag to specify native libraries to link
  = note: use the `cargo:rustc-link-lib` directive to specify the native libraries to link with Cargo (see https://doc.rust-lang.org/cargo/reference/build-scripts.html#rustc-link-lib)

error: could not compile `avr-f64-fail` (bin "avr-f64-fail") due to 1 previous error

Meta

rustc --version --verbose:

rustc 1.79.0-nightly (0ad927c0c 2024-03-21)
binary: rustc
commit-hash: 0ad927c0c07b65fc0dae37105e09c877c87c296a
commit-date: 2024-03-21
host: aarch64-unknown-linux-gnu
release: 1.79.0-nightly
LLVM version: 18.1.2

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-floating-pointArea: Floating point numbers and arithmeticA-linkageArea: linking into static, shared libraries and binariesC-bugCategory: This is a bug.O-AVRTarget: AVR processors (ATtiny, ATmega, etc.)T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions