Skip to content

Nightly rustc cannot load LLVM plugins on ARM64 platforms (impacts afl.rs crate) #127573

Open
@vanhauser-thc

Description

@vanhauser-thc

This issue prevents using the effective afl.rs (AFL++) plugins for fuzzing in Rust on ARM64 platforms.

The nightly rustc allows for loading LLVM plugins with -Z llvm-plugins=/path/to/plugin.

This works without problems on Linux x86_x64, however on ARM64 - both Linux and MacOS - this fails with symbols not being resolvable.

How to reproduce:

  • this requires LLVM in the same version that is used in nightly (currently llvm 18):
    Linux: wget http://apt.llvm.org/llvm.sh ; sudo bash ./llvm.sh 18
    Macos: brew install llvm + setting up the PATH to prefer clang/clang++ from brew and not xlang
# Install cargo-afl because this is where we need LLVM plugins from
cargo install cargo-afl
# Compile the AFL++ plugins for cargo-afl - this requires LLVM installed
cargo afl config --plugins --force
# Now get a simple test example
git clone --depth=1 https://github.com/rust-fuzz/afl.rs
# Build any example
cd afl.rs/afl
cargo afl build --example arbitrary

On Linux x86_x64 this works:

    Finished `dev` profile [unoptimized + debuginfo] target(s) in 8.05s

On ARM64 Ubuntu and MacOS this both fails:

error: failed to run LLVM passes: Could not load library '/Users/ssh_debug/.local/share/afl.rs/rustc-1.81.0-nightly-6be96e3/afl.rs-0.15.8/afl-llvm/cmplog-instructions-pass.so': dlopen(/Users/ssh_debug/.local/share/afl.rs/rustc-1.81.0-nightly-6be96e3/afl.rs-0.15.8/afl-llvm/cmplog-instructions-pass.so, 0x0009): symbol not found in flat namespace '__ZN4llvm17PreservedAnalyses14AllAnalysesKeyE'

After a lot of debugging, the reason seems to be that on Linux x86_x64 the following library is present:
libLLVM-18-rust-1.81.0-nightly.so
But on ARM64 rust nightly installation this is missing.
So this might be the reason for this issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-LLVMArea: Code generation parts specific to LLVM. Both correctness bugs and optimization-related issues.C-bugCategory: This is a bug.T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions