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:
parent
f8a4a020e8
commit
44b69666da
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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 = []
|
||||||
|
@ -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");
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user