Closed gmoulk closed 6 months ago
@gmoulk we solved this in nixpkgs https://github.com/NixOS/nixpkgs/pull/275084 by adding "-latomic"
More info: https://github.com/unicorn-engine/unicorn/issues/1840#issuecomment-1859256464
@gmoulk Can you share, how did you compile it, command? Looks like it should work on "2.0.1" tag.
I just followed the instructions for compilation https://github.com/unicorn-engine/unicorn/blob/master/docs/COMPILE.md on the GitHub page of unicorn
mkdir build; cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
But i managed to compile it by excluding the architectures I didn't want to use.
@gmoulk try with -DCMAKE_BUILD_TYPE=Debug
looks like -DCMAKE_BUILD_TYPE=Release
is broken, and only Debug
works
I confirmed that the observation from @patryk4815 is correct and the release build is broken on RISCV64. Investigating the correct place to add -latomic
.
Pushed a fix to dev and confirmed that it now builds, closing.
@wtdcode tested commit: f389666ea6eb653f040094ef9c7ee05479e23671
unicorn-riscv64-unknown-linux-gnu> FAILED: sample_x86
unicorn-riscv64-unknown-linux-gnu> : && /nix/store/qgc74hfp0kinrr7cpkz30w109qq7raij-riscv64-unknown-linux-gnu-gcc-wrapper-12.3.0/bin/riscv64-unknown-linux-gnu-gcc -O3 -DNDEBUG -rdynamic CMak
eFiles/sample_x86.dir/samples/sample_x86.c.o -o sample_x86 -Wl,-rpath,/build/source/build libunicorn.so.2 -lpthread -lm && :
unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_ldo_le_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_ldo_be_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_cmpxchgo_le_mmu_aarch64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_cmpxchgo_be_mmu_aarch64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_sto_be_mmu_s390x' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_ldo_be_mmu_s390x' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_cmpxchgo_be_mmu_s390x' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_cmpxchgo_be_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_sto_be_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_cmpxchgo_le_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference
to `helper_atomic_sto_le_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> collect2: error: ld returned 1 exit status
unicorn-riscv64-unknown-linux-gnu> [637/663] Linking C executable sample_mips unicorn-riscv64-unknown-linux-gnu> FAILED: sample_mips
Build Fail
Oh wait, I'm too eager, it just fails a bit later.
@patryk4815 Looks like -latomic
fixes for cross-compilation cases but not natively building.
@wtdcode tested commit:
f389666ea6eb653f040094ef9c7ee05479e23671
unicorn-riscv64-unknown-linux-gnu> FAILED: sample_x86 unicorn-riscv64-unknown-linux-gnu> : && /nix/store/qgc74hfp0kinrr7cpkz30w109qq7raij-riscv64-unknown-linux-gnu-gcc-wrapper-12.3.0/bin/riscv64-unknown-linux-gnu-gcc -O3 -DNDEBUG -rdynamic CMak eFiles/sample_x86.dir/samples/sample_x86.c.o -o sample_x86 -Wl,-rpath,/build/source/build libunicorn.so.2 -lpthread -lm && : unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_ldo_le_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_ldo_be_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_le_mmu_aarch64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_be_mmu_aarch64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_sto_be_mmu_s390x' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_ldo_be_mmu_s390x' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_be_mmu_s390x' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_be_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_sto_be_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_le_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld: libunicorn.so.2: undefined reference to `helper_atomic_sto_le_mmu_ppc64' unicorn-riscv64-unknown-linux-gnu> collect2: error: ld returned 1 exit status unicorn-riscv64-unknown-linux-gnu> [637/663] Linking C executable sample_mips unicorn-riscv64-unknown-linux-gnu> FAILED: sample_mips
Build Fail
Yes, I just want to hint you about this.
@wtdcode btw my build/failed messages was for cross compilation
That's weird, maybe -latomic
should be added to linker instead of compiler? I can't see the actual difference but I will have a try.
I got it. The flag was lacking when building executables.
This shall work now, waiting for my building locally.
Will fix it later, and it should also be reflected in pkg-config
installed on these systems.
debian@debian-bullseye-riscv64:~/unicorn/build_release$ /usr/bin/cc -O3 -DNDEBUG -rdynamic CMakeFiles/test_arm.dir/tests/unit/test_arm.c.o -o test_arm -Wl,-rpath,/home/debian/unicorn/build_release libunicorn.so.2 -latomic -lpthread -Wl,-latomic
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_ldo_le_mmu_ppc64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_ldo_be_mmu_ppc64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_le_mmu_aarch64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_be_mmu_aarch64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_sto_be_mmu_s390x'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_ldo_be_mmu_s390x'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_be_mmu_s390x'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_be_mmu_ppc64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_sto_be_mmu_ppc64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_le_mmu_ppc64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_sto_le_mmu_ppc64'
collect2: error: ld returned 1 exit status
debian@debian-bullseye-riscv64:~/unicorn/build_release$ /usr/bin/cc -O3 -DNDEBUG -rdynamic CMakeFiles/test_arm.dir/tests/unit/test_arm.c.o -o test_arm -Wl,-rpath,/home/debian/unicorn/build_release libunicorn.so.2 -latomic -lpthread -latomic
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_ldo_le_mmu_ppc64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_ldo_be_mmu_ppc64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_le_mmu_aarch64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_be_mmu_aarch64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_sto_be_mmu_s390x'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_ldo_be_mmu_s390x'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_be_mmu_s390x'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_be_mmu_ppc64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_sto_be_mmu_ppc64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_cmpxchgo_le_mmu_ppc64'
/usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_sto_le_mmu_ppc64'
collect2: error: ld returned 1 exit status
@patryk4815 even adding -latomic
doesn't solve the problem, I suspect it's a bug indeed and needs further investigation. How does cross-compilation works with nix? Could you give the command line it uses to build test_*
?
@wtdcode maybe this help, i will try provide better log if needed.
[658/663] Linking C executable test_ppc
HARDENING: disabled flags: pie fortify
HARDENING: Is active (not completely disabled with "all" flag)
HARDENING: enabling pic
HARDENING: enabling fortify3
HARDENING: enabling format
HARDENING: enabling stackprotector
HARDENING: enabling strictoverflow
extra flags before to /nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/bin/riscv64-unknown-linux-gnu-gcc:
-fPIC
-O2
-U_FORTIFY_SOURCE
-Wformat
-Wformat-security
-Werror=format-security
-fstack-protector-strong
--param
ssp-buffer-size=4
-fno-strict-overflow
-Wl\,-dynamic-linker=/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib/ld-linux-riscv64-lp64d.so.1
original flags to /nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/bin/riscv64-unknown-linux-gnu-gcc:
-O3
-DNDEBUG
-rdynamic
CMakeFiles/test_ppc.dir/tests/unit/test_ppc.c.o
-o
test_ppc
-Wl\,-rpath\,/build/source/build
libunicorn.so.2
-lpthread
-lm
extra flags after to /nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/bin/riscv64-unknown-linux-gnu-gcc:
-U_FORTIFY_SOURCE
-D_FORTIFY_SOURCE=3
-B/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib/
-idirafter
/nix/store/i95iiihnkvwa4dn5wyxngnhfgxwb7r0p-glibc-riscv64-unknown-linux-gnu-2.38-27-dev/include
-idirafter
/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/lib/gcc/riscv64-unknown-linux-gnu/12.3.0/include-fixed
-B/nix/store/daiz8w8508591g1jl8jpdk9zjynm7b8c-riscv64-unknown-linux-gnu-gcc-12.3.0-lib/riscv64-unknown-linux-gnu/lib
-B/nix/store/qgc74hfp0kinrr7cpkz30w109qq7raij-riscv64-unknown-linux-gnu-gcc-wrapper-12.3.0/bin/
-frandom-seed=s6d9jlbs16
-Wl\,-rpath
-Wl\,/nix/store/s6d9jlbs16dyq1nm4cxin0figip41yms-unicorn-riscv64-unknown-linux-gnu-2.0.1.post1-dev2/lib
-Wl\,-latomic
-L/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib
-L/nix/store/daiz8w8508591g1jl8jpdk9zjynm7b8c-riscv64-unknown-linux-gnu-gcc-12.3.0-lib/riscv64-unknown-linux-gnu/lib
skipping impure path /lib/ld-linux-riscv64-lp64d.so.1
HARDENING: disabled flags: pie
HARDENING: Is active (not completely disabled with "all" flag)
HARDENING: enabling relro
HARDENING: enabling bindnow
extra flags before to /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld:
-z
relro
-z
now
original flags to /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld:
-plugin
/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/libexec/gcc/riscv64-unknown-linux-gnu/12.3.0/liblto_plugin.so
-plugin-opt=/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/libexec/gcc/riscv64-unknown-linux-gnu/12.3.0/lto-wrapper
-plugin-opt=-fresolution=/build/ccsEkHE8.res
-plugin-opt=-pass-through=-lgcc
-plugin-opt=-pass-through=-lgcc_s
-plugin-opt=-pass-through=-lc
-plugin-opt=-pass-through=-lgcc
-plugin-opt=-pass-through=-lgcc_s
--eh-frame-hdr
-melf64lriscv
-export-dynamic
-o
test_ppc
/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib/crt1.o
/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib/crti.o
/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/lib/gcc/riscv64-unknown-linux-gnu/12.3.0/crtbegin.o
-L/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib
-L/nix/store/daiz8w8508591g1jl8jpdk9zjynm7b8c-riscv64-unknown-linux-gnu-gcc-12.3.0-lib/riscv64-unknown-linux-gnu/lib
-L/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib
-L/nix/store/daiz8w8508591g1jl8jpdk9zjynm7b8c-riscv64-unknown-linux-gnu-gcc-12.3.0-lib/riscv64-unknown-linux-gnu/lib
-L/nix/store/qgc74hfp0kinrr7cpkz30w109qq7raij-riscv64-unknown-linux-gnu-gcc-wrapper-12.3.0/bin
-L/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/lib/gcc/riscv64-unknown-linux-gnu/12.3.0
-L/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/lib/gcc/riscv64-unknown-linux-gnu/12.3.0/../../../../riscv64-unknown-linux-gnu/lib
-dynamic-linker=/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib/ld-linux-riscv64-lp64d.so.1
CMakeFiles/test_ppc.dir/tests/unit/test_ppc.c.o
-rpath
/build/source/build
libunicorn.so.2
-lpthread
-lm
-rpath
/nix/store/s6d9jlbs16dyq1nm4cxin0figip41yms-unicorn-riscv64-unknown-linux-gnu-2.0.1.post1-dev2/lib
-latomic
-lgcc
--push-state
--as-needed
-lgcc_s
--pop-state
-lc
-lgcc
--push-state
--as-needed
-lgcc_s
--pop-state
/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/lib/gcc/riscv64-unknown-linux-gnu/12.3.0/crtend.o
/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib/crtn.o
extra flags after to /nix/store/p5fb9bhsm2mxvw04cr31cx8imihn851f-riscv64-unknown-linux-gnu-binutils-2.40/bin/riscv64-unknown-linux-gnu-ld:
-rpath
/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib
-rpath
/nix/store/daiz8w8508591g1jl8jpdk9zjynm7b8c-riscv64-unknown-linux-gnu-gcc-12.3.0-lib/riscv64-unknown-linux-gnu/lib
[pid 112884] execve("/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/bin/riscv64-unknown-linux-gnu-gcc", ["/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/bin/riscv64-unknown-linux-gnu-gcc", "-fPIC", "-O2", "-U_FORTIFY_SOURCE", "-Wformat", "-Wformat-security", "-Werror=format-security", "-fstack-protector-strong", "--param", "ssp-buffer-size=4", "-fno-strict-overflow", "-Wl,-dynamic-linker=/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib/ld-linux-riscv64-lp64d.so.1", "-O3", "-DNDEBUG", "-rdynamic", "CMakeFiles/test_mem.dir/tests/unit/test_mem.c.o", "-o", "test_mem", "-Wl,-rpath,/build/source/build", "libunicorn.so.2", "-lpthread", "-lm", "-U_FORTIFY_SOURCE", "-D_FORTIFY_SOURCE=3", "-B/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib/", "-idirafter", "/nix/store/i95iiihnkvwa4dn5wyxngnhfgxwb7r0p-glibc-riscv64-unknown-linux-gnu-2.38-27-dev/include", "-idirafter", "/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/lib/gcc/riscv64-unknown-linux-gnu/12.3.0/include-fixed", "-B/nix/store/daiz8w8508591g1jl8jpdk9zjynm7b8c-riscv64-unknown-linux-gnu-gcc-12.3.0-lib/riscv64-unknown-linux-gnu/lib", "-B/nix/store/qgc74hfp0kinrr7cpkz30w109qq7raij-riscv64-unknown-linux-gnu-gcc-wrapper-12.3.0/bin/", "-frandom-seed=87zhzncfy4", "-Wl,-rpath", "-Wl,/nix/store/87zhzncfy4k3lxqf2z33k97sdcnv04y4-unicorn-riscv64-unknown-linux-gnu-2.0.1.post1-dev2/lib", "-Wl,-latomic", "-L/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib", "-L/nix/store/daiz8w8508591g1jl8jpdk9zjynm7b8c-riscv64-unknown-linux-gnu-gcc-12.3.0-lib/riscv64-unknown-linux-gnu/lib"], 0x4f4320 /* 99 vars */) = 0
there is "-Wl,-latomic"
[pid 112884] execve("/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/bin/riscv64-unknown-linux-gnu-gcc", ["/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/bin/riscv64-unknown-linux-gnu-gcc", "-fPIC", "-O2", "-U_FORTIFY_SOURCE", "-Wformat", "-Wformat-security", "-Werror=format-security", "-fstack-protector-strong", "--param", "ssp-buffer-size=4", "-fno-strict-overflow", "-Wl,-dynamic-linker=/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib/ld-linux-riscv64-lp64d.so.1", "-O3", "-DNDEBUG", "-rdynamic", "CMakeFiles/test_mem.dir/tests/unit/test_mem.c.o", "-o", "test_mem", "-Wl,-rpath,/build/source/build", "libunicorn.so.2", "-lpthread", "-lm", "-U_FORTIFY_SOURCE", "-D_FORTIFY_SOURCE=3", "-B/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib/", "-idirafter", "/nix/store/i95iiihnkvwa4dn5wyxngnhfgxwb7r0p-glibc-riscv64-unknown-linux-gnu-2.38-27-dev/include", "-idirafter", "/nix/store/mxm0c62lhwvxy04pafciwx9f07hqgp91-riscv64-unknown-linux-gnu-gcc-12.3.0/lib/gcc/riscv64-unknown-linux-gnu/12.3.0/include-fixed", "-B/nix/store/daiz8w8508591g1jl8jpdk9zjynm7b8c-riscv64-unknown-linux-gnu-gcc-12.3.0-lib/riscv64-unknown-linux-gnu/lib", "-B/nix/store/qgc74hfp0kinrr7cpkz30w109qq7raij-riscv64-unknown-linux-gnu-gcc-wrapper-12.3.0/bin/", "-frandom-seed=87zhzncfy4", "-Wl,-rpath", "-Wl,/nix/store/87zhzncfy4k3lxqf2z33k97sdcnv04y4-unicorn-riscv64-unknown-linux-gnu-2.0.1.post1-dev2/lib", "-Wl,-latomic", "-L/nix/store/8az088dyh7w7kmacnw3r34i6gwnc1pb5-glibc-riscv64-unknown-linux-gnu-2.38-27/lib", "-L/nix/store/daiz8w8508591g1jl8jpdk9zjynm7b8c-riscv64-unknown-linux-gnu-gcc-12.3.0-lib/riscv64-unknown-linux-gnu/lib"], 0x4f4320 /* 99 vars */) = 0
there is
"-Wl,-latomic"
Mine is gcc (Debian 13.2.0-9) 13.2.0
btw. Not sure if this makes a difference.
@patryk4815 Could you confirm if current version works for your cross-compilation workflow? I should add -latomic
to appropriate locations, though I'm still experiencing building failure.
btw, could you give the output of objdump --syms libunicorn.so.2 | grep helper_atomic_ldo_le_mmu_ppc64
?
@wtdcode tested on e5fa037aebd9c74355200aec8a0cc77f2a15675e
.
Build fails.
objdump --syms
:
0000000000000000 *UND* 0000000000000000 helper_atomic_ldo_le_mmu_ppc64
Btw. why CMAKE_BUILD_TYPE=Debug
works fine?
@wtdcode tested on
e5fa037aebd9c74355200aec8a0cc77f2a15675e
. Build fails.
objdump --syms
:0000000000000000 *UND* 0000000000000000 helper_atomic_ldo_le_mmu_ppc64
What does objdump
give with the successful builds containing your fix?
@wtdcode I misunderstood
e5fa037aebd9c74355200aec8a0cc77f2a15675e
without my fix:
0000000000000000 *UND* 0000000000000000 helper_atomic_ldo_le_mmu_ppc64
Debug:
$ objdump --syms ./libunicorn.so.2 | grep 'helper_atomic_ldo_le_mmu_ppc64'
(empty/nothing)
Release with my fix with -latomic
$ objdump --syms ./libunicorn.so.2 | grep 'helper_atomic_ldo_le_mmu_ppc64'
0000000000b9edb4 g F .text 0000000000000016 helper_atomic_ldo_le_mmu_ppc64
That's the point, so the symbol is not correctly linked. I have to check it in detail.
Confirm fixed now. I forget to tell configure
the correct flag.
debian@debian-bullseye-riscv64:~/unicorn/build_release$ ./test_mem
Test test_map_correct... [ OK ]
Test test_map_wrapping... [ OK ]
Test test_mem_protect... [ OK ]
Test test_splitting_mem_unmap... [ OK ]
Test test_splitting_mmio_unmap... [ OK ]
Test test_mem_protect_map_ptr... [ OK ]
Test test_map_at_the_end... [ OK ]
Test test_map_wrap... [ OK ]
Test test_map_big_memory... [ OK ]
Test test_mem_protect_remove_exec... [ OK ]
Test test_mem_protect_mmio... [ OK ]
Test test_snapshot... [ OK ]
Test test_snapshot_with_vtlb... [ OK ]
Test test_context_snapshot... [ OK ]
Test test_snapshot_unmap... [ OK ]
SUCCESS: All unit tests have passed.
debian@debian-bullseye-riscv64:~/unicorn/build_release$ cat CMakeCache.txt | grep CMAKE_BUILD_TYPE
CMAKE_BUILD_TYPE:STRING=Release
debian@debian-bullseye-riscv64:~/unicorn/build_release$ uname -a
Linux debian-bullseye-riscv64 6.6.8-riscv64 #1 SMP Debian 6.6.8-1 (2023-12-22) riscv64 GNU/Linux
debian@debian-bullseye-riscv64:~/unicorn/build_release$
@patryk4815 @gmoulk Could you check if this works? If so we can close the issue.
@wtdcode 04064072137649baa8c7d0de140509456b74b8fb
success for riscv ;)
riscv64 success:
$ objdump --syms ./libunicorn.so.2 | grep 'helper_atomic_ldo_le_mmu_ppc64'
0000000000b9edb4 g F .text 0000000000000016 helper_atomic_ldo_le_mmu_ppc64
armv7l (arm32) fail:
$ objdump --syms ./libunicorn.so.2 | grep helper_atomic_ldo_le_mmu_ppc64
00000000 *UND* 00000000 helper_atomic_ldo_le_mmu_ppc64
^ maybe we need disable at all atomic there? (-latomic for arm32 not working, maybe there is something other)
Closing as I tested it indeed works.
During compilation on RISC-V CPU running on QEMU system emulation I get the following compilation error while building from sources root@debian:~/unicorn/build# make [ 5%] Built target unicorn-common [ 12%] Built target x86_64-softmmu [ 17%] Built target arm-softmmu [ 23%] Built target aarch64-softmmu [ 28%] Built target m68k-softmmu [ 33%] Built target mips-softmmu [ 38%] Built target mipsel-softmmu [ 43%] Built target mips64-softmmu [ 48%] Built target mips64el-softmmu [ 53%] Built target sparc-softmmu [ 58%] Built target sparc64-softmmu [ 65%] Built target ppc-softmmu [ 72%] Built target ppc64-softmmu [ 76%] Built target riscv32-softmmu [ 81%] Built target riscv64-softmmu [ 87%] Built target s390x-softmmu [ 92%] Built target tricore-softmmu [ 92%] Built target unicorn [ 92%] Built target unicorn_static [ 92%] Built target bundling_target [ 92%] Linking C executable sample_x86 /usr/bin/ld: libunicorn.so.2: undefined reference to
helper_atomic_ldo_le_mmu_ppc64' /usr/bin/ld: libunicorn.so.2: undefined reference to
helper_atomic_ldo_be_mmu_ppc64' /usr/bin/ld: libunicorn.so.2: undefined reference tohelper_atomic_cmpxchgo_le_mmu_aarch64' /usr/bin/ld: libunicorn.so.2: undefined reference to
helper_atomic_cmpxchgo_be_mmu_aarch64' /usr/bin/ld: libunicorn.so.2: undefined reference tohelper_atomic_sto_be_mmu_s390x' /usr/bin/ld: libunicorn.so.2: undefined reference to
helper_atomic_ldo_be_mmu_s390x' /usr/bin/ld: libunicorn.so.2: undefined reference tohelper_atomic_cmpxchgo_be_mmu_s390x' /usr/bin/ld: libunicorn.so.2: undefined reference to
helper_atomic_cmpxchgo_be_mmu_ppc64' /usr/bin/ld: libunicorn.so.2: undefined reference tohelper_atomic_sto_be_mmu_ppc64' /usr/bin/ld: libunicorn.so.2: undefined reference to
helper_atomic_cmpxchgo_le_mmu_ppc64' /usr/bin/ld: libunicorn.so.2: undefined reference to `helper_atomic_sto_le_mmu_ppc64' collect2: error: ld returned 1 exit status make[2]: [CMakeFiles/sample_x86.dir/build.make:98: sample_x86] Error 1 make[1]: [CMakeFiles/Makefile2:727: CMakeFiles/sample_x86.dir/all] Error 2 make: *** [Makefile:146: all] Error 2