| # Copyright 2019 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import("//zircon/public/gn/toolchain/environment.gni") |
| |
| # Fuzzer environments: These add libFuzzer instrumentation and hooks. These |
| # hooks will be undefined in shared libraries, and provided by the compiler |
| # runtime, which itself has an implicit dependency on libzircon. |
| standard_environments(".fuzzer") { |
| # Everything is compiled with the fuzzer instrumentation. |
| # Each variant can add additional bug-detection instrumentation. |
| configs = [ |
| "//zircon/public/gn/config/instrumentation:fuzzer", |
| { |
| # libFuzzer can only be statically linked into each executable. |
| # Instrumented shared library code has dangling references to runtime |
| # symbols that will only be defined in the executable. |
| shlib = true |
| remove = [ "//build/config/zircon:no_undefined_symbols" ] |
| }, |
| { |
| # We care more about accurate stack traces than binary size when fuzzing. |
| remove = [ "//build/config/zircon:default_icf" ] |
| }, |
| ] |
| implicit_deps = [ |
| { |
| types = [ "executable" ] |
| add = [ "//zircon/public/gn/config/instrumentation:fuzzer_deps" ] |
| }, |
| ] |
| |
| # Required by the above. See //zircon/public/gn/config/instrumentation:fuzzer. |
| tags = [ "sancov" ] |
| |
| toolchain_vars = { |
| # Trailing dot will get "$variant/" appended to locate shared libraries. |
| libprefix = "fuzzer." |
| } |
| variant_libprefix = true |
| |
| # Support all the sanitizers plus the baseline variant (i.e. a fuzzer |
| # that only detects explicit failure reports in the code, or crashes). |
| variant_selectors = standard_sanitizer_variants + standard_base_variants |
| |
| # GCC doesn't support the fuzzer config always added here, so prune |
| # it from the baseline list. |
| exclude_variant_tags = [ "gcc" ] |
| |
| # Set sanitizer options that we only want to apply for fuzzers. |
| toolchain_args = { |
| # Unless otherwise noted, these options are the defaults from ClusterFuzz. |
| asan_default_options = string_join(":", |
| [ |
| "alloc_dealloc_mismatch=0", |
| "allocator_may_return_null=1", |
| "check_malloc_usable_size=0", |
| "detect_leaks=0", |
| "detect_odr_violation=0", |
| "detect_stack_use_after_return=1", |
| "malloc_context_size=128", |
| "max_uar_stack_size_log=16", |
| "print_scariness=1", |
| "print_summary=1", |
| "print_suppressions=0", |
| "strict_memcmp=0", |
| "symbolize=0", |
| ]) |
| } |
| } |