Symptom
cargo llvm-cov nextest
fails for >= 1.81 in ARM linux machine. The target was 1.81.0-aarch64-unknown-linux-gnu
.
Tested combination:
- rustc 1.81, 1.84
- gcc7, gcc11
Reproduction step
To reproduce this in ARM machine, first build a docker image like this. Make sure the build environment's architecture is ARM.
FROM rust:1.81-slim-bullseye
# Install required system dependencies
RUN apt-get update && apt-get install -y \
gcc \
llvm \
libatomic1 \
cmake \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/*
# Install cargo tools for coverage
RUN cargo install cargo-nextest && \
cargo install cargo-llvm-cov && \
rustup component add llvm-tools-preview
# Set the working directory
WORKDIR /usr/src/app
# Copy your project files
COPY . .
# Build dependencies first (for better caching)
RUN cargo build
# Command to run tests with coverage
CMD ["cargo", "llvm-cov", "nextest"]
And then run the image got me the result:
info: cargo-llvm-cov currently setting cfg(coverage); you can opt-out it by passing --no-cfg-coverage
Compiling hello v0.1.0 (/usr/src/app)
error: linking with `cc` failed: exit status: 1
|
= note: LC_ALL="C" PATH="/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/bin:/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/bin:/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/bin:/usr/local/cargo/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" VSLANG="1033" "cc" "/tmp/rustc4tadMs/symbols.o" "/usr/src/app/target/llvm-cov-target/debug/deps/hello-c3c67af63ba1e4f1.0e1el4bi6mmz0iyooefd4emc4.rcgu.o" "/usr/src/app/target/llvm-cov-target/debug/deps/hello-c3c67af63ba1e4f1.11tx6pq7ee5bhnyg2uc94ffdz.rcgu.o" "/usr/src/app/target/llvm-cov-target/debug/deps/hello-c3c67af63ba1e4f1.1g2exgao1rxojyyzze6p5aqb9.rcgu.o" "/usr/src/app/target/llvm-cov-target/debug/deps/hello-c3c67af63ba1e4f1.2mgllxdqh0pk4ssbvf5tqf9k3.rcgu.o" "/usr/src/app/target/llvm-cov-target/debug/deps/hello-c3c67af63ba1e4f1.5nxrzycwue8vmtdjfhfouh0ml.rcgu.o" "/usr/src/app/target/llvm-cov-target/debug/deps/hello-c3c67af63ba1e4f1.8k375aamps8k4enxws5mel97m.rcgu.o" "-Wl,--as-needed" "-L" "/usr/src/app/target/llvm-cov-target/debug/deps" "-L" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libprofiler_builtins-f2d8e9c35f85cdf0.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libtest-1955698392f0439a.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libgetopts-60e558559cea038a.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libunicode_width-10ecd85e0abc6461.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/librustc_std_workspace_std-2fe35ba938020354.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libstd-2bf0b2a5e0a60917.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libpanic_unwind-0af01d78b15f6872.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libobject-aa90d1efd19541cb.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libmemchr-6645a3a6124c47a1.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libaddr2line-3de13e717f4d9e74.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libgimli-f50e3ac5e8bc32ca.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/librustc_demangle-f84a4f82a7a57e94.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libstd_detect-bd992eebc2a12fc4.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libhashbrown-c9882005b74b1193.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-b18e8234ebc582c8.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libminiz_oxide-79ef105ee0e8243e.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libadler-652182712f7d3bc4.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libunwind-6cb747324af00512.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libcfg_if-740a433abf104d06.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/liblibc-1e2f311c277b60cf.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/liballoc-85299feea58ac1e7.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/librustc_std_workspace_core-2a73a86214747017.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libcore-29cdff63f523de0d.rlib" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libcompiler_builtins-405c9891256dbf91.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib" "-o" "/usr/src/app/target/llvm-cov-target/debug/deps/hello-c3c67af63ba1e4f1" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-nodefaultlibs" "-u" "__llvm_profile_runtime"
= note: /usr/bin/ld: /usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libprofiler_builtins-f2d8e9c35f85cdf0.rlib(22694fbe9949e10a-InstrProfilingValue.o): in function `allocateValueProfileCounters':
/checkout/library/profiler_builtins/../../src/llvm-project/compiler-rt/lib/profile/InstrProfilingValue.c:116: undefined reference to `__aarch64_cas8_sync'
/usr/bin/ld: /usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libprofiler_builtins-f2d8e9c35f85cdf0.rlib(22694fbe9949e10a-InstrProfilingValue.o): in function `allocateOneNode':
/checkout/library/profiler_builtins/../../src/llvm-project/compiler-rt/lib/profile/InstrProfilingValue.c:140: undefined reference to `__aarch64_ldadd8_sync'
/usr/bin/ld: /usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu/lib/libprofiler_builtins-f2d8e9c35f85cdf0.rlib(22694fbe9949e10a-InstrProfilingValue.o): in function `instrumentTargetValueImpl':
/checkout/library/profiler_builtins/../../src/llvm-project/compiler-rt/lib/profile/InstrProfilingValue.c:233: undefined reference to `__aarch64_cas8_sync'
/usr/bin/ld: /checkout/library/profiler_builtins/../../src/llvm-project/compiler-rt/lib/profile/InstrProfilingValue.c:231: undefined reference to `__aarch64_cas8_sync'
collect2: error: ld returned 1 exit status
= 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 `hello` (bin "hello" test) due to 1 previous error
error: command `/usr/local/rustup/toolchains/1.81.0-aarch64-unknown-linux-gnu/bin/cargo test --no-run --message-format json-render-diagnostics --target-dir /usr/src/app/target/llvm-cov-target` exited with code 101
Question
Looks like thIs is a ARM linux specific problem as in my M3 Macbook everything works. Could you please confirm this is coming from llvm-tools
?