src/lib.rs <

riscv32gc-* targets produce a synthetic object file (symbols.o) with a mismatching floating-point ABI · Issue #104284 · rust-lang/rust (original) (raw)

I tried this code:

cargo new --lib hoge cd hoge

cat >> Cargo.toml <<EOF [lib] crate-type = ["cdylib"] EOF

cat > src/lib.rs <<EOF #![no_std] #[no_mangle] pub extern "C" fn add(left: usize, right: usize) -> usize { left + right }

#[panic_handler] fn panic(_: &core::panic::PanicInfo) -> ! { loop {} } EOF

env RUSTFLAGS='-Cpanic=abort -Clinker=rust-lld' cargo build --target riscv32gc-unknown-linux-gnu -Zbuild-std

I expected to see this happen: Successful compilation (because this would succeed for the target riscv64gc-unknown-linux-gnu)

Instead, this happened:

error: linking with `rust-lld` failed: exit status: 1
  |
  = note: "rust-lld" "-flavor" "gnu" "--version-script=/tmp/rustcDiidlE/list" "/tmp/rustcDiidlE/symbols.o" "/tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/hoge.92rzut19pk7sei6.rcgu.o" "--as-needed" "-L" "/tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps" "-L" "/tmp/hoge/target/debug/deps" "-L" "/home/USER/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/riscv32gc-unknown-linux-gnu/lib" "-Bstatic" "/tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/librustc_std_workspace_core-4ec574d8efc1d5b8.rlib" "/tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib" "/tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcompiler_builtins-c685b409872aa5db.rlib" "-Bdynamic" "--eh-frame-hdr" "-znoexecstack" "-L" "/home/USER/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/riscv32gc-unknown-linux-gnu/lib" "-o" "/tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libhoge.so" "--gc-sections" "-shared" "-zrelro" "-znow"
  = note: rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/hoge.92rzut19pk7sei6.rcgu.o: cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.3.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.10.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.0.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.2.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.15.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.13.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.11.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.14.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.1.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.12.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.4.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.5.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.6.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.7.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcore-572ea5c6b4d30279.rlib(core-572ea5c6b4d30279.core.efcbc3e8-cgu.9.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcompiler_builtins-c685b409872aa5db.rlib(compiler_builtins-c685b409872aa5db.compiler_builtins.53485fab-cgu.11.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcompiler_builtins-c685b409872aa5db.rlib(compiler_builtins-c685b409872aa5db.compiler_builtins.53485fab-cgu.0.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcompiler_builtins-c685b409872aa5db.rlib(compiler_builtins-c685b409872aa5db.compiler_builtins.53485fab-cgu.12.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/libcompiler_builtins-c685b409872aa5db.rlib(compiler_builtins-c685b409872aa5db.compiler_builtins.53485fab-cgu.15.rcgu.o): cannot link object files with different floating-point ABI
          rust-lld: error: too many errors emitted, stopping now (use --error-limit=0 to see all errors)
$ file /tmp/rustcVXpC3S/symbols.o
/tmp/rustcVXpC3S/symbols.o: ELF 32-bit LSB relocatable, UCB RISC-V, soft-float ABI, version 1 (SYSV), not stripped

$ file /tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/hoge.92rzut19pk7sei6.rcgu.o
/tmp/hoge/target/riscv32gc-unknown-linux-gnu/debug/deps/hoge.92rzut19pk7sei6.rcgu.o: ELF 32-bit LSB relocatable, UCB RISC-V, RVC, double-float ABI, version 1 (SYSV), with debug_info, not stripped

Meta

rustc --version --verbose:

rustc 1.66.0-nightly (a6b7274a4 2022-10-10)
binary: rustc
commit-hash: a6b7274a462829f8ef08a1ddcdcec7ac80dbf3e1
commit-date: 2022-10-10
host: x86_64-unknown-linux-gnu
release: 1.66.0-nightly
LLVM version: 15.0.2