Skip to content

riscv32gc-* targets produce a synthetic object file (symbols.o) with a mismatching floating-point ABI #104284

Closed
@yvt

Description

@yvt

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

Metadata

Metadata

Assignees

Labels

A-ABIArea: Concerning the application binary interface (ABI)A-floating-pointArea: Floating point numbers and arithmeticA-linkageArea: linking into static, shared libraries and binariesC-bugCategory: This is a bug.O-riscvTarget: RISC-V architecture

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions