Allow compiling 32bit (#1666)

* Allow compiling for 32bit

* Fmt

* Clean up minibsod for 32bit

* fmt
This commit is contained in:
s1341 2023-11-15 13:43:04 +02:00 committed by GitHub
parent 8c62d339a2
commit 7acdeacae8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 34 additions and 7 deletions

View File

@ -467,6 +467,23 @@ fn write_crash<W: Write>(
Ok(()) Ok(())
} }
#[cfg(all(any(target_os = "linux", target_os = "android"), target_arch = "x86"))]
fn write_crash<W: Write>(
writer: &mut BufWriter<W>,
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( #[cfg(all(
any(target_os = "linux", target_os = "android"), any(target_os = "linux", target_os = "android"),
target_arch = "aarch64" target_arch = "aarch64"
@ -896,8 +913,12 @@ pub fn generate_minibsod<W: Write>(
writeln!(writer, "{:━^100}", " CRASH ")?; writeln!(writer, "{:━^100}", " CRASH ")?;
if let Some(uctx) = ucontext { if let Some(uctx) = ucontext {
write_crash(writer, signal, uctx)?; write_crash(writer, signal, uctx)?;
#[cfg(target_pointer_width = "64")]
{
writeln!(writer, "{:━^100}", " REGISTERS ")?; writeln!(writer, "{:━^100}", " REGISTERS ")?;
dump_registers(writer, uctx)?; dump_registers(writer, uctx)?;
}
} else { } else {
writeln!(writer, "Received signal {signal}")?; writeln!(writer, "Received signal {signal}")?;
} }

View File

@ -159,6 +159,7 @@ fn build_pass(
let r = if cfg!(unix) { let r = if cfg!(unix) {
let r = Command::new(bindir_path.join("clang++")) let r = Command::new(bindir_path.join("clang++"))
.arg("-v") .arg("-v")
.arg(format!("--target={}", env::var("HOST").unwrap()))
.args(cxxflags) .args(cxxflags)
.arg(src_dir.join(src_file)) .arg(src_dir.join(src_file))
.args(additionals) .args(additionals)
@ -171,6 +172,7 @@ fn build_pass(
} else if cfg!(windows) { } else if cfg!(windows) {
let r = Command::new(bindir_path.join("clang-cl.exe")) let r = Command::new(bindir_path.join("clang-cl.exe"))
.arg("-v") .arg("-v")
.arg(format!("--target={}", env::var("HOST").unwrap()))
.args(cxxflags) .args(cxxflags)
.arg(src_dir.join(src_file)) .arg(src_dir.join(src_file))
.args(additionals) .args(additionals)

View File

@ -1,6 +1,6 @@
#include <stdint.h> #include <stdint.h>
#ifndef _WIN32 #if !defined(_WIN32) && defined(__SIZEOF_INT128__)
typedef unsigned __int128 uint128_t; typedef unsigned __int128 uint128_t;
typedef uint128_t u128; typedef uint128_t u128;
#endif #endif
@ -56,7 +56,7 @@ void __cmplog_ins_hook8(uint64_t arg1, uint64_t arg2) {
(void)arg2; (void)arg2;
} }
#ifndef _WIN32 #if !defined(_WIN32) && defined(__SIZEOF_INT128__)
void __cmplog_ins_hook16_extended(uint128_t arg1, uint128_t arg2, void __cmplog_ins_hook16_extended(uint128_t arg1, uint128_t arg2,
uint8_t attr) { uint8_t attr) {
(void)attr; (void)attr;

View File

@ -137,7 +137,7 @@ fn main() {
println!("cargo:rerun-if-changed=src/common.c"); println!("cargo:rerun-if-changed=src/common.c");
#[cfg(feature = "sanitizer_interfaces")] #[cfg(feature = "sanitizer_interfaces")]
{ if env::var("CARGO_CFG_TARGET_POINTER_WIDTH").unwrap() == "64" {
println!("cargo:rerun-if-changed=src/sanitizer_interfaces.h"); println!("cargo:rerun-if-changed=src/sanitizer_interfaces.h");
let build = bindgen::builder() let build = bindgen::builder()
@ -151,6 +151,10 @@ fn main() {
build build
.write_to_file(Path::new(&out_dir).join("sanitizer_interfaces.rs")) .write_to_file(Path::new(&out_dir).join("sanitizer_interfaces.rs"))
.expect("Couldn't write the sanitizer headers!"); .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(); let mut common = cc::Build::new();

View File

@ -252,7 +252,7 @@ void __cmplog_ins_hook8(uint64_t arg1, uint64_t arg2) {
__libafl_targets_cmplog_instructions(k, 8, arg1, 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, void __cmplog_ins_hook16_extended(uint128_t arg1, uint128_t arg2,
uint8_t attr) { uint8_t attr) {
uintptr_t k = RETADDR; uintptr_t k = RETADDR;

View File

@ -6,7 +6,7 @@
#define true 1 #define true 1
#define false 0 #define false 0
#ifndef _WIN32 #if !defined(_WIN32) && defined(__SIZEOF_INT128__)
typedef unsigned __int128 uint128_t; typedef unsigned __int128 uint128_t;
typedef uint128_t u128; typedef uint128_t u128;
#endif #endif