Trouble fuzzing on macos #31111

issue sdaftuar opened this issue on October 18, 2024
  1. sdaftuar commented at 9:33 AM on October 18, 2024: member

    I've got a Apple M2 Max macbook pro, running sequoia 15.0.1. I'm trying to follow the instructions for fuzzing on macos, but I'm running into trouble.

    I reinstalled llvm via brew install, as the instructions indicated:

    $ clang --version
    Homebrew clang version 19.1.2
    Target: arm64-apple-darwin24.0.0
    Thread model: posix
    InstalledDir: /opt/homebrew/Cellar/llvm/19.1.2/bin
    $ clang++ --version
    Homebrew clang version 19.1.2
    Target: arm64-apple-darwin24.0.0
    Thread model: posix
    InstalledDir: /opt/homebrew/Cellar/llvm/19.1.2/bin
    

    I've got our master branch checked out at e8f72aefd20049eac81b150e7f0d33709acd18ed:

    $ git log --oneline -1
    e8f72aefd20 (HEAD -> 2024-10-master, origin/master, origin/HEAD) Merge bitcoin/bitcoin#29877: tracing: explicitly cast block_connected duration to nanoseconds
    

    And when I try to fuzz with the instructed preset, I get this:

    $ cmake --preset=libfuzzer-nosan
    Preset CMake variables:
    
      BUILD_FOR_FUZZING="ON"
      CMAKE_CXX_COMPILER="clang++"
      CMAKE_C_COMPILER="clang"
      SANITIZERS="fuzzer"
    
    -- The CXX compiler identification is Clang 19.1.2
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Check for working CXX compiler: /opt/homebrew/opt/llvm/bin/clang++ - skipped
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Found SQLite3: /Library/Developer/CommandLineTools/SDKs/MacOSX15.0.sdk/usr/include (found suitable version "3.43.2", minimum required is "3.7.17")
    CMake Warning at CMakeLists.txt:227 (message):
      BUILD_FOR_FUZZING=ON will disable all other targets and force
      BUILD_FUZZ_BINARY=ON.
    
    
    -- Performing Test CXX_SUPPORTS__WERROR
    -- Performing Test CXX_SUPPORTS__WERROR - Success
    -- Setting build type to "RelWithDebInfo" as none was specified
    -- Performing Test CXX_SUPPORTS__G3
    -- Performing Test CXX_SUPPORTS__G3 - Success
    -- Performing Test LINKER_SUPPORTS__G3
    -- Performing Test LINKER_SUPPORTS__G3 - Success
    -- Performing Test CXX_SUPPORTS__FTRAPV
    -- Performing Test CXX_SUPPORTS__FTRAPV - Success
    -- Performing Test LINKER_SUPPORTS__FTRAPV
    -- Performing Test LINKER_SUPPORTS__FTRAPV - Success
    -- Performing Test LINKER_SUPPORTS__WL__FATAL_WARNINGS
    -- Performing Test LINKER_SUPPORTS__WL__FATAL_WARNINGS - Success
    -- Performing Test LINKER_SUPPORTS__WL__DEAD_STRIP
    -- Performing Test LINKER_SUPPORTS__WL__DEAD_STRIP - Success
    -- Performing Test LINKER_SUPPORTS__WL__DEAD_STRIP_DYLIBS
    -- Performing Test LINKER_SUPPORTS__WL__DEAD_STRIP_DYLIBS - Success
    -- Performing Test LINKER_SUPPORTS__WL__HEADERPAD_MAX_INSTALL_NAMES
    -- Performing Test LINKER_SUPPORTS__WL__HEADERPAD_MAX_INSTALL_NAMES - Success
    -- Performing Test CMAKE_HAVE_LIBC_PTHREAD
    -- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
    -- Found Threads: TRUE
    -- Performing Test CXX_SUPPORTS__FSANITIZE_FUZZER
    -- Performing Test CXX_SUPPORTS__FSANITIZE_FUZZER - Success
    -- Performing Test LINKER_SUPPORTS__FSANITIZE_FUZZER_a797
    -- Performing Test LINKER_SUPPORTS__FSANITIZE_FUZZER_a797 - Failed
    CMake Error at CMakeLists.txt:377 (message):
      Linker did not accept requested flags, you are missing required libraries.
    
    
    -- Configuring incomplete, errors occurred!
    

    Any suggestions for what I should try next?

  2. sipa commented at 9:37 AM on October 18, 2024: member

    From https://github.com/bitcoin/bitcoin/blob/master/doc/fuzzing.md#macos-hints-for-libfuzzer:

    brew install llvm

    ...

    $ cmake --preset=libfuzzer -DCMAKE_C_COMPILER="$(brew --prefix llvm)/bin/clang" -DCMAKE_CXX_COMPILER="$(brew --prefix llvm)/bin/clang++" -DAPPEND_LDFLAGS=-Wl,-no_warn_duplicate_libraries

  3. sdaftuar commented at 9:31 AM on October 19, 2024: member

    Thanks, I actually had tried that but got some kind of failure as well. Starting over and trying that step now, I see that the first step of setting up the build_fuzz directory succeeds, but when I try to build, I get this linker error:

    $ cmake --build build_fuzz/ -j12
    <snip>
    [ 99%] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/__/__/wallet/test/fuzz/scriptpubkeyman.cpp.o
    [ 99%] Building CXX object src/test/fuzz/CMakeFiles/fuzz.dir/__/__/wallet/test/fuzz/wallet_bdb_parser.cpp.o
    [100%] Linking CXX executable fuzz
    ld: multiple errors: invalid r_symbolnum=1 in '/Users/sdaftuar/projects/bitcoin/2024-10-master/build_fuzz/src/test/fuzz/CMakeFiles/fuzz.dir/addition_overflow.cpp.o'; invalid r_symbolnum=1 in '/Users/sdaftuar/projects/bitcoin/2024-10-master/build_fuzz/src/test/fuzz/CMakeFiles/fuzz.dir/fees.cpp.o'; invalid r_symbolnum=1 in '/Users/sdaftuar/projects/bitcoin/2024-10-master/build_fuzz/src/test/fuzz/CMakeFiles/fuzz.dir/float.cpp.o'; invalid r_symbolnum=1 in '/Users/sdaftuar/projects/bitcoin/2024-10-master/build_fuzz/src/test/fuzz/CMakeFiles/fuzz.dir/multiplication_overflow.cpp.o'; invalid r_symbolnum=1 in '../../libbitcoin_cli.a[2](stdin.cpp.o)'; invalid r_symbolnum=1 in '../../../libcrc32c.a[3](crc32c_portable.cc.o)'; invalid r_symbolnum=1 in '../../../libcrc32c.a[2](crc32c.cc.o)'; invalid r_symbolnum=1 in '../../../libcrc32c_arm64.a[2](crc32c_arm64.cc.o)'; invalid r_symbolnum=18 in '../../crypto/libbitcoin_crypto_arm_shani.a[2](sha256_arm_shani.cpp.o)'; invalid r_symbolnum=1 in '../../crypto/libbitcoin_crypto.a[15](sha3.cpp.o)'; invalid r_symbolnum=1 in '../../../libleveldb.a[37](logging.cc.o)'; invalid r_symbolnum=1 in '../../../libleveldb.a[35](hash.cc.o)'; invalid r_symbolnum=1 in '../../crypto/libbitcoin_crypto.a[10](poly1305.cpp.o)'; invalid r_symbolnum=1 in '../../crypto/libbitcoin_crypto.a[5](hex_base.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_consensus.a[11](script_error.cpp.o)'; invalid r_symbolnum=1 in '../util/libtest_util.a[12](str.cpp.o)'; invalid r_symbolnum=1 in '../../../libleveldb.a[31](crc32c.cc.o)'; invalid r_symbolnum=1 in '../../../libleveldb.a[27](bloom.cc.o)'; invalid r_symbolnum=1 in '../../libbitcoin_consensus.a[5](hash.cpp.o)'; invalid r_symbolnum=5 in '../../util/libbitcoin_util.a[29](randomenv.cpp.o)'; invalid r_symbolnum=1 in '../../util/libbitcoin_util.a[27](logging.cpp.o)'; invalid r_symbolnum=1 in '../util/libtest_util.a[4](index.cpp.o)'; invalid r_symbolnum=1 in '../util/libtest_util.a[3](coins.cpp.o)'; invalid r_symbolnum=1 in '../../../libleveldb.a[8](filename.cc.o)'; invalid r_symbolnum=1 in '../../util/libbitcoin_util.a[24](threadnames.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_common.a[47](parsing.cpp.o)'; invalid r_symbolnum=1 in '../../../libleveldb.a[2](builder.cc.o)'; invalid r_symbolnum=1 in '../../util/libbitcoin_util.a[16](serfloat.cpp.o)'; invalid r_symbolnum=1 in '../../util/libbitcoin_util.a[15](readwritefile.cpp.o)'; invalid r_symbolnum=1 in '../../util/libbitcoin_util.a[14](rbf.cpp.o)'; invalid r_symbolnum=1 in '../../util/libbitcoin_util.a[9](feefrac.cpp.o)'; invalid r_symbolnum=1 in '../../util/libbitcoin_util.a[6](chaintype.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_common.a[42](request.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_common.a[41](rawtransaction_util.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[84](torcontrol.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[79](server_util.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_common.a[30](merkleblock.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_common.a[29](key_io.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_common.a[24](deploymentinfo.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_common.a[21](compressor.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_common.a[20](url.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_common.a[16](run_command.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[68](pow.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[63](fees_args.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[55](psbt.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[54](peerman_args.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[51](miner.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[50](mempool_persist_args.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[43](database_args.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[41](connection_types.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[40](coins_view_args.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[39](coin.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[36](caches.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[34](blockmanager_args.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[31](net_processing.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[28](mempool_removal_reason.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[23](checks.cpp.o)'; invalid r_symbolnum=1 in '../../libbitcoin_node.a[22](chain.cpp.o)'
    clang++: error: linker command failed with exit code 1 (use -v to see invocation)
    make[2]: *** [src/test/fuzz/fuzz] Error 1
    make[1]: *** [src/test/fuzz/CMakeFiles/fuzz.dir/all] Error 2
    make: *** [all] Error 2
    

    However, I am able to successfully build the fuzzer with the libfuzzer-nosan preset.

    Is my llvm installation messed up somehow, in some way that prevents the sanitizers from working? Not sure how to diagnose.

  4. fanquake commented at 10:44 AM on October 19, 2024: member

    I think this is an issue with latest LLVM and Apples ld, see #31049. You could brew install llvm@18 (and sub that in for however you'd got clang/clang++ available), and that will work for now, until we fix the incompatibilty.

  5. sdaftuar commented at 11:21 AM on October 19, 2024: member

    Thanks @fanquake, yeah this looks like a duplicate issue -- closing.

  6. sdaftuar closed this on Oct 19, 2024

  7. bitcoin locked this on Oct 19, 2025

github-metadata-mirror

This is a metadata mirror of the GitHub repository bitcoin/bitcoin. This site is not affiliated with GitHub. Content is generated from a GitHub metadata backup.
generated: 2026-04-14 12:13 UTC

This site is hosted by @0xB10C
More mirrored repositories can be found on mirror.b10c.me