Skip to content

Build problems in rust-secp256k1 after #780 #852

@apoelstra

Description

@apoelstra

Between cc 1.0.79 and 1.0.80 the "no-std test with ASAN" CI test in rust-secp256k1 stopped working. There was a six-month gap in this release but nothing major or dramatic happened. Bisection tells me that the problem started occurring after the merge of #780.

The error I get is during build, and looks like

   Compiling no_std_test v0.1.0 (/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test)
     Running `/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/rustc --crate-name no_std_test src/main.rs --error-format=json --json=diagnostic-rendered-ansi,artifacts,future-incompat --diagnostic-width=123 --crate-type bin --emit=dep-info,link -C opt-level=3 -C panic=abort -C embed-bitcode=no -C metadata=1293a4e6b7efff78 -C extra-filename=-1293a4e6b7efff78 --out-dir /store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps -L dependency=/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps --extern libc=/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/liblibc-5de6dfcb24ee9f89.rlib --extern secp256k1=/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libsecp256k1-5c90214252d1cafe.rlib --extern serde_cbor=/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libserde_cbor-b92effaf107035cb.rlib -L native=/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/build/secp256k1-sys-cfb84e400e95762c/out`
error: linking with `cc` failed: exit status: 1
  |
  = note: LC_ALL="C" PATH="/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin:/store/home/apoelstra/.cargo/bin:/store/home/apoelstra/bin:/store/home/apoelstra/.idris2/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/store/home/apoelstra/.local/bin:/store/home/apoelstra/.cabal/bin" VSLANG="1033" "cc" "-m64" "/tmp/rustchhL2Pf/symbols.o" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/no_std_test-1293a4e6b7efff78.no_std_test.87cf14f7b6e6638a-cgu.0.rcgu.o" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/no_std_test-1293a4e6b7efff78.no_std_test.87cf14f7b6e6638a-cgu.1.rcgu.o" "-Wl,--as-needed" "-L" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps" "-L" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/build/secp256k1-sys-cfb84e400e95762c/out" "-L" "/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libserde_cbor-b92effaf107035cb.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libhalf-e6655c99ab38f9c5.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libbyteorder-5fc3ce4f7f805d99.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libsecp256k1-5c90214252d1cafe.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/librand-ebdb156e0d3d08a3.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/librand_core-aa5db4de6c0d4a69.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libsecp256k1_sys-a96dfb2f870f90d5.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libserde-084022b6fd934a86.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/liblibc-5de6dfcb24ee9f89.rlib" "/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-cd2f2bc505f56f50.rlib" "/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-ec02dd343723da85.rlib" "/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-00ae71943a8bc9aa.rlib" "-Wl,-Bdynamic" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/no_std_test-1293a4e6b7efff78" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-nodefaultlibs"
  = note: /usr/bin/ld: /usr/lib/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../lib/Scrt1.o: in function `_start':
          (.text+0x21): undefined reference to `__libc_start_main'
          /usr/bin/ld: /store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/no_std_test-1293a4e6b7efff78.no_std_test.87cf14f7b6e6638a-cgu.1.rcgu.o: in function `core::fmt::Write::write_char':
          no_std_test.87cf14f7b6e6638a-cgu.1:(.text._ZN4core3fmt5Write10write_char17h3bde70e0b60d9d00E+0xda): undefined reference to `memcpy'
          <snip>

where the snipped output is a pile of more "cannot find memcpy" type errors from various crates, including libcore. If I compile with 57853c4, the previous commit before this one, and force a linker error by adding an unimplemented function (not sure how else to get the exact cc command), the outputt looks like

  = note: LC_ALL="C" PATH="/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin:/store/home/apoelstra/.cargo/bin:/store/home/apoelstra/bin:/store/home/apoelstra/.idris2/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/store/home/apoelstra/.local/bin:/store/home/apoelstra/.cabal/bin" VSLANG="1033" "cc" "-m64" "/tmp/rustc3zNS0N/symbols.o" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/no_std_test-2f327716e2f5651f.no_std_test.a728628877dda375-cgu.0.rcgu.o" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/no_std_test-2f327716e2f5651f.no_std_test.a728628877dda375-cgu.1.rcgu.o" "-Wl,--as-needed" "-L" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps" "-L" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/build/secp256k1-sys-9dd44ba92659f6c7/out" "-L" "/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libserde_cbor-b92effaf107035cb.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libhalf-e6655c99ab38f9c5.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libbyteorder-5fc3ce4f7f805d99.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libsecp256k1-b0ad93fc3995ce88.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/librand-ebdb156e0d3d08a3.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/librand_core-aa5db4de6c0d4a69.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libsecp256k1_sys-eacd782dd019dfc5.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/libserde-084022b6fd934a86.rlib" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/liblibc-3070fa89807530f5.rlib" "/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-cd2f2bc505f56f50.rlib" "/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-ec02dd343723da85.rlib" "/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-00ae71943a8bc9aa.rlib" "-Wl,-Bdynamic" "-lc" "-lm" "-lrt" "-lpthread" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/store/home/apoelstra/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-o" "/store/home/apoelstra/code/rust-bitcoin/rust-secp256k1/pr-review/no_std_test/target/release/deps/no_std_test-2f327716e2f5651f" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-nodefaultlibs"

If you compare these two invocations you will see that the latter has -lc -lm -lrt -lpthread while the former does not. I guess that -lc is what's causing errors related to memcpy being undefined.

I've read the code in this PR a few times and can't see any way that it would cause these linker flags to get dropped, but empirically that's what appears to be happening.

Originally posted by @apoelstra in #780 (comment)

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