Fix fuzzbench build (#1004)

* Fix -z,defs handle

* Add libfuzzer_no_link_main option in libfuzzer

* Use libfuzzer_no_link_main for fuzzbench

* no_link_main feature

---------

Co-authored-by: Andrea Fioraldi <andreafioraldi@gmail.com>
This commit is contained in:
Elsa Granger 2023-02-15 18:58:32 +08:00 committed by GitHub
parent f8a4a020e8
commit 44b69666da
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 17 additions and 5 deletions

View File

@ -7,6 +7,7 @@ edition = "2021"
[features] [features]
default = ["std"] default = ["std"]
std = [] std = []
no_link_main = ["libafl_targets/libfuzzer_no_link_main"]
[profile.release] [profile.release]
lto = true lto = true

View File

@ -7,6 +7,7 @@ edition = "2021"
[features] [features]
default = ["std"] default = ["std"]
std = [] std = []
no_link_main = ["libafl_targets/libfuzzer_no_link_main"]
[profile.release] [profile.release]
lto = true lto = true

View File

@ -167,8 +167,10 @@ impl CompilerWrapper for ClangWrapper {
i += 1; i += 1;
continue; continue;
} }
"-z" => { "-z" | "-Wl,-z" => {
if i + 1 < args.len() && args[i + 1].as_ref() == "defs" { if i + 1 < args.len()
&& (args[i + 1].as_ref() == "defs" || args[i + 1].as_ref() == "-Wl,defs")
{
i += 2; i += 2;
continue; continue;
} }

View File

@ -16,6 +16,7 @@ categories = ["development-tools::testing", "emulators", "embedded", "os", "no-s
default = ["std", "sanitizers_flags"] default = ["std", "sanitizers_flags"]
std = ["libafl/std"] std = ["libafl/std"]
libfuzzer = [] libfuzzer = []
libfuzzer_no_link_main = ["libfuzzer"]
sanitizers_flags = [] sanitizers_flags = []
pointer_maps = [] pointer_maps = []
sancov_pcguard_edges = [] sancov_pcguard_edges = []

View File

@ -84,9 +84,13 @@ fn main() {
{ {
println!("cargo:rerun-if-changed=src/libfuzzer.c"); println!("cargo:rerun-if-changed=src/libfuzzer.c");
cc::Build::new() let mut libfuzzer = cc::Build::new();
.file(src_dir.join("libfuzzer.c")) libfuzzer.file(src_dir.join("libfuzzer.c"));
.compile("libfuzzer");
#[cfg(feature = "libfuzzer_no_link_main")]
libfuzzer.define("FUZZER_NO_LINK_MAIN", "1");
libfuzzer.compile("libfuzzer");
} }
println!("cargo:rerun-if-changed=src/common.h"); println!("cargo:rerun-if-changed=src/common.h");

View File

@ -18,6 +18,8 @@ EXT_FUNC_IMPL(LLVMFuzzerTestOneInput, int, (uint8_t *Data, size_t Size), false)
EXT_FUNC_IMPL(libafl_main, void, (void), false) { EXT_FUNC_IMPL(libafl_main, void, (void), false) {
} }
#ifndef FUZZER_NO_LINK_MAIN
EXT_FUNC_IMPL(main, int, (int argc, char** argv), false) { EXT_FUNC_IMPL(main, int, (int argc, char** argv), false) {
libafl_main(); libafl_main();
return 0; return 0;
@ -30,6 +32,7 @@ int main(int argc, char** argv) {
libafl_main(); libafl_main();
} }
#endif #endif
#endif
#pragma GCC diagnostic pop #pragma GCC diagnostic pop