From 2310861d987e212da4c7f02064db6b1880b97e4e Mon Sep 17 00:00:00 2001 From: Addison Crump Date: Wed, 19 Mar 2025 15:20:09 +0100 Subject: [PATCH 1/2] fixup libfuzzer with new nightly internal symbol mangling --- libafl_libfuzzer/build.rs | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/libafl_libfuzzer/build.rs b/libafl_libfuzzer/build.rs index 7179a560f9d..c802ee47030 100644 --- a/libafl_libfuzzer/build.rs +++ b/libafl_libfuzzer/build.rs @@ -168,6 +168,13 @@ fn main() -> Result<(), Box> { let mut redefinitions_file = BufWriter::new(File::create(&redefined_symbols).unwrap()); + let rn_prefix = if cfg!(target_os = "macos") { + // macOS symbols have an extra `_` + "__RN" + } else { + "_RN" + }; + let zn_prefix = if cfg!(target_os = "macos") { // macOS symbols have an extra `_` "__ZN" @@ -188,11 +195,14 @@ fn main() -> Result<(), Box> { } let (_, symbol) = line.rsplit_once(' ').unwrap(); - if symbol.starts_with(zn_prefix) { + if symbol.starts_with(rn_prefix) { + let (_prefix, renamed) = symbol.split_once("__rustc").unwrap(); + let (size, renamed) = renamed.split_once("_").unwrap(); + writeln!(redefinitions_file, "{symbol} {replacement}{size}{renamed}E").unwrap(); + } else if symbol.starts_with(zn_prefix) { writeln!( redefinitions_file, - "{} {}", - symbol, + "{symbol} {}", symbol.replacen(zn_prefix, &replacement, 1) ) .unwrap(); From 6cb06c2167c423e943de11ed0089004a1e641ca0 Mon Sep 17 00:00:00 2001 From: Addison Crump Date: Wed, 19 Mar 2025 15:29:13 +0100 Subject: [PATCH 2/2] cringe, clippy fail --- libafl_libfuzzer/build.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libafl_libfuzzer/build.rs b/libafl_libfuzzer/build.rs index c802ee47030..8726b92973c 100644 --- a/libafl_libfuzzer/build.rs +++ b/libafl_libfuzzer/build.rs @@ -197,7 +197,7 @@ fn main() -> Result<(), Box> { if symbol.starts_with(rn_prefix) { let (_prefix, renamed) = symbol.split_once("__rustc").unwrap(); - let (size, renamed) = renamed.split_once("_").unwrap(); + let (size, renamed) = renamed.split_once('_').unwrap(); writeln!(redefinitions_file, "{symbol} {replacement}{size}{renamed}E").unwrap(); } else if symbol.starts_with(zn_prefix) { writeln!(