diff --git a/.github/workflows/build_and_test.yml b/.github/workflows/build_and_test.yml index 7287fa1421..53389b5e2b 100644 --- a/.github/workflows/build_and_test.yml +++ b/.github/workflows/build_and_test.yml @@ -412,6 +412,38 @@ jobs: shell: bash run: unset RUSTC && ARCH=${{ matrix.arch }} RUN_ON_CI=1 LLVM_CONFIG=llvm-config-${{env.MAIN_LLVM_VERSION}} cargo run --manifest-path ./utils/ci_runner/Cargo.toml -- ${{ matrix.fuzzer }} + utils: + strategy: + matrix: + os: [ubuntu-24.04] + fuzzer: + # Binary only + - ./utils/gdb_qemu + arch: + # unless somebody pays us for the servers. + # - aarch64 + # - arm + # - i386 + # - ppc + - x86_64 + + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v4 + - uses: ./.github/workflows/ubuntu-prepare + - name: Add rustfmt nightly + shell: bash + run: rustup component add --toolchain nightly-x86_64-unknown-linux-gnu rustfmt + - name: Install deps + run: sudo apt-get update && sudo apt-get install -y g++-powerpc-linux-gnu gcc-powerpc-linux-gnu gdb-multiarch + - name: Add rust targets + shell: bash + run: rustup target add --toolchain nightly-x86_64-unknown-linux-gnu powerpc-unknown-linux-gnu + - name: Build and run utils (Linux) + if: runner.os == 'Linux' + shell: bash + run: just -d ${{ matrix.fuzzer }} --justfile ${{ matrix.fuzzer }}/Justfile test + librasan-build: runs-on: ubuntu-24.04 needs: diff --git a/utils/gdb_qemu/Justfile b/utils/gdb_qemu/Justfile index e954e08247..29cea0dac9 100644 --- a/utils/gdb_qemu/Justfile +++ b/utils/gdb_qemu/Justfile @@ -24,7 +24,22 @@ build: format run: demo cargo run -p gdb_qemu --profile {{PROFILE}} -- -p 1234 -L trace qemu-ppc -- -L /usr/powerpc-linux-gnu -g 1234 {{DEMO_DIR}}/gdb_demo -gdb: - gdb-multiarch -ex "set architecture powerpc:MPC8XX" -ex "set pagination off" -ex "set confirm off" -ex "file {{DEMO_DIR}}/gdb_demo" -ex "target remote | {{HOST_DIR}}/gdb_qemu -p 1234 -L trace qemu-ppc -- -L /usr/powerpc-linux-gnu -g 1234 {{DEMO_DIR}}/gdb_demo" +gdb: demo build + gdb-multiarch \ + -ex "set architecture powerpc:MPC8XX" \ + -ex "set pagination off" \ + -ex "set confirm off" \ + -ex "file {{DEMO_DIR}}/gdb_demo" \ + -ex "target remote | {{HOST_DIR}}/gdb_qemu -p 1234 -L trace qemu-ppc -- -L /usr/powerpc-linux-gnu -g 1234 {{DEMO_DIR}}/gdb_demo" + +test: demo build + gdb-multiarch \ + -ex "set architecture powerpc:MPC8XX" \ + -ex "set pagination off" \ + -ex "set confirm off" \ + -ex "file {{DEMO_DIR}}/gdb_demo" \ + -ex "target remote | {{HOST_DIR}}/gdb_qemu -p 1234 -L trace qemu-ppc -- -L /usr/powerpc-linux-gnu -g 1234 {{DEMO_DIR}}/gdb_demo" \ + -ex "c" \ + -ex "q" all: demo build diff --git a/utils/gdb_qemu/gdb_demo/src/args.rs b/utils/gdb_qemu/gdb_demo/src/args.rs index 5576a283b6..cc20750271 100644 --- a/utils/gdb_qemu/gdb_demo/src/args.rs +++ b/utils/gdb_qemu/gdb_demo/src/args.rs @@ -1,6 +1,6 @@ use std::fmt::Write; -use clap::{builder::Str, Parser}; +use clap::{Parser, builder::Str}; #[derive(Default)] pub struct Version; diff --git a/utils/gdb_qemu/gdb_qemu/src/child.rs b/utils/gdb_qemu/gdb_qemu/src/child.rs index cd2a64f492..fa345d424b 100644 --- a/utils/gdb_qemu/gdb_qemu/src/child.rs +++ b/utils/gdb_qemu/gdb_qemu/src/child.rs @@ -3,7 +3,7 @@ use std::{ os::fd::{AsRawFd, RawFd}, }; -use anyhow::{anyhow, Result}; +use anyhow::{Result, anyhow}; use nix::unistd::{dup2, execvp}; use crate::{args::ChildArgs, exit::Exit}; diff --git a/utils/gdb_qemu/gdb_qemu/src/exit.rs b/utils/gdb_qemu/gdb_qemu/src/exit.rs index 6cddc4cefd..7b0eabc9fc 100644 --- a/utils/gdb_qemu/gdb_qemu/src/exit.rs +++ b/utils/gdb_qemu/gdb_qemu/src/exit.rs @@ -1,9 +1,9 @@ -use anyhow::{anyhow, Result}; -use libc::{_exit, prctl, PR_SET_PDEATHSIG}; +use anyhow::{Result, anyhow}; +use libc::{_exit, PR_SET_PDEATHSIG, prctl}; use nix::{ sys::{ - signal::{sigaction, SaFlags, SigAction, SigHandler, SigSet, SIGCHLD, SIGKILL}, - wait::{waitpid, WaitStatus::Exited}, + signal::{SIGCHLD, SIGKILL, SaFlags, SigAction, SigHandler, SigSet, sigaction}, + wait::{WaitStatus::Exited, waitpid}, }, unistd::Pid, }; diff --git a/utils/gdb_qemu/gdb_qemu/src/logger.rs b/utils/gdb_qemu/gdb_qemu/src/logger.rs index 4eb00a50cc..1e50392e27 100644 --- a/utils/gdb_qemu/gdb_qemu/src/logger.rs +++ b/utils/gdb_qemu/gdb_qemu/src/logger.rs @@ -1,6 +1,6 @@ use std::fs::File; -use anyhow::{anyhow, Result}; +use anyhow::{Result, anyhow}; use simplelog::{Config, LevelFilter, WriteLogger}; use crate::args::LogArgs; diff --git a/utils/gdb_qemu/gdb_qemu/src/main.rs b/utils/gdb_qemu/gdb_qemu/src/main.rs index 4c832be553..02e373f48c 100644 --- a/utils/gdb_qemu/gdb_qemu/src/main.rs +++ b/utils/gdb_qemu/gdb_qemu/src/main.rs @@ -11,9 +11,9 @@ extern crate simplelog; use std::os::fd::AsRawFd; -use anyhow::{anyhow, Result}; +use anyhow::{Result, anyhow}; use clap::Parser; -use nix::unistd::{fork, pipe, ForkResult}; +use nix::unistd::{ForkResult, fork, pipe}; use crate::{args::Args, child::Child, exit::Exit, logger::Logger, parent::Parent}; diff --git a/utils/gdb_qemu/gdb_qemu/src/parent.rs b/utils/gdb_qemu/gdb_qemu/src/parent.rs index d7758fbd15..1eed6cef3f 100644 --- a/utils/gdb_qemu/gdb_qemu/src/parent.rs +++ b/utils/gdb_qemu/gdb_qemu/src/parent.rs @@ -7,7 +7,7 @@ use std::{ time::{Duration, SystemTime}, }; -use anyhow::{anyhow, Result}; +use anyhow::{Result, anyhow}; use nix::unistd::read; use crate::{args::ParentArgs, exit::Exit}; diff --git a/utils/libafl_repo_tools/src/main.rs b/utils/libafl_repo_tools/src/main.rs index ddc7f72023..8e1c5b3016 100644 --- a/utils/libafl_repo_tools/src/main.rs +++ b/utils/libafl_repo_tools/src/main.rs @@ -286,7 +286,6 @@ async fn main() -> io::Result<()> { let rust_excluded_directories = RegexSet::new([ r".*target.*", r".*utils/noaslr.*", - r".*utils/gdb_qemu.*", r".*docs/listings/baby_fuzzer/listing-.*", r".*LibAFL/Cargo.toml.*", r".*AFLplusplus.*",