From 7acdeacae8d6ffdcd8e1d63c198682b6d3ec7182 Mon Sep 17 00:00:00 2001 From: s1341 Date: Wed, 15 Nov 2023 13:43:04 +0200 Subject: [PATCH] Allow compiling 32bit (#1666) * Allow compiling for 32bit * Fmt * Clean up minibsod for 32bit * fmt --- libafl_bolts/src/minibsod.rs | 25 +++++++++++++++++++++++-- libafl_cc/build.rs | 2 ++ libafl_cc/src/no-link-rt.c | 4 ++-- libafl_targets/build.rs | 6 +++++- libafl_targets/src/cmplog.c | 2 +- libafl_targets/src/common.h | 2 +- 6 files changed, 34 insertions(+), 7 deletions(-) diff --git a/libafl_bolts/src/minibsod.rs b/libafl_bolts/src/minibsod.rs index 1341305687..61a0329073 100644 --- a/libafl_bolts/src/minibsod.rs +++ b/libafl_bolts/src/minibsod.rs @@ -467,6 +467,23 @@ fn write_crash( Ok(()) } +#[cfg(all(any(target_os = "linux", target_os = "android"), target_arch = "x86"))] +fn write_crash( + writer: &mut BufWriter, + signal: Signal, + ucontext: &ucontext_t, +) -> Result<(), std::io::Error> { + writeln!( + writer, + "Received signal {} at {:#08x}, fault address: {:#08x}", + signal, + ucontext.uc_mcontext.gregs[libc::REG_EIP as usize], + ucontext.uc_mcontext.gregs[libc::REG_ERR as usize] + )?; + + Ok(()) +} + #[cfg(all( any(target_os = "linux", target_os = "android"), target_arch = "aarch64" @@ -896,8 +913,12 @@ pub fn generate_minibsod( writeln!(writer, "{:━^100}", " CRASH ")?; if let Some(uctx) = ucontext { write_crash(writer, signal, uctx)?; - writeln!(writer, "{:━^100}", " REGISTERS ")?; - dump_registers(writer, uctx)?; + + #[cfg(target_pointer_width = "64")] + { + writeln!(writer, "{:━^100}", " REGISTERS ")?; + dump_registers(writer, uctx)?; + } } else { writeln!(writer, "Received signal {signal}")?; } diff --git a/libafl_cc/build.rs b/libafl_cc/build.rs index a5d7cc0e3a..3674f74406 100644 --- a/libafl_cc/build.rs +++ b/libafl_cc/build.rs @@ -159,6 +159,7 @@ fn build_pass( let r = if cfg!(unix) { let r = Command::new(bindir_path.join("clang++")) .arg("-v") + .arg(format!("--target={}", env::var("HOST").unwrap())) .args(cxxflags) .arg(src_dir.join(src_file)) .args(additionals) @@ -171,6 +172,7 @@ fn build_pass( } else if cfg!(windows) { let r = Command::new(bindir_path.join("clang-cl.exe")) .arg("-v") + .arg(format!("--target={}", env::var("HOST").unwrap())) .args(cxxflags) .arg(src_dir.join(src_file)) .args(additionals) diff --git a/libafl_cc/src/no-link-rt.c b/libafl_cc/src/no-link-rt.c index e410405a06..cd12c39247 100644 --- a/libafl_cc/src/no-link-rt.c +++ b/libafl_cc/src/no-link-rt.c @@ -1,6 +1,6 @@ #include -#ifndef _WIN32 +#if !defined(_WIN32) && defined(__SIZEOF_INT128__) typedef unsigned __int128 uint128_t; typedef uint128_t u128; #endif @@ -56,7 +56,7 @@ void __cmplog_ins_hook8(uint64_t arg1, uint64_t arg2) { (void)arg2; } -#ifndef _WIN32 +#if !defined(_WIN32) && defined(__SIZEOF_INT128__) void __cmplog_ins_hook16_extended(uint128_t arg1, uint128_t arg2, uint8_t attr) { (void)attr; diff --git a/libafl_targets/build.rs b/libafl_targets/build.rs index e131a2cb73..8ec21c937a 100644 --- a/libafl_targets/build.rs +++ b/libafl_targets/build.rs @@ -137,7 +137,7 @@ fn main() { println!("cargo:rerun-if-changed=src/common.c"); #[cfg(feature = "sanitizer_interfaces")] - { + if env::var("CARGO_CFG_TARGET_POINTER_WIDTH").unwrap() == "64" { println!("cargo:rerun-if-changed=src/sanitizer_interfaces.h"); let build = bindgen::builder() @@ -151,6 +151,10 @@ fn main() { build .write_to_file(Path::new(&out_dir).join("sanitizer_interfaces.rs")) .expect("Couldn't write the sanitizer headers!"); + } else { + let mut file = File::create(Path::new(&out_dir).join("sanitizer_interfaces.rs")) + .expect("Could not create file"); + write!(file, "").unwrap(); } let mut common = cc::Build::new(); diff --git a/libafl_targets/src/cmplog.c b/libafl_targets/src/cmplog.c index a4146f012b..3eefa30eea 100644 --- a/libafl_targets/src/cmplog.c +++ b/libafl_targets/src/cmplog.c @@ -252,7 +252,7 @@ void __cmplog_ins_hook8(uint64_t arg1, uint64_t arg2) { __libafl_targets_cmplog_instructions(k, 8, arg1, arg2); } -#ifndef _WIN32 +#if !defined(_WIN32) && defined(__SIZEOF_INT128__) void __cmplog_ins_hook16_extended(uint128_t arg1, uint128_t arg2, uint8_t attr) { uintptr_t k = RETADDR; diff --git a/libafl_targets/src/common.h b/libafl_targets/src/common.h index 59be9e7dee..69d1a0c184 100644 --- a/libafl_targets/src/common.h +++ b/libafl_targets/src/common.h @@ -6,7 +6,7 @@ #define true 1 #define false 0 -#ifndef _WIN32 +#if !defined(_WIN32) && defined(__SIZEOF_INT128__) typedef unsigned __int128 uint128_t; typedef uint128_t u128; #endif