From 1b85a9257716250a887422e472573aca9fdb3920 Mon Sep 17 00:00:00 2001 From: Addison Crump Date: Wed, 19 Mar 2025 16:05:23 +0100 Subject: [PATCH] Fixup libafl_libfuzzer with new nightly internal symbol mangling (#3093) * fixup libfuzzer with new nightly internal symbol mangling * cringe, clippy fail --- 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 7179a560f9..8726b92973 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();