Closed
Description
(looks like there's some overlap with #114)
I'm trying to build rust-secp256k1
for a bare-metal RISC-V platform, I've built and installed a compatible toolchain using crosstool-ng and do
CC="${HOME}/x-tools/riscv64-unknown-elf/bin/riscv64-unknown-elf-gcc" cargo build --release
However, I get the following missing symbol errors:
Compiling secp256k1-test v0.1.0 (/home/user/maixgo/k210-sdk-stuff/rust/secp256k1-test)
error: linking with `rust-lld` failed: exit code: 1
|
...
= note: rust-lld: error: undefined symbol: _impure_ptr
>>> referenced by reent.h:814 (/home/user/x-tools/riscv64-unknown-elf/riscv64-unknown-elf/sys-include/sys/reent.h:814)
>>> secp256k1.o:(default_error_callback_fn) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: fprintf
>>> referenced by secp256k1.c
>>> secp256k1.o:(default_error_callback_fn) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: _impure_ptr
>>> referenced by reent.h:814 (/home/user/x-tools/riscv64-unknown-elf/riscv64-unknown-elf/sys-include/sys/reent.h:814)
>>> secp256k1.o:(default_illegal_callback_fn) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: fprintf
>>> referenced by secp256k1.c
>>> secp256k1.o:(default_illegal_callback_fn) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: malloc
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_odd_multiples_table_storage_var.constprop.31) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: malloc
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_odd_multiples_table_storage_var.constprop.31) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: malloc
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_odd_multiples_table_storage_var.constprop.31) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: free
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_odd_multiples_table_storage_var.constprop.31) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: free
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_odd_multiples_table_storage_var.constprop.31) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: free
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_odd_multiples_table_storage_var.constprop.31) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: malloc
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_odd_multiples_table_storage_var.constprop.31) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: malloc
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_odd_multiples_table_storage_var.constprop.31) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: malloc
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_gen_context_build) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: malloc
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_gen_context_build) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: malloc
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_gen_context_build) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: free
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_gen_context_build) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: free
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_ecmult_gen_context_build) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: malloc
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_context_create) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: _impure_ptr
>>> referenced by reent.h:814 (/home/user/x-tools/riscv64-unknown-elf/riscv64-unknown-elf/sys-include/sys/reent.h:814)
>>> secp256k1.o:(secp256k1_context_create) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: undefined symbol: fprintf
>>> referenced by secp256k1.c
>>> secp256k1.o:(secp256k1_context_create) in archive /home/user/maixgo/k210-sdk-stuff/rust/target/riscv64gc-unknown-none-elf/release/deps/libsecp256k1-ad9949776962da29.rlib
rust-lld: error: too many errors emitted, stopping now (use -error-limit=0 to see all errors)
error: aborting due to previous error
error: Could not compile `secp256k1-test`.
To learn more, run the command again with --verbose.
So I guess the malloc/free is due to context allocation/deallocation and will be solved by updating the secp256k1 tree for bitcoin-core/secp256k1#566 bitcoin-core/secp256k1#614 etc.
THe _impure_ptr
is more confusing to me.
Edit: Ok, looks like _impure_ptr
is related, looking at the disassembly it's always used to get to stderr, the first parameter of fprintf
, usually invoked through CHECK
.
Metadata
Metadata
Assignees
Labels
No labels