Add build option for FuzzerInterceptors (#3049)

* Add build option for FuzzerInterceptors

* Add removed whole_archive feature

---------

Co-authored-by: Rowan Hart <rowanhart@microsoft.com>
This commit is contained in:
Rowan Hart 2025-03-09 13:13:05 -07:00 committed by GitHub
parent 620500e295
commit b8387daa0f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -103,6 +103,11 @@ fn main() {
common.define("DEFAULT_SANITIZERS_OPTIONS", "1");
}
#[cfg(feature = "whole_archive")]
{
common.link_lib_modifier("+whole-archive");
}
common.file(src_dir.join("common.c")).compile("common");
}
@ -132,6 +137,11 @@ fn main() {
println!("cargo:rustc-link-arg=-Wl,--undefined=__sanitizer_weak_hook_strcasecmp");
}
#[cfg(feature = "whole_archive")]
{
sancov_cmp.link_lib_modifier("+whole-archive");
}
sancov_cmp
.define("CMP_MAP_SIZE", Some(&*format!("{cmp_map_size}")))
.define("CMPLOG_MAP_W", Some(&*format!("{cmplog_map_w}")))
@ -164,14 +174,27 @@ fn main() {
#[cfg(feature = "libfuzzer_define_run_driver")]
libfuzzer.define("FUZZER_DEFINE_RUN_DRIVER", "1");
#[cfg(feature = "whole_archive")]
{
libfuzzer.link_lib_modifier("+whole-archive");
}
libfuzzer.compile("libfuzzer");
}
#[cfg(feature = "coverage")]
{
println!("cargo:rerun-if-changed=src/coverage.c");
cc::Build::new()
let mut coverage = cc::Build::new();
#[cfg(feature = "whole_archive")]
{
coverage.link_lib_modifier("+whole-archive");
}
coverage
.file(src_dir.join("coverage.c"))
.define(
"EDGES_MAP_ALLOCATED_SIZE",
@ -189,12 +212,17 @@ fn main() {
#[cfg(unix)]
{
let mut cc = cc::Build::new();
let mut cmplog = cc::Build::new();
#[cfg(feature = "cmplog_extended_instrumentation")]
cc.define("CMPLOG_EXTENDED", Some("1"));
cmplog.define("CMPLOG_EXTENDED", Some("1"));
cc.flag("-Wno-pointer-sign") // UNIX ONLY FLAGS
#[cfg(feature = "whole_archive")]
{
cmplog.link_lib_modifier("+whole-archive");
}
cmplog.flag("-Wno-pointer-sign") // UNIX ONLY FLAGS
.flag("-Wno-sign-compare")
.define("CMP_MAP_SIZE", Some(&*format!("{cmp_map_size}")))
.define("CMPLOG_MAP_W", Some(&*format!("{cmplog_map_w}")))
@ -205,7 +233,14 @@ fn main() {
#[cfg(not(unix))]
{
cc::Build::new()
let mut cmplog = cc::Build::new();
#[cfg(feature = "whole_archive")]
{
cmplog.link_lib_modifier("+whole-archive");
}
cmplog
.define("CMP_MAP_SIZE", Some(&*format!("{cmp_map_size}")))
.define("CMPLOG_MAP_W", Some(&*format!("{cmplog_map_w}")))
.define("CMPLOG_MAP_H", Some(&*format!("{cmplog_map_h}")))
@ -222,7 +257,14 @@ fn main() {
if target_family == "unix" {
println!("cargo:rerun-if-changed=src/forkserver.c");
cc::Build::new()
let mut forkserver = cc::Build::new();
#[cfg(feature = "whole_archive")]
{
forkserver.link_lib_modifier("+whole-archive");
}
forkserver
.file(src_dir.join("forkserver.c"))
.compile("forkserver");
}
@ -232,7 +274,14 @@ fn main() {
if target_family == "windows" {
println!("cargo:rerun-if-changed=src/windows_asan.c");
cc::Build::new()
let mut windows_asan = cc::Build::new();
#[cfg(feature = "whole_archive")]
{
windows_asan.link_lib_modifier("+whole-archive");
}
windows_asan
.file(src_dir.join("windows_asan.c"))
.compile("windows_asan");
}
@ -259,6 +308,21 @@ fn main() {
write!(file, "").unwrap();
}
#[cfg(feature = "libfuzzer_interceptors")]
{
println!("cargo:rerun-if-changed=src/libfuzzer/FuzzerInterceptors.cpp");
let mut libfuzzer_interceptors = cc::Build::new();
libfuzzer_interceptors.file(src_dir.join("libfuzzer/FuzzerInterceptors.cpp"));
#[cfg(feature = "whole_archive")]
{
libfuzzer_interceptors.link_lib_modifier("+whole-archive");
}
libfuzzer_interceptors.cpp(true).compile("interceptors");
}
println!("cargo:rustc-link-search=native={}", &out_dir);
println!("cargo:rerun-if-changed=build.rs");